diff -Naur ns-3.19/AUTHORS ns-3.20/AUTHORS
--- ns-3.19/AUTHORS	2014-06-17 10:34:00.262638020 -0700
+++ ns-3.20/AUTHORS	2014-06-17 10:33:13.609998153 -0700
@@ -19,20 +19,24 @@
 Junling Bu <linlinjavaer@gmail.com>
 Elena Buchatskaia (borovkovaes@iitp.ru)
 Gustavo Carneiro (gjc@inescporto.pt, gjcarneiro@gmail.com)
+Scott Carpenter (scarpen@ncsu.edu)
 Egemen K. Cetinkaya (ekc@iitc.ku.edu)
 Angelos Chatzipapas (chatzipa@ceid.upatras.gr)
+Eugene Chemeritskiy (echemeritskiy@arccn.ru)
 Yufei Cheng (yfcheng@ittc.ku.edu)
 Andrey Churin (aachurin@gmail.com)
 Salva Climent (jocliba@gmail.com)
 Luis Cortes (cortes@gatech.edu)
 Luca Costantino (luca.costantino@gmail.com)
 Alexander D'souza (moijes12@gmail.com)
+SÃ©bastien Deronne (sebastien.deronne@gmail.com)
 Craig Dowell (craigdo@ee.washington.edu)
 Gilaras Drakeson <gilaras@gmail.com>
 Christian Facchini <c.facchini@gmail.com>
 Denis Fakhriev (fakhriev@iitp.ru)
 Jahanzeb Farooq (Jahanzeb.Farooq@inria.fr, Jahanzeb.Farooq@gmail.com)
 Luca Favatella <slackydeb@gmail.com>
+Margherita Filippetti <morag87@gmail.com>
 Pedro Fortuna (pedro.fortuna@inescporto.pt)
 Juliana Freitag Borin (juliana.freitag@gmail.com)
 Eric Gamess (egamess@gmail.com)
@@ -41,6 +45,7 @@
 Ashim Ghosh <ashim.atiit@gmail.com>
 Martin Giachino (martin.giachino@gmail.com,giachino@fing.edu.uy)
 Tom Goff (tgoff@tgoff.net)
+Juan C. Granda (jcgranda@uniovi.es)
 David Gross (gdavid.devel@gmail.com)
 Maja GrubiÅ¡iÄ‡ (maja.grubisic@live.com)
 Charline Taibi Guguen (charline.guguen@gmail.com)
@@ -51,6 +56,7 @@
 Budiarto Herman <budiarto.herman@magister.fi>
 Tom Hewer <tomhewer@mac.com>
 Kim HÃ¸jgaard-Hansen <kimrhh@gmail.com>
+Chris Hood (chood8@gatech.edu)
 Blake Hurd (naimorai@gmail.com)
 ishan (ishan.chhabra@gmail.com)
 Mohamed Amine Ismail (amine.ismail@inria.fr, iamine@udcast.com)
@@ -62,8 +68,10 @@
 Piotr Jurkiewicz (piotr.jerzy.jurkiewicz@gmail.com)
 Evgeny Kalishenko (ydginster@gmail.com)
 Konstantinos Katsaros <dinos.katsaros@gmail.com>
-Joe Kopena (tjkopena@cs.drexel.edu)
+Morteza Kheirkhah (m.kheirkhah@sussex.ac.uk)
 Flavio Kobuta (flaviokubota@gmail.com)
+Joe Kopena (tjkopena@cs.drexel.edu)
+Christopher Kosecki (christopher.l.kosecki.ctr@mail.mil)
 Aleksey Kovalenko (kovalenko@iitp.ru)
 Mathieu Lacage (mathieu.lacage@inria.fr)
 Emmanuelle Laprise (emmmanuelle.laprise@bluekazoo.ca)
@@ -71,10 +79,12 @@
 Daniel Lertpratchya (nikkipui@gmail.com)
 BjÃ¶rn Lichtblau (lichtbla@informatik.hu-berlin.de)
 Timo Lindhorst <tlnd@online.de>
+Erwan Livolant <erwan.livolant@inria.fr>
 Keith Ma (keith.nwsuaf@gmail.com)
 Federico Maguolo (maguolof@dei.unipd.it)
 Antti Makela (zarhan@cc.hut.fi)
 Francesco Malandrino (francesco.malandrino@gmail.com)
+RubÃ©n MartÃ­nez (rmartinez@deic.uab.cat)
 Fabian Mauchle (f1mauchl@hsr.ch)
 Andrey Mazo (mazo@iitp.ru)
 Jonathan McCrohan (jmccroha@tcd.ie)
@@ -115,8 +125,10 @@
 Andrea Sacco (andrea.sacco85@gmail.com)
 Providence Salumu Munga (Providence.Salumu@gmail.com, Providence.Salumu_Munga@it-sudparis.eu)
 Francisco Javier SÃ¡nchez-Roselly <fnavarro@ujaen.es>
+l.salameh@cs.ucl.ac.uk
 Florian Schmidt (Florian.Schmidt@cs.rwth-aachen.de)
 Guillaume Seguin (guillaume.seguin@inria.fr)
+Tomasz Seweryn (tomasz.seweryn7@gmail.com)
 Kulin Shah (m.kulin@gmail.com)
 Guowang Shi <shiguowang2007@gmail.com>
 Phillip Sitbon (phillip.sitbon@gmail.com)
diff -Naur ns-3.19/bindings/python/ns3modulegen_core_customizations.py ns-3.20/bindings/python/ns3modulegen_core_customizations.py
--- ns-3.19/bindings/python/ns3modulegen_core_customizations.py	2014-06-17 10:34:00.280637881 -0700
+++ ns-3.20/bindings/python/ns3modulegen_core_customizations.py	2014-06-17 10:33:13.628998007 -0700
@@ -1,3 +1,5 @@
+from __future__ import print_function
+import sys
 import re
 
 from pybindgen.typehandlers import base as typehandlers
@@ -26,11 +28,13 @@
     def __init__(self):
         super(SmartPointerTransformation, self).__init__()
         self.rx = re.compile(r'(ns3::|::ns3::|)Ptr<([^>]+)>\s*$')
+        print("{0!r}".format(self), file=sys.stderr)
 
     def _get_untransformed_type_traits(self, name):
         m = self.rx.match(name)
         is_const = False
         if m is None:
+            print("{0!r} did not match".format(name), file=sys.stderr)
             return None, False
         else:
             name1 = m.group(2).strip()
@@ -61,9 +65,9 @@
         ## fix the ctype, add ns3:: namespace
         orig_ctype, is_const = self._get_untransformed_type_traits(args[0])
         if is_const:
-            correct_ctype = 'ns3::Ptr< %s const >' % orig_ctype[:-2]
+            correct_ctype = 'ns3::Ptr< {0} const >'.format(orig_ctype[:-2])
         else:
-            correct_ctype = 'ns3::Ptr< %s >' % orig_ctype[:-2]
+            correct_ctype = 'ns3::Ptr< {0} >'.format(orig_ctype[:-2])
         args = tuple([correct_ctype] + list(args[1:]))
 
         handler = type_handler(*args, **kwargs)
@@ -84,58 +88,6 @@
 del transf
 
 
-class ArgvParam(Parameter):
-    """
-    Converts a python list-of-strings argument to a pair of 'int argc,
-    char *argv[]' arguments to pass into C.
-
-    One Python argument becomes two C function arguments -> it's a miracle!
-
-    Note: this parameter type handler is not registered by any name;
-    must be used explicitly.
-    """
-
-    DIRECTIONS = [Parameter.DIRECTION_IN]
-    CTYPES = []
-    
-    def convert_c_to_python(self, wrapper):
-        raise NotImplementedError
-
-    def convert_python_to_c(self, wrapper):
-        py_name = wrapper.declarations.declare_variable('PyObject*', 'py_' + self.name)
-        argc_var = wrapper.declarations.declare_variable('int', 'argc')
-        name = wrapper.declarations.declare_variable('char**', self.name)
-        idx = wrapper.declarations.declare_variable('Py_ssize_t', 'idx')
-        wrapper.parse_params.add_parameter('O!', ['&PyList_Type', '&'+py_name], self.name)
-
-        #wrapper.before_call.write_error_check('!PyList_Check(%s)' % py_name) # XXX
-
-        wrapper.before_call.write_code("%s = (char **) malloc(sizeof(char*)*PyList_Size(%s));"
-                                       % (name, py_name))
-        wrapper.before_call.add_cleanup_code('free(%s);' % name)
-        wrapper.before_call.write_code('''
-for (%(idx)s = 0; %(idx)s < PyList_Size(%(py_name)s); %(idx)s++)
-{
-''' % vars())
-        wrapper.before_call.sink.indent()
-        wrapper.before_call.write_code('''
-PyObject *item = PyList_GET_ITEM(%(py_name)s, %(idx)s);
-''' % vars())
-        #wrapper.before_call.write_error_check('item == NULL')
-        wrapper.before_call.write_error_check(
-            '!PyString_Check(item)',
-            failure_cleanup=('PyErr_SetString(PyExc_TypeError, '
-                             '"argument %s must be a list of strings");') % self.name)
-        wrapper.before_call.write_code(
-            '%s[%s] = PyString_AsString(item);' % (name, idx))
-        wrapper.before_call.sink.unindent()
-        wrapper.before_call.write_code('}')
-        wrapper.before_call.write_code('%s = PyList_Size(%s);' % (argc_var, py_name))
-        
-        wrapper.call_params.append(argc_var)
-        wrapper.call_params.append(name)
-
-
 class CallbackImplProxyMethod(typehandlers.ReverseWrapperBase):
     """
     Class that generates a proxy virtual method that calls a similarly named python method.
@@ -204,7 +156,7 @@
             kwargs = {}
         try:
             return_type = ReturnValue.new(str(return_ctype), **kwargs)
-        except (typehandlers.TypeLookupError, typehandlers.TypeConfigurationError), ex:
+        except (typehandlers.TypeLookupError, typehandlers.TypeConfigurationError) as ex:
             warnings.warn("***** Unable to register callback; Return value '%s' error (used in %s): %r"
                           % (callback_return, cls_name, ex),
                           Warning)
@@ -223,7 +175,7 @@
                 kwargs = {}
             try:
                 arguments.append(Parameter.new(str(param_ctype), arg_name, **kwargs))
-            except (typehandlers.TypeLookupError, typehandlers.TypeConfigurationError), ex:
+            except (typehandlers.TypeLookupError, typehandlers.TypeConfigurationError) as ex:
                 warnings.warn("***** Unable to register callback; parameter '%s %s' error (used in %s): %r"
                               % (arg_type, arg_name, cls_name, ex),
                               Warning)
@@ -241,7 +193,7 @@
         class PythonCallbackParameter(Parameter):
             "Class handlers"
             CTYPES = [cls_name]
-            print >> sys.stderr, "***** registering callback handler: %r" % ctypeparser.normalize_type_string(cls_name)
+            print("***** registering callback handler: %r" % ctypeparser.normalize_type_string(cls_name), file=sys.stderr)
             DIRECTIONS = [Parameter.DIRECTION_IN]
             PYTHON_CALLBACK_IMPL_NAME = class_name
             TEMPLATE_ARGS = template_parameters
diff -Naur ns-3.19/bindings/python/ns3modulegen-modular.py ns-3.20/bindings/python/ns3modulegen-modular.py
--- ns-3.19/bindings/python/ns3modulegen-modular.py	2014-06-17 10:34:00.278637897 -0700
+++ ns-3.20/bindings/python/ns3modulegen-modular.py	2014-06-17 10:33:13.626998022 -0700
@@ -1,3 +1,4 @@
+from __future__ import print_function
 import warnings
 import sys
 import os
@@ -6,6 +7,8 @@
 from pybindgen.module import MultiSectionFactory
 import ns3modulegen_core_customizations
 
+import logging
+
 pybindgen.settings.wrapper_registry = pybindgen.settings.StdMapWrapperRegistry
 
 import traceback
@@ -55,6 +58,9 @@
 
 
 def main(argv):
+    logging.basicConfig()
+    logging.getLogger("pybindgen.typehandlers").setLevel(logging.DEBUG)
+
     module_abs_src_path, target, extension_name, output_cc_file_name = argv[1:]
     module_name = os.path.basename(module_abs_src_path)
     out = MyMultiSectionFactory(output_cc_file_name)
@@ -71,11 +77,11 @@
 
         try:
             from callbacks_list import callback_classes
-        except ImportError, ex:
-            print >> sys.stderr, "***************", repr(ex)
+        except ImportError as ex:
+            print("***************", repr(ex), file=sys.stderr)
             callback_classes = []
         else:
-            print >> sys.stderr, ">>>>>>>>>>>>>>>>", repr(callback_classes)
+            print(">>>>>>>>>>>>>>>>", repr(callback_classes), file=sys.stderr)
 
     finally:
         sys.path.pop(0)
diff -Naur ns-3.19/bindings/python/waf ns-3.20/bindings/python/waf
--- ns-3.19/bindings/python/waf	2014-06-17 10:34:00.283637858 -0700
+++ ns-3.20/bindings/python/waf	1969-12-31 16:00:00.000000000 -0800
@@ -1 +0,0 @@
-exec "`dirname "$0"`"/../../waf "$@"
\ No newline at end of file
diff -Naur ns-3.19/bindings/python/wscript ns-3.20/bindings/python/wscript
--- ns-3.19/bindings/python/wscript	2014-06-17 10:34:00.286637835 -0700
+++ ns-3.20/bindings/python/wscript	2014-06-17 10:33:13.633997968 -0700
@@ -13,7 +13,7 @@
 # after = TaskGen.after
 
 ## https://launchpad.net/pybindgen/
-REQUIRED_PYBINDGEN_VERSION = (0, 16, 0, 834)
+REQUIRED_PYBINDGEN_VERSION = (0, 17, 0, 868)
 REQUIRED_PYGCCXML_VERSION = (0, 9, 5)
 
 RUN_ME=-3
@@ -47,6 +47,10 @@
     opt.add_option('--with-python',
                    help=('Path to the Python interpreter to use.'),
                    default=None, dest='with_python', type="string")
+    opt.add_option('--no32bit-scan',
+                   help=("Don't scan for the 32-bit variant of the bindings on 64-bit platforms."),
+                   action="store_true", default=False,
+                   dest='no32bit_scan')
 
 
 def configure(conf):
@@ -161,7 +165,7 @@
     else:
         out = subprocess.Popen([conf.env['PYTHON'][0], "-c",
                                 "import pybindgen.version; "
-                                "print '.'.join([str(x) for x in pybindgen.version.__version__])"],
+                                "print('.'.join([str(x) for x in pybindgen.version.__version__]))"],
                                 stdout=subprocess.PIPE).communicate()[0]
         pybindgen_version_str = out.strip()
         pybindgen_version = tuple([int(x) for x in pybindgen_version_str.split('.')])
@@ -436,7 +440,9 @@
         else:
             import struct
             if struct.calcsize('I') == 4 and struct.calcsize('L') == 8 and struct.calcsize('P') == 8:
-                scan_targets.extend([('gcc_ILP32', '-m32'), ('gcc_LP64', '-m64')])
+                if not Options.options.no32bit_scan:
+                    scan_targets.append(('gcc_ILP32', '-m32'))
+                scan_targets.append(('gcc_LP64', '-m64'))
             elif struct.calcsize('I') == 4 and struct.calcsize('L') == 4 and struct.calcsize('P') == 4:
                 scan_targets.append(('gcc_ILP32', ''))
             else:
diff -Naur ns-3.19/CHANGES.html ns-3.20/CHANGES.html
--- ns-3.19/CHANGES.html	2014-06-17 10:34:00.268637974 -0700
+++ ns-3.20/CHANGES.html	2014-06-17 10:33:13.616998099 -0700
@@ -51,6 +51,64 @@
 us a note on ns-developers mailing list.</p>
 
 <hr>
+<h1>Changes from ns-3.19 to ns-3.20</h1>
+<h2>New API:</h2>
+<ul>
+  <li> Models have been added for low-rate, wireless personal area networks
+(LR-WPAN) as specified by IEEE standard 802.15.4 (2006).  The current 
+emphasis is on the unslotted mode of 802.15.4 operation for use in Zigbee, 
+and the scope is limited to enabling a single mode (CSMA/CA) with basic 
+data transfer capabilities. Association with PAN coordinators is not yet 
+supported, nor the use of extended addressing. Interference is modeled as 
+AWGN but this is currently not thoroughly tested.  The NetDevice Tx queue 
+is not limited, i.e., packets are never dropped due to queue becoming full. 
+They may be dropped due to excessive transmission retries or channel access 
+failure.  </li>
+  <li> A new IPv6 routing protocol has been added: RIPng. This protocol is
+  an Interior Gateway Protocol and it is available in the Internet module. </li>
+  <li> A new LTE MAC downlink scheduling algorithm named Channel and QoS 
+  Aware (CQA) Scheduler is provided by the new "ns3::CqaFfMacScheduler" object.
+  </li>
+  <li> Units may be attached to Time objects, to facilitate specific output
+  formats (see Time::As()) </li>
+  <li> FlowMonitor "SerializeToXml" functions are now directly available
+  from the helper.  </li>
+  <li> Access to OLSR's HNA table has been enabled </li>
+</ul>
+
+<h2>Changes to existing API:</h2>
+<ul>
+  <li> The SixLowPan model can now use uncompressed IPv6 headers. An option to
+  define the minimum compressed packet size has been added.  </li>
+  <li> MinDistance wsa replaced by MinLoss in FriisPropagationLossModel, to
+  better handle conditions outside of the assumed far field region. </li>
+  <li> In the DSR model, the attribute DsrOptionRerrHeader::ErrorType" has
+  been removed. </li>
+</ul>
+
+<h2>Changes to build system:</h2>
+<ul>
+  <li> Python 3.3 is now supported for Python bindings for ns-3.  Python 3.3 
+  support for API scanning is not supported.  Python 3.2 is not supported.</li>
+  <li>  Enable selection of high precision int64x64_t implementation
+  at configure time, for debugging purposes.</li>
+  <li> Optimized builds are now enabling signed overflow optimization 
+  (-fstrict-overflow) and for gcc 4.8.2 and greater, also warning for cases 
+  where an optimizization may occur due to compiler assumption that 
+  overflow will not occur. </li>
+</ul>
+
+<h2>Changed behavior:</h2>
+<ul>
+  <li> The Internet FlowMonitor can now track IPv6 packets.  </li>
+  <li> Ipv6Extension::m_dropTrace has been removed. Ipv6L3Protocol::m_dropTrace
+  is now fired when appropriate.  </li>
+  <li> IPv4 identification field value is now dependent on the protocol 
+  field.  </li>
+  <li> Point-to-point trace sources now contain PPP headers </li>
+</ul>
+
+<hr>
 <h1>Changes from ns-3.18.1 to ns-3.19</h1>
 
 <h2>New API:</h2>
diff -Naur ns-3.19/doc/doxygen.conf ns-3.20/doc/doxygen.conf
--- ns-3.19/doc/doxygen.conf	2014-06-17 10:34:00.290637804 -0700
+++ ns-3.20/doc/doxygen.conf	2014-06-17 10:33:13.639997922 -0700
@@ -1,4 +1,6 @@
-# Doxyfile 1.8.1.1
+# -*-sh-*-
+
+# Doxyfile 1.8.3.1
 
 # This file describes the settings to be used by the documentation system
 # doxygen (www.doxygen.org) for a project.
@@ -126,7 +128,9 @@
 # only done if one of the specified strings matches the left-hand part of
 # the path. The tag can be used to show relative paths in the file list.
 # If left blank the directory from which doxygen is run is used as the
-# path to strip.
+# path to strip. Note that you specify absolute paths here, but also
+# relative paths, which will be relative from the directory where doxygen is
+# started.
 
 STRIP_FROM_PATH        =
 
@@ -242,14 +246,15 @@
 OPTIMIZE_OUTPUT_VHDL   = NO
 
 # Doxygen selects the parser to use depending on the extension of the files it
-# parses. With this tag you can assign which parser to use for a given extension.
-# Doxygen has a built-in mapping, but you can override or extend it using this
-# tag. The format is ext=language, where ext is a file extension, and language
-# is one of the parsers supported by doxygen: IDL, Java, Javascript, CSharp, C,
-# C++, D, PHP, Objective-C, Python, Fortran, VHDL, C, C++. For instance to make
-# doxygen treat .inc files as Fortran files (default is PHP), and .f files as C
-# (default is Fortran), use: inc=Fortran f=C. Note that for custom extensions
-# you also need to set FILE_PATTERNS otherwise the files are not read by doxygen.
+# parses. With this tag you can assign which parser to use for a given
+# extension. Doxygen has a built-in mapping, but you can override or extend it
+# using this tag. The format is ext=language, where ext is a file extension,
+# and language is one of the parsers supported by doxygen: IDL, Java,
+# Javascript, CSharp, C, C++, D, PHP, Objective-C, Python, Fortran, VHDL, C,
+# C++. For instance to make doxygen treat .inc files as Fortran files (default
+# is PHP), and .f files as C (default is Fortran), use: inc=Fortran f=C. Note
+# that for custom extensions you also need to set FILE_PATTERNS otherwise the
+# files are not read by doxygen.
 
 EXTENSION_MAPPING      =
 
@@ -262,6 +267,13 @@
 
 MARKDOWN_SUPPORT       = YES
 
+# When enabled doxygen tries to link words that correspond to documented classes,
+# or namespaces to their corresponding documentation. Such a link can be
+# prevented in individual cases by by putting a % sign in front of the word or
+# globally by setting AUTOLINK_SUPPORT to NO.
+
+AUTOLINK_SUPPORT       = YES
+
 # If you use STL classes (i.e. std::string, std::vector, etc.) but do not want
 # to include (a tag file for) the STL sources as input, then you should
 # set this tag to YES in order to let doxygen match functions declarations and
@@ -282,10 +294,10 @@
 
 SIP_SUPPORT            = NO
 
-# For Microsoft's IDL there are propget and propput attributes to indicate getter
-# and setter methods for a property. Setting this option to YES (the default)
-# will make doxygen replace the get and set methods by a property in the
-# documentation. This will only work if the methods are indeed getting or
+# For Microsoft's IDL there are propget and propput attributes to indicate
+# getter and setter methods for a property. Setting this option to YES (the
+# default) will make doxygen replace the get and set methods by a property in
+# the documentation. This will only work if the methods are indeed getting or
 # setting a simple type. If this is not the case, or you want to show the
 # methods anyway, you should set this option to NO.
 
@@ -346,7 +358,7 @@
 # 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0,
 # corresponding to a cache size of 2^16 = 65536 symbols.
 
-SYMBOL_CACHE_SIZE      = 0
+SYMBOL_CACHE_SIZE      = 1
 
 # Similar to the SYMBOL_CACHE_SIZE the size of the symbol lookup cache can be
 # set using LOOKUP_CACHE_SIZE. This cache is used to resolve symbols given
@@ -375,7 +387,8 @@
 
 EXTRACT_PRIVATE        = YES
 
-# If the EXTRACT_PACKAGE tag is set to YES all members with package or internal scope will be included in the documentation.
+# If the EXTRACT_PACKAGE tag is set to YES all members with package or internal
+# scope will be included in the documentation.
 
 EXTRACT_PACKAGE        = NO
 
@@ -546,7 +559,8 @@
 GENERATE_DEPRECATEDLIST= YES
 
 # The ENABLED_SECTIONS tag can be used to enable conditional
-# documentation sections, marked by \if sectionname ... \endif.
+# documentation sections, marked by \if section-label ... \endif
+# and \cond section-label ... \endcond blocks.
 
 ENABLED_SECTIONS       =
 
@@ -604,7 +618,8 @@
 # requires the bibtex tool to be installed. See also
 # http://en.wikipedia.org/wiki/BibTeX for more info. For LaTeX the style
 # of the bibliography can be controlled using LATEX_BIB_STYLE. To use this
-# feature you need bibtex and perl available in the search path.
+# feature you need bibtex and perl available in the search path. Do not use
+# file names with spaces, bibtex cannot handle them.
 
 CITE_BIB_FILES         =
 
@@ -836,6 +851,13 @@
 
 FILTER_SOURCE_PATTERNS =
 
+# If the USE_MD_FILE_AS_MAINPAGE tag refers to the name of a markdown file that
+# is part of the input, its contents will be placed on the main page (index.html).
+# This can be useful if you have a project on for instance GitHub and want reuse
+# the introduction page also for the doxygen output.
+
+USE_MDFILE_AS_MAINPAGE =
+
 #---------------------------------------------------------------------------
 # configuration options related to source browsing
 #---------------------------------------------------------------------------
@@ -957,12 +979,22 @@
 
 # The HTML_STYLESHEET tag can be used to specify a user-defined cascading
 # style sheet that is used by each HTML page. It can be used to
-# fine-tune the look of the HTML output. If the tag is left blank doxygen
-# will generate a default style sheet. Note that doxygen will try to copy
-# the style sheet file to the HTML output directory, so don't put your own
-# style sheet in the HTML output directory as well, or it will be erased!
+# fine-tune the look of the HTML output. If left blank doxygen will
+# generate a default style sheet. Note that it is recommended to use
+# HTML_EXTRA_STYLESHEET instead of this one, as it is more robust and this
+# tag will in the future become obsolete.
+
+HTML_STYLESHEET        =
+
+# The HTML_EXTRA_STYLESHEET tag can be used to specify an additional
+# user-defined cascading style sheet that is included after the standard
+# style sheets created by doxygen. Using this option one can overrule
+# certain style aspects. This is preferred over using HTML_STYLESHEET
+# since it does not replace the standard style sheet and is therefor more
+# robust against future updates. Doxygen will copy the style sheet file to
+# the output directory.
 
-HTML_STYLESHEET        = doc/ns3_html_theme/static/ns3_stylesheet.css
+HTML_EXTRA_STYLESHEET  = doc/ns3_html_theme/static/ns3_stylesheet.css
 
 # The HTML_EXTRA_FILES tag can be used to specify one or more extra images or
 # other source files which should be copied to the HTML output directory. Note
@@ -971,8 +1003,7 @@
 # files. In the HTML_STYLESHEET file, use the file name only. Also note that
 # the files will be copied as-is; there are no commands or markers available.
 
-HTML_EXTRA_FILES       = doc/ns3_html_theme/static/doxygen.css \
-                         doc/ns3_html_theme/static/bar-top.png \
+HTML_EXTRA_FILES       = doc/ns3_html_theme/static/bar-top.png \
                          doc/ns3_html_theme/static/drop-down-menu.js \
                          doc/ns3_html_theme/static/favicon.ico \
                          doc/ns3_html_theme/static/menu-bgr-400.png \
@@ -1055,9 +1086,9 @@
 
 DOCSET_BUNDLE_ID       = org.nsnam.ns3
 
-# When GENERATE_PUBLISHER_ID tag specifies a string that should uniquely identify
-# the documentation publisher. This should be a reverse domain-name style
-# string, e.g. com.mycompany.MyDocSet.documentation.
+# When GENERATE_PUBLISHER_ID tag specifies a string that should uniquely
+# identify the documentation publisher. This should be a reverse domain-name
+# style string, e.g. com.mycompany.MyDocSet.documentation.
 
 DOCSET_PUBLISHER_ID    = org.nsnam.ns3
 
@@ -1242,6 +1273,13 @@
 
 USE_MATHJAX            = NO
 
+# When MathJax is enabled you can set the default output format to be used for
+# thA MathJax output. Supported types are HTML-CSS, NativeMML (i.e. MathML) and
+# SVG. The default value is HTML-CSS, which is slower, but has the best
+# compatibility.
+
+MATHJAX_FORMAT         = HTML-CSS
+
 # When MathJax is enabled you need to specify the location relative to the
 # HTML output directory using the MATHJAX_RELPATH option. The destination
 # directory should contain the MathJax.js script. For instance, if the mathjax
@@ -1252,7 +1290,7 @@
 # However, it is strongly recommended to install a local
 # copy of MathJax from http://www.mathjax.org before deployment.
 
-MATHJAX_RELPATH        = http://www.mathjax.org/mathjax
+MATHJAX_RELPATH        = http://cdn.mathjax.org/mathjax/latest
 
 # The MATHJAX_EXTENSIONS tag can be used to specify one or MathJax extension
 # names that should be enabled during MathJax rendering.
@@ -1270,15 +1308,55 @@
 SEARCHENGINE           = YES
 
 # When the SERVER_BASED_SEARCH tag is enabled the search engine will be
-# implemented using a PHP enabled web server instead of at the web client
-# using Javascript. Doxygen will generate the search PHP script and index
-# file to put on the web server. The advantage of the server
-# based approach is that it scales better to large projects and allows
-# full text search. The disadvantages are that it is more difficult to setup
-# and does not have live searching capabilities.
+# implemented using a web server instead of a web client using Javascript.
+# There are two flavours of web server based search depending on the
+# EXTERNAL_SEARCH setting. When disabled, doxygen will generate a PHP script for
+# searching and an index file used by the script. When EXTERNAL_SEARCH is
+# enabled the indexing and searching needs to be provided by external tools.
+# See the manual for details.
 
 SERVER_BASED_SEARCH    = NO
 
+# When EXTERNAL_SEARCH is enabled doxygen will no longer generate the PHP
+# script for searching. Instead the search results are written to an XML file
+# which needs to be processed by an external indexer. Doxygen will invoke an
+# external search engine pointed to by the SEARCHENGINE_URL option to obtain
+# the search results. Doxygen ships with an example indexer (doxyindexer) and
+# search engine (doxysearch.cgi) which are based on the open source search engine
+# library Xapian. See the manual for configuration details.
+
+EXTERNAL_SEARCH        = NO
+
+# The SEARCHENGINE_URL should point to a search engine hosted by a web server
+# which will returned the search results when EXTERNAL_SEARCH is enabled.
+# Doxygen ships with an example search engine (doxysearch) which is based on
+# the open source search engine library Xapian. See the manual for configuration
+# details.
+
+SEARCHENGINE_URL       =
+
+# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed
+# search data is written to a file for indexing by an external tool. With the
+# SEARCHDATA_FILE tag the name of this file can be specified.
+
+SEARCHDATA_FILE        = searchdata.xml
+
+# When SERVER_BASED_SEARCH AND EXTERNAL_SEARCH are both enabled the
+# EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is
+# useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple
+# projects and redirect the results back to the right project.
+
+EXTERNAL_SEARCH_ID     =
+
+# The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen
+# projects other than the one defined by this configuration file, but that are
+# all added to the same external search index. Each project needs to have a
+# unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id
+# of to a relative location where the documentation can be found.
+# The format is: EXTRA_SEARCH_MAPPINGS = id1=loc1 id2=loc2 ...
+
+EXTRA_SEARCH_MAPPINGS  =
+
 #---------------------------------------------------------------------------
 # configuration options related to the LaTeX output
 #---------------------------------------------------------------------------
@@ -1564,6 +1642,9 @@
 
 INCLUDE_PATH           =
 
+# Allow doxygen to find generated include files, such as ns3/core-config.h
+INCLUDE_PATH          += build
+
 # You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard
 # patterns (like *.h and *.hpp) to filter out the header-files in the
 # directories. If left blank, the patterns specified with FILE_PATTERNS will
@@ -1579,8 +1660,22 @@
 # undefined via #undef or recursively expanded use the := operator
 # instead of the = operator.
 
-PREDEFINED             = NS3_ASSERT_ENABLE \
-                         NS3_LOG_ENABLE
+# ns-3:
+#
+# We predefine NS3_ASSERT_ENABLE and NS3_LOG_ENABLE so doxygen sees
+# the working definitions.  (These are normally defined by waf
+# in ns3/core-config.h)
+#
+# Function like macros at file global scope typically need to be here,
+# since doxygen confuses invocations of these macros for function
+# definitions.
+
+PREDEFINED             = \
+                         NS3_ASSERT_ENABLE \
+                         NS3_LOG_ENABLE \
+                         NS_LOG_COMPONENT_DEFINE()=1 \
+                         NS_LOG_COMPONENT_DEFINE_MASK()=1 \
+			 NS_OBJECT_ENSURE_REGISTERED()=1 \
 
 # 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.
diff -Naur ns-3.19/doc/doxygen.warnings.report.sh ns-3.20/doc/doxygen.warnings.report.sh
--- ns-3.19/doc/doxygen.warnings.report.sh	2014-06-17 10:34:00.291637796 -0700
+++ ns-3.20/doc/doxygen.warnings.report.sh	2014-06-17 10:33:13.639997922 -0700
@@ -136,14 +136,14 @@
     conf=$DIR/doxygen.conf
 
     sed -i.bak -E '/^EXTRACT_ALL |^HAVE_DOT |^WARNINGS /s/YES/no/' $conf
-    rm -f $conf.bak
 
     echo
     echo -n "Rebuilding doxygen docs with full errors..."
     (cd "$ROOT" && ./waf --doxygen >/dev/null 2>&1)
     status=$?
 
-    hg revert $conf
+    rm -f $conf
+    mv -f $conf.bak $conf
 
     if [ $status -eq 0 ]; then
 	echo "Done."
diff -Naur ns-3.19/doc/main.h ns-3.20/doc/main.h
--- ns-3.19/doc/main.h	2014-06-17 10:34:00.292637789 -0700
+++ ns-3.20/doc/main.h	2014-06-17 10:33:13.640997914 -0700
@@ -71,3 +71,28 @@
  * ns3 namespace.
  */
 
+// Macros defined by the build system.
+//
+// These have to be visible for doxygen to document them,
+// so we put them here in a file only seen by doxygen, not the compiler.
+/**
+ * \ingroup assert
+ *
+ * \def NS3_ASSERT_ENABLE
+ *
+ * Enable asserts at compile time.
+ *
+ * This is normally set by `./waf configure --build-profile=debug`.
+ */
+#define NS3_ASSERT_ENABLE
+
+/**
+ * \ingroup logging
+ *
+ * \def NS3_LOG_ENABLE
+ *
+ * Enable logging at compile time.
+ *
+ * This is normally set by `./waf configure --build-profile=debug`.
+ */
+#define NS3_LOG_ENABLE
diff -Naur ns-3.19/doc/manual/source/attributes.rst ns-3.20/doc/manual/source/attributes.rst
--- ns-3.19/doc/manual/source/attributes.rst	2014-06-17 10:34:00.296637758 -0700
+++ ns-3.20/doc/manual/source/attributes.rst	2014-06-17 10:33:13.644997883 -0700
@@ -741,6 +741,11 @@
     
       Simulator::Destroy ();
     
+Note the placement of these statements just prior to the 
+:cpp:func:`Simulator::Run ()` statement.  This output logs all of the
+values in place just prior to starting the simulation (i.e. after
+all of the configuration has taken place).
+
 After running, you can open the output-attributes.txt file and see:
 
 .. sourcecode:: text
@@ -808,15 +813,34 @@
     
 This file can be archived with your simulation script and output data.
 
-While it is possible to generate a sample config file and lightly edit it to
-change a couple of values, there are cases where this process will not work
-because the same value on the same object can appear multiple times in the same
-automatically-generated configuration file under different configuration paths.
-
-As such, the best way to use this class is to use it to generate an initial
-configuration file, extract from that configuration file only the strictly
-necessary elements, and move these minimal elements to a new configuration file
-which can then safely be edited and loaded in a subsequent simulation run. 
+Next, we discuss using this to configure simulations via an input
+configuration file.  There are a couple of key differences when
+compared to use for logging the final simulation configuration.  First, we
+need to place statements such as these at the beginning of the program,
+before simulation configuration statements are written (so the values
+are registered before being used in object construction).
+
+::
+
+      Config::SetDefault ("ns3::ConfigStore::Filename", StringValue ("input-defaults.xml"));
+      Config::SetDefault ("ns3::ConfigStore::Mode", StringValue ("Load"));
+      Config::SetDefault ("ns3::ConfigStore::FileFormat", StringValue ("Xml"));
+      ConfigStore inputConfig;
+      inputConfig.ConfigureDefaults ();
+
+Next, note that loading of input configuration data is limited to attribute
+default (i.e. not instance) values, and global values.  Attribute instance
+values are not supported because at this stage of the simulation, before
+any objects are constructed, there are no such object instances around.
+(Note, future enhancements to the config store may change this behavior).
+
+Second, while the output of config store state will list everything in
+the database, the input file need only contain the specific values to
+be overridden.  So, one way to use this class for input file configuration
+is to generate an initial configuration using the output (Save) method 
+described above, extract from that configuration file only the elements
+one wishes to change, and move these minimal elements to a new configuration 
+file which can then safely be edited and loaded in a subsequent simulation run. 
 
 When the ConfigStore object is instantiated, its attributes Filename, Mode, and
 FileFormat must be set, either via command-line or via program statements.  
@@ -824,9 +848,7 @@
 As a more complicated example, let's assume that we want to read in a
 configuration of defaults from an input file named "input-defaults.xml", and
 write out the resulting attributes to a separate file called
-"output-attributes.xml".  (Note-- to get this input xml file to begin with, it
-is sometimes helpful to run the program to generate an output xml file first,
-then hand-edit that file and re-input it for the next simulation run).::
+"output-attributes.xml".::
 
     #include "ns3/config-store-module.h"
     ...
diff -Naur ns-3.19/doc/manual/source/conf.py ns-3.20/doc/manual/source/conf.py
--- ns-3.19/doc/manual/source/conf.py	2014-06-17 10:34:00.297637750 -0700
+++ ns-3.20/doc/manual/source/conf.py	2014-06-17 10:33:13.645997876 -0700
@@ -41,16 +41,16 @@
 
 # General information about the project.
 project = u'ns-3'
-copyright = u'2008-13, ns-3 project'
+copyright = u'2010, 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.19'
+version = 'ns-3.20'
 # The full version, including alpha/beta/rc tags.
-release = 'ns-3.19'
+release = 'ns-3.20'
 
 # The language for content autogenerated by Sphinx. Refer to documentation
 # for a list of supported languages.
diff -Naur ns-3.19/doc/manual/source/object-model.rst ns-3.20/doc/manual/source/object-model.rst
--- ns-3.19/doc/manual/source/object-model.rst	2014-06-17 10:34:00.303637704 -0700
+++ ns-3.20/doc/manual/source/object-model.rst	2014-06-17 10:33:13.651997829 -0700
@@ -176,7 +176,7 @@
 binary-level compatibility of replaceable components is not supported and we
 have tried to simplify the syntax and impact on model developers.  
 
-Exmaples
+Examples
 ********
 
 Aggregation example
diff -Naur ns-3.19/doc/models/Makefile ns-3.20/doc/models/Makefile
--- ns-3.19/doc/models/Makefile	2014-06-17 10:34:00.310637650 -0700
+++ ns-3.20/doc/models/Makefile	2014-06-17 10:33:13.658997775 -0700
@@ -80,6 +80,7 @@
 	$(SRC)/flow-monitor/doc/flow-monitor.rst \
 	$(SRC)/wave/doc/wave.rst \
 	$(SRC)/sixlowpan/doc/sixlowpan.rst \
+	$(SRC)/lr-wpan/doc/lr-wpan.rst \
 
 # list all model library figure files that need to be copied to 
 # $SOURCETEMP/figures.  For each figure to be included in all
@@ -213,28 +214,29 @@
 	$(SRC)/stats/doc/gnuplot-example.png \
 	$(SRC)/stats/doc/gnuplot-helper-example.png \
 	$(SRC)/stats/doc/seventh-packet-byte-count.png \
-	$(SRC)/netanim/doc/figures/Dumbbell.png \
-	$(SRC)/netanim/doc/figures/Dumbbell.pdf \
 	$(SRC)/netanim/doc/figures/PacketStatistics.png \
 	$(SRC)/netanim/doc/figures/PacketStatistics.pdf \
-	$(SRC)/netanim/doc/figures/FastForward.png \
-	$(SRC)/netanim/doc/figures/FastForward.pdf \
-	$(SRC)/netanim/doc/figures/Wireless.png \
-	$(SRC)/netanim/doc/figures/Wireless.pdf \
-	$(SRC)/netanim/doc/figures/Precision.png \
-	$(SRC)/netanim/doc/figures/Precision.pdf \
-	$(SRC)/netanim/doc/figures/Persist.png \
-	$(SRC)/netanim/doc/figures/Persist.pdf \
-	$(SRC)/netanim/doc/figures/SimTime.png \
-	$(SRC)/netanim/doc/figures/SimTime.pdf \
+	$(SRC)/netanim/doc/figures/NetAnim_3_105.png \
+	$(SRC)/netanim/doc/figures/NetAnim_3_105.pdf \
 	$(SRC)/netanim/doc/figures/Trajectory.png \
 	$(SRC)/netanim/doc/figures/Trajectory.pdf \
-	$(SRC)/netanim/doc/figures/UpdateRateInterval.png \
-	$(SRC)/netanim/doc/figures/UpdateRateInterval.pdf \
-	$(SRC)/netanim/doc/figures/WithoutPrecision.png \
-	$(SRC)/netanim/doc/figures/WithoutPrecision.pdf \
-	$(SRC)/netanim/doc/figures/WithPrecision.png \
-	$(SRC)/netanim/doc/figures/WithPrecision.pdf \
+	$(SRC)/netanim/doc/figures/NodeCountersChart.png \
+	$(SRC)/netanim/doc/figures/NodeCountersChart.pdf \
+	$(SRC)/netanim/doc/figures/NodeCountersTable.png \
+	$(SRC)/netanim/doc/figures/NodeCountersTable.pdf \
+	$(SRC)/netanim/doc/figures/RoutingTables.png \
+	$(SRC)/netanim/doc/figures/RoutingTables.pdf \
+	$(SRC)/netanim/doc/figures/PacketTimeline.png \
+	$(SRC)/netanim/doc/figures/PacketTimeline.pdf \
+	$(SRC)/spectrum/doc/spectrum-channel-phy-interface.png \
+	$(SRC)/spectrum/doc/spectrum-channel-phy-interface.pdf \
+	$(SRC)/spectrum/doc/spectrum-analyzer-example.eps \
+	$(SRC)/lr-wpan/doc/lr-wpan-arch.dia \
+	$(SRC)/lr-wpan/doc/lr-wpan-data-example.dia \
+	$(SRC)/lr-wpan/doc/lr-wpan-primitives.dia \
+	$(SRC)/lr-wpan/doc/802-15-4-ber.eps \
+	$(SRC)/lr-wpan/doc/802-15-4-per-sens.eps \
+	$(SRC)/lr-wpan/doc/802-15-4-psr-distance.eps
 
 # specify figures from which .png and .pdf figures need to be
 # generated (all dia and eps figures)
@@ -303,6 +305,13 @@
 	$(FIGURES)/lte-epc-x2-entity-saps.eps \
 	$(FIGURES)/lte-strongest-cell-handover-algorithm.eps \
 	$(FIGURES)/auvmobility-classes.eps \
+	$(FIGURES)/spectrum-analyzer-example.eps \
+	$(FIGURES)/lr-wpan-primitives.eps \
+	$(FIGURES)/lr-wpan-data-example.eps \
+	$(FIGURES)/lr-wpan-arch.eps \
+	$(FIGURES)/802-15-4-ber.eps \
+	$(FIGURES)/802-15-4-per-sens.eps \
+	$(FIGURES)/802-15-4-psr-distance.eps 
 
 # rescale pdf figures as necessary
 $(FIGURES)/testbed.pdf_width = 5in
@@ -339,6 +348,9 @@
 $(FIGURES)/mac-random-access-noncontention.pdf_width = 15cm
 $(FIGURES)/helpers.pdf_width = 8cm
 $(FIGURES)/auvmobility-classes.pdf_width = 10cm
+$(FIGURES)/spectrum-analyzer-example.pdf_width = 15cm
+$(FIGURES)/lr-wpan-primitives.pdf_width = 3in
+$(FIGURES)/lr-wpan-arch.pdf_width = 2in
 
 IMAGES_PNG = ${IMAGES_EPS:.eps=.png}
 IMAGES_PDF = ${IMAGES_EPS:.eps=.pdf}
@@ -389,11 +401,10 @@
 	@echo "  doctest    to run all doctests embedded in the documentation (if enabled)"
 
 copy-sources:  $(SOURCES)
-	@rm -rf $(SOURCETEMP)
 	@mkdir -p $(SOURCETEMP) 
 	@mkdir -p $(FIGURES) 
-	@cp -r $(SOURCES) $(SOURCETEMP)
-	@cp -r $(SOURCEFIGS) $(FIGURES)
+	@cp -r -p $(SOURCES) $(SOURCETEMP)
+	@cp -r -p $(SOURCEFIGS) $(FIGURES)
 
 clean:
 	-rm -rf $(BUILDDIR)/*
diff -Naur ns-3.19/doc/models/source/conf.py ns-3.20/doc/models/source/conf.py
--- ns-3.19/doc/models/source/conf.py	2014-06-17 10:34:00.312637634 -0700
+++ ns-3.20/doc/models/source/conf.py	2014-06-17 10:33:13.660997760 -0700
@@ -41,16 +41,16 @@
 
 # General information about the project.
 project = u'ns-3'
-copyright = u'2008-13, ns-3 project'
+copyright = u'2011, 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.19'
+version = 'ns-3.20'
 # The full version, including alpha/beta/rc tags.
-release = 'ns-3.19'
+release = 'ns-3.20'
 
 # The language for content autogenerated by Sphinx. Refer to documentation
 # for a list of supported languages.
diff -Naur ns-3.19/doc/models/source/index.rst ns-3.20/doc/models/source/index.rst
--- ns-3.19/doc/models/source/index.rst	2014-06-17 10:34:00.312637634 -0700
+++ ns-3.20/doc/models/source/index.rst	2014-06-17 10:33:13.661997752 -0700
@@ -33,6 +33,7 @@
    energy
    flow-monitor
    internet-models
+   lr-wpan
    lte
    mesh
    distributed
diff -Naur ns-3.19/doc/modules ns-3.20/doc/modules
--- ns-3.19/doc/modules	2014-06-17 10:34:00.314637619 -0700
+++ ns-3.20/doc/modules	2014-06-17 10:33:13.662997744 -0700
@@ -1,33 +1,42 @@
 /**
  * @anchor modules_anchor
  *
- * @defgroup constructs Introspected Lists
- * \brief These are lists of useful items found by examining the type system.
- *
  * @defgroup constants Constants
  * @brief Constants you can change
  *
  * @defgroup utils Utils
  * @brief The utils directory is for various programs and scripts related 
  * to code coverage, test suites, style checking, and benchmarking.
- *
+ */
+/**
  * @defgroup core Core
  * \brief The "core" module contains:
- *    - a time management class to hold a time and convert between various time units: ns3::Time 
- *    - a scheduler base class used to implement new simulation event schedulers:       
+ *    - a time management class to hold a time and convert between various
+ *      time units: ns3::Time 
+ *    - a scheduler base class used to implement new simulation event
+ *      schedulers:       
  *      ns3::Scheduler and ns3::SchedulerFactory 
- *    - a simulator class used to create, schedule and cancel events: ns3::Simulator
+ *    - a simulator class used to create, schedule and cancel events:
+ *      ns3::Simulator
  *    - a Functor class: ns3::Callback  
- *    - an os-independent interface to get access to the elapsed wall clock time: ns3::SystemWallClockMs 
- *    - a class to register regression tests with the test manager: ns3::Test and ns3::TestManager
- *    - debugging facilities: \ref logging, \ref assert
+ *    - an os-independent interface to get access to the elapsed wall clock
+ *      time: ns3::SystemWallClockMs 
+ *    - a class to register regression tests with the test manager: ns3::Test
+ *      and ns3::TestManager
+ *    - debugging facilities: \ref debugging
  *    - \ref randomvariable
- *    - a base class for objects which need to support per-instance "attributes" and
- *      trace sources: ns3::ObjectBase
+ *    - a base class for objects which need to support per-instance
+ *      "attributes" and trace sources: ns3::ObjectBase
  *    - a base class for objects which need to support reference counting
  *      and dynamic object aggregation: ns3::Object
- *    - a smart-pointer class ns3::Ptr designed to work together with ns3::Object
- *    - a configuration class used to set and control all attributes and trace sources
- *      in a simulation: ns3::Config.
+ *    - a smart-pointer class ns3::Ptr designed to work together with
+ *      ns3::Object
+ *    - a configuration class used to set and control all attributes and
+ *      trace sources in a simulation: ns3::Config.
+ */
+/**
+ * @ingroup core
+ * @defgroup debugging Debugging tools
  *
+ * @brief Assertions, breakpoints, logging, and abnormal program termination
  */
diff -Naur ns-3.19/doc/ns3_html_theme/get_version.sh ns-3.20/doc/ns3_html_theme/get_version.sh
--- ns-3.19/doc/ns3_html_theme/get_version.sh	2014-06-17 10:34:00.316637604 -0700
+++ ns-3.20/doc/ns3_html_theme/get_version.sh	2014-06-17 10:33:13.664997729 -0700
@@ -71,6 +71,7 @@
 
 # script arguments
 say
+say using doxygen: $(which doxygen) $(doxygen --version)
 public=0
 nsnam=0
 daily=0
diff -Naur ns-3.19/doc/ns3_html_theme/ns3_doxy_footer.html ns-3.20/doc/ns3_html_theme/ns3_doxy_footer.html
--- ns-3.19/doc/ns3_html_theme/ns3_doxy_footer.html	2014-06-17 10:34:00.317637596 -0700
+++ ns-3.20/doc/ns3_html_theme/ns3_doxy_footer.html	2014-06-17 10:33:13.665997721 -0700
@@ -1,3 +1,7 @@
+<!-- ns-3 doxygen header, based on
+     HTML header for doxygen 1.8.3.1
+     Verified compatible with 1.8.6
+-->
 <!-- start footer part -->
 <!--BEGIN GENERATE_TREEVIEW-->
 <div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
diff -Naur ns-3.19/doc/ns3_html_theme/ns3_doxy_header.html ns-3.20/doc/ns3_html_theme/ns3_doxy_header.html
--- ns-3.19/doc/ns3_html_theme/ns3_doxy_header.html	2014-06-17 10:34:00.317637596 -0700
+++ ns-3.20/doc/ns3_html_theme/ns3_doxy_header.html	2014-06-17 10:33:13.666997713 -0700
@@ -1,18 +1,23 @@
+<!-- ns-3 doxygen header, based on
+     HTML header for doxygen 1.8.3.1
+     Verified compatible with 1.8.6
+-->
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
-  <head>
-    <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"></meta>
-    <meta http-equiv="X-UA-Compatible" content="IE=9"></meta>
-    <!--BEGIN PROJECT_NAME--><title>$projectname: $title</title><!--END PROJECT_NAME-->
-    <!--BEGIN !PROJECT_NAME--><title>$title</title><!--END !PROJECT_NAME-->
-    <link href="$relpath$tabs.css" rel="stylesheet" type="text/css"></link>
-    <script type="text/javascript" src="$relpath$jquery.js"></script>
-    <script type="text/javascript" src="$relpath$dynsections.js"></script>
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen $doxygenversion"/>
+<!--BEGIN PROJECT_NAME--><title>$projectname: $title</title><!--END PROJECT_NAME-->
+<!--BEGIN !PROJECT_NAME--><title>$title</title><!--END !PROJECT_NAME-->
+<link href="$relpath^tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="$relpath^jquery.js"></script>
+<script type="text/javascript" src="$relpath^dynsections.js"></script>
 $treeview
 $search
 $mathjax
-    <link href="$relpath$doxygen.css" rel="stylesheet" type="text/css"></link>
-    <link href="$relpath$ns3_stylesheet.css" rel="stylesheet" type="text/css"></link>
+<link href="$relpath^$stylesheet" rel="stylesheet" type="text/css" />
+$extrastylesheet
     <link href="$relpath$favicon.ico" rel="shortcut icon" type="image/ico"></link>
     <script type="text/javascript" src="$relpath$drop-down-menu.js"></script>
     <script type="text/javascript" src="$relpath$ns3_version.js"></script>
@@ -99,7 +104,7 @@
 	    </tr>
 	  </tbody>
 	</table>
-	<script  type="text/javascript">ns3_write_links()</script>
+	<script  type="text/javascript">ns3_write_links();</script>
       </div>
 <!--END TITLEAREA-->
 <!-- end header part -->
diff -Naur ns-3.19/doc/ns3_html_theme/static/doxygen.css ns-3.20/doc/ns3_html_theme/static/doxygen.css
--- ns-3.19/doc/ns3_html_theme/static/doxygen.css	2014-06-17 10:34:00.318637588 -0700
+++ ns-3.20/doc/ns3_html_theme/static/doxygen.css	1969-12-31 16:00:00.000000000 -0800
@@ -1,1156 +0,0 @@
-/* The standard CSS for doxygen */
-
-body, table, div, p, dl {
-	font-family: Lucida Grande, Verdana, Geneva, Arial, sans-serif;
-	font-size: 13px;
-	line-height: 1.3;
-}
-
-/* @group Heading Levels */
-
-h1 {
-	font-size: 150%;
-}
-
-.title {
-	font-size: 150%;
-	font-weight: bold;
-	margin: 10px 2px;
-}
-
-h2 {
-	font-size: 120%;
-}
-
-h3 {
-	font-size: 100%;
-}
-
-h1, h2, h3, h4, h5, h6 {
-	-webkit-transition: text-shadow 0.5s linear;
-	-moz-transition: text-shadow 0.5s linear;
-	-ms-transition: text-shadow 0.5s linear;
-	-o-transition: text-shadow 0.5s linear;
-	transition: text-shadow 0.5s linear;
-	margin-right: 15px;
-}
-
-h1.glow, h2.glow, h3.glow, h4.glow, h5.glow, h6.glow {
-	text-shadow: 0 0 15px cyan;
-}
-
-dt {
-	font-weight: bold;
-}
-
-div.multicol {
-	-moz-column-gap: 1em;
-	-webkit-column-gap: 1em;
-	-moz-column-count: 3;
-	-webkit-column-count: 3;
-}
-
-p.startli, p.startdd, p.starttd {
-	margin-top: 2px;
-}
-
-p.endli {
-	margin-bottom: 0px;
-}
-
-p.enddd {
-	margin-bottom: 4px;
-}
-
-p.endtd {
-	margin-bottom: 2px;
-}
-
-/* @end */
-
-caption {
-	font-weight: bold;
-}
-
-span.legend {
-        font-size: 70%;
-        text-align: center;
-}
-
-h3.version {
-        font-size: 90%;
-        text-align: center;
-}
-
-div.qindex, div.navtab{
-	background-color: #EFEFEF;
-	border: 1px solid #B5B5B5;
-	text-align: center;
-}
-
-div.qindex, div.navpath {
-	width: 100%;
-	line-height: 140%;
-}
-
-div.navtab {
-	margin-right: 15px;
-}
-
-/* @group Link Styling */
-
-a {
-	color: #585858;
-	font-weight: normal;
-	text-decoration: none;
-}
-
-.contents a:visited {
-	color: #686868;
-}
-
-a:hover {
-	text-decoration: underline;
-}
-
-a.qindex {
-	font-weight: bold;
-}
-
-a.qindexHL {
-	font-weight: bold;
-	background-color: #B0B0B0;
-	color: #ffffff;
-	border: 1px double #9F9F9F;
-}
-
-.contents a.qindexHL:visited {
-        color: #ffffff;
-}
-
-a.el {
-	font-weight: bold;
-}
-
-a.elRef {
-}
-
-a.code, a.code:visited {
-	color: #4665A2; 
-}
-
-a.codeRef, a.codeRef:visited {
-	color: #4665A2; 
-}
-
-/* @end */
-
-dl.el {
-	margin-left: -1cm;
-}
-
-pre.fragment {
-        border: 1px solid #C4CFE5;
-        background-color: #FBFCFD;
-        padding: 4px 6px;
-        margin: 4px 8px 4px 2px;
-        overflow: auto;
-        word-wrap: break-word;
-        font-size:  9pt;
-        line-height: 125%;
-        font-family: monospace, fixed;
-        font-size: 105%;
-}
-
-div.fragment {
-        padding: 4px;
-        margin: 4px;
-	background-color: #FCFCFC;
-	border: 1px solid #D0D0D0;
-}
-
-div.line {
-	font-family: monospace, fixed;
-        font-size: 13px;
-	min-height: 13px;
-	line-height: 1.0;
-	text-wrap: unrestricted;
-	white-space: -moz-pre-wrap; /* Moz */
-	white-space: -pre-wrap;     /* Opera 4-6 */
-	white-space: -o-pre-wrap;   /* Opera 7 */
-	white-space: pre-wrap;      /* CSS3  */
-	word-wrap: break-word;      /* IE 5.5+ */
-	text-indent: -53px;
-	padding-left: 53px;
-	padding-bottom: 0px;
-	margin: 0px;
-	-webkit-transition-property: background-color, box-shadow;
-	-webkit-transition-duration: 0.5s;
-	-moz-transition-property: background-color, box-shadow;
-	-moz-transition-duration: 0.5s;
-	-ms-transition-property: background-color, box-shadow;
-	-ms-transition-duration: 0.5s;
-	-o-transition-property: background-color, box-shadow;
-	-o-transition-duration: 0.5s;
-	transition-property: background-color, box-shadow;
-	transition-duration: 0.5s;
-}
-
-div.line.glow {
-	background-color: cyan;
-	box-shadow: 0 0 10px cyan;
-}
-
-
-span.lineno {
-	padding-right: 4px;
-	text-align: right;
-	border-right: 2px solid #0F0;
-	background-color: #E8E8E8;
-        white-space: pre;
-}
-span.lineno a {
-	background-color: #D8D8D8;
-}
-
-span.lineno a:hover {
-	background-color: #C8C8C8;
-}
-
-div.ah {
-	background-color: black;
-	font-weight: bold;
-	color: #ffffff;
-	margin-bottom: 3px;
-	margin-top: 3px;
-	padding: 0.2em;
-	border: solid thin #333;
-	border-radius: 0.5em;
-	-webkit-border-radius: .5em;
-	-moz-border-radius: .5em;
-	box-shadow: 2px 2px 3px #999;
-	-webkit-box-shadow: 2px 2px 3px #999;
-	-moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px;
-	background-image: -webkit-gradient(linear, left top, left bottom, from(#eee), to(#000),color-stop(0.3, #444));
-	background-image: -moz-linear-gradient(center top, #eee 0%, #444 40%, #000);
-}
-
-div.groupHeader {
-	margin-left: 16px;
-	margin-top: 12px;
-	font-weight: bold;
-}
-
-div.groupText {
-	margin-left: 16px;
-	font-style: italic;
-}
-
-body {
-	background-color: white;
-	color: black;
-        margin: 0;
-}
-
-div.contents {
-	margin-top: 10px;
-	margin-left: 12px;
-	margin-right: 8px;
-}
-
-td.indexkey {
-	background-color: #EFEFEF;
-	font-weight: bold;
-	border: 1px solid #D0D0D0;
-	margin: 2px 0px 2px 0;
-	padding: 2px 10px;
-        white-space: nowrap;
-        vertical-align: top;
-}
-
-td.indexvalue {
-	background-color: #EFEFEF;
-	border: 1px solid #D0D0D0;
-	padding: 2px 10px;
-	margin: 2px 0px;
-}
-
-tr.memlist {
-	background-color: #F1F1F1;
-}
-
-p.formulaDsp {
-	text-align: center;
-}
-
-img.formulaDsp {
-	
-}
-
-img.formulaInl {
-	vertical-align: middle;
-}
-
-div.center {
-	text-align: center;
-        margin-top: 0px;
-        margin-bottom: 0px;
-        padding: 0px;
-}
-
-div.center img {
-	border: 0px;
-}
-
-address.footer {
-	text-align: right;
-	padding-right: 12px;
-}
-
-img.footer {
-	border: 0px;
-	vertical-align: middle;
-}
-
-/* @group Code Colorization */
-
-span.keyword {
-	color: #008000
-}
-
-span.keywordtype {
-	color: #604020
-}
-
-span.keywordflow {
-	color: #e08000
-}
-
-span.comment {
-	color: #800000
-}
-
-span.preprocessor {
-	color: #806020
-}
-
-span.stringliteral {
-	color: #002080
-}
-
-span.charliteral {
-	color: #008080
-}
-
-span.vhdldigit { 
-	color: #ff00ff 
-}
-
-span.vhdlchar { 
-	color: #000000 
-}
-
-span.vhdlkeyword { 
-	color: #700070 
-}
-
-span.vhdllogic { 
-	color: #ff0000 
-}
-
-blockquote {
-        background-color: #F8F8F8;
-        border-left: 2px solid #B0B0B0;
-        margin: 0 24px 0 4px;
-        padding: 0 12px 0 16px;
-}
-
-/* @end */
-
-/*
-.search {
-	color: #003399;
-	font-weight: bold;
-}
-
-form.search {
-	margin-bottom: 0px;
-	margin-top: 0px;
-}
-
-input.search {
-	font-size: 75%;
-	color: #000080;
-	font-weight: normal;
-	background-color: #e8eef2;
-}
-*/
-
-td.tiny {
-	font-size: 75%;
-}
-
-.dirtab {
-	padding: 4px;
-	border-collapse: collapse;
-	border: 1px solid #B5B5B5;
-}
-
-th.dirtab {
-	background: #EFEFEF;
-	font-weight: bold;
-}
-
-hr {
-	height: 0px;
-	border: none;
-	border-top: 1px solid #6E6E6E;
-}
-
-hr.footer {
-	height: 1px;
-}
-
-/* @group Member Descriptions */
-
-table.memberdecls {
-	border-spacing: 0px;
-	padding: 0px;
-}
-
-.memberdecls td {
-	-webkit-transition-property: background-color, box-shadow;
-	-webkit-transition-duration: 0.5s;
-	-moz-transition-property: background-color, box-shadow;
-	-moz-transition-duration: 0.5s;
-	-ms-transition-property: background-color, box-shadow;
-	-ms-transition-duration: 0.5s;
-	-o-transition-property: background-color, box-shadow;
-	-o-transition-duration: 0.5s;
-	transition-property: background-color, box-shadow;
-	transition-duration: 0.5s;
-}
-
-.memberdecls td.glow {
-	background-color: cyan;
-	box-shadow: 0 0 15px cyan;
-}
-
-.mdescLeft, .mdescRight,
-.memItemLeft, .memItemRight,
-.memTemplItemLeft, .memTemplItemRight, .memTemplParams {
-	background-color: #FAFAFA;
-	border: none;
-	margin: 4px;
-	padding: 1px 0 0 8px;
-}
-
-.mdescLeft, .mdescRight {
-	padding: 0px 8px 4px 8px;
-	color: #555;
-}
-
-.memItemLeft, .memItemRight, .memTemplParams {
-	border-top: 1px solid #D0D0D0;
-}
-
-.memItemLeft, .memTemplItemLeft {
-        white-space: nowrap;
-}
-
-.memItemRight {
-	width: 100%;
-}
-
-.memTemplParams {
-	color: #686868;
-        white-space: nowrap;
-}
-
-/* @end */
-
-/* @group Member Details */
-
-/* Styles for detailed member documentation */
-
-.memtemplate {
-	font-size: 80%;
-	color: #686868;
-	font-weight: normal;
-	margin-left: 9px;
-}
-
-.memnav {
-	background-color: #EFEFEF;
-	border: 1px solid #B5B5B5;
-	text-align: center;
-	margin: 2px;
-	margin-right: 15px;
-	padding: 2px;
-}
-
-.mempage {
-	width: 100%;
-}
-
-.memitem {
-	padding: 0;
-	margin-bottom: 10px;
-	margin-right: 5px;
-        -webkit-transition: box-shadow 0.5s linear;
-        -moz-transition: box-shadow 0.5s linear;
-        -ms-transition: box-shadow 0.5s linear;
-        -o-transition: box-shadow 0.5s linear;
-        transition: box-shadow 0.5s linear;
-        display: table !important;
-        width: 100%;
-}
-
-.memitem.glow {
-         box-shadow: 0 0 15px cyan;
-}
-
-.memname {
-        font-weight: bold;
-        margin-left: 6px;
-}
-
-.memname td {
-	vertical-align: bottom;
-}
-
-.memproto, dl.reflist dt {
-        border-top: 1px solid #B9B9B9;
-        border-left: 1px solid #B9B9B9;
-        border-right: 1px solid #B9B9B9;
-        padding: 6px 0px 6px 0px;
-        color: #323232;
-        font-weight: bold;
-        text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9);
-        background-image:url('nav_f.png');
-        background-repeat:repeat-x;
-        background-color: #E8E8E8;
-        /* opera specific markup */
-        box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
-        border-top-right-radius: 4px;
-        border-top-left-radius: 4px;
-        /* firefox specific markup */
-        -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px;
-        -moz-border-radius-topright: 4px;
-        -moz-border-radius-topleft: 4px;
-        /* webkit specific markup */
-        -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
-        -webkit-border-top-right-radius: 4px;
-        -webkit-border-top-left-radius: 4px;
-
-}
-
-.memdoc, dl.reflist dd {
-        border-bottom: 1px solid #B9B9B9;      
-        border-left: 1px solid #B9B9B9;      
-        border-right: 1px solid #B9B9B9; 
-        padding: 6px 10px 2px 10px;
-        background-color: #FCFCFC;
-        border-top-width: 0;
-        background-image:url('nav_g.png');
-        background-repeat:repeat-x;
-        background-color: #FFFFFF;
-        /* opera specific markup */
-        border-bottom-left-radius: 4px;
-        border-bottom-right-radius: 4px;
-        box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
-        /* firefox specific markup */
-        -moz-border-radius-bottomleft: 4px;
-        -moz-border-radius-bottomright: 4px;
-        -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px;
-        /* webkit specific markup */
-        -webkit-border-bottom-left-radius: 4px;
-        -webkit-border-bottom-right-radius: 4px;
-        -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
-}
-
-dl.reflist dt {
-        padding: 5px;
-}
-
-dl.reflist dd {
-        margin: 0px 0px 10px 0px;
-        padding: 5px;
-}
-
-.paramkey {
-	text-align: right;
-}
-
-.paramtype {
-	white-space: nowrap;
-}
-
-.paramname {
-	color: #602020;
-	white-space: nowrap;
-}
-.paramname em {
-	font-style: normal;
-}
-.paramname code {
-        line-height: 14px;
-}
-
-.params, .retval, .exception, .tparams {
-        margin-left: 0px;
-        padding-left: 0px;
-}       
-
-.params .paramname, .retval .paramname {
-        font-weight: bold;
-        vertical-align: top;
-}
-        
-.params .paramtype {
-        font-style: italic;
-        vertical-align: top;
-}       
-        
-.params .paramdir {
-        font-family: "courier new",courier,monospace;
-        vertical-align: top;
-}
-
-table.mlabels {
-	border-spacing: 0px;
-}
-
-td.mlabels-left {
-	width: 100%;
-	padding: 0px;
-}
-
-td.mlabels-right {
-	vertical-align: bottom;
-	padding: 0px;
-	white-space: nowrap;
-}
-
-span.mlabels {
-        margin-left: 8px;
-}
-
-span.mlabel {
-        background-color: #8F8F8F;
-        border-top:1px solid #787878;
-        border-left:1px solid #787878;
-        border-right:1px solid #D0D0D0;
-        border-bottom:1px solid #D0D0D0;
-	text-shadow: none;
-        color: white;
-        margin-right: 4px;
-        padding: 2px 3px;
-        border-radius: 3px;
-        font-size: 7pt;
-	white-space: nowrap;
-}
-
-
-
-/* @end */
-
-/* these are for tree view when not used as main index */
-
-div.directory {
-        margin: 10px 0px;
-        border-top: 1px solid #A8B8D9;
-        border-bottom: 1px solid #A8B8D9;
-        width: 100%;
-}
-
-.directory table {
-        border-collapse:collapse;
-}
-
-.directory td {
-        margin: 0px;
-        padding: 0px;
-	vertical-align: top;
-}
-
-.directory td.entry {
-        white-space: nowrap;
-        padding-right: 6px;
-}
-
-.directory td.entry a {
-        outline:none;
-}
-
-.directory td.entry a img {
-        border: none;
-}
-
-.directory td.desc {
-        width: 100%;
-        padding-left: 6px;
-	padding-right: 6px;
-	border-left: 1px solid rgba(0,0,0,0.05);
-}
-
-.directory tr.even {
-	padding-left: 6px;
-	background-color: #F8F8F8;
-}
-
-.directory img {
-	vertical-align: -30%;
-}
-
-.directory .levels {
-        white-space: nowrap;
-        width: 100%;
-        text-align: right;
-        font-size: 9pt;
-}
-
-.directory .levels span {
-        cursor: pointer;
-        padding-left: 2px;
-        padding-right: 2px;
-	color: #585858;
-}
-
-div.dynheader {
-        margin-top: 8px;
-	-webkit-touch-callout: none;
-	-webkit-user-select: none;
-	-khtml-user-select: none;
-	-moz-user-select: none;
-	-ms-user-select: none;
-	user-select: none;
-}
-
-address {
-	font-style: normal;
-	color: #3A3A3A;
-}
-
-table.doxtable {
-	border-collapse:collapse;
-        margin-top: 4px;
-        margin-bottom: 4px;
-}
-
-table.doxtable td, table.doxtable th {
-	border: 1px solid #3F3F3F;
-	padding: 3px 7px 2px;
-}
-
-table.doxtable th {
-	background-color: #4F4F4F;
-	color: #FFFFFF;
-	font-size: 110%;
-	padding-bottom: 4px;
-	padding-top: 5px;
-}
-
-table.fieldtable {
-        width: 100%;
-        margin-bottom: 10px;
-        border: 1px solid #B9B9B9;
-        border-spacing: 0px;
-        -moz-border-radius: 4px;
-        -webkit-border-radius: 4px;
-        border-radius: 4px;
-        -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px;
-        -webkit-box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15);
-        box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15);
-}
-
-.fieldtable td, .fieldtable th {
-        padding: 3px 7px 2px;
-}
-
-.fieldtable td.fieldtype, .fieldtable td.fieldname {
-        white-space: nowrap;
-        border-right: 1px solid #B9B9B9;
-        border-bottom: 1px solid #B9B9B9;
-        vertical-align: top;
-}
-
-.fieldtable td.fielddoc {
-        border-bottom: 1px solid #B9B9B9;
-        width: 100%;
-}
-
-.fieldtable tr:last-child td {
-        border-bottom: none;
-}
-
-.fieldtable th {
-        background-image:url('nav_f.png');
-        background-repeat:repeat-x;
-        background-color: #E8E8E8;
-        font-size: 90%;
-        color: #323232;
-        padding-bottom: 4px;
-        padding-top: 5px;
-        text-align:left;
-        -moz-border-radius-topleft: 4px;
-        -moz-border-radius-topright: 4px;
-        -webkit-border-top-left-radius: 4px;
-        -webkit-border-top-right-radius: 4px;
-        border-top-left-radius: 4px;
-        border-top-right-radius: 4px;
-        border-bottom: 1px solid #B9B9B9;
-}
-
-
-.tabsearch {
-	top: 0px;
-	left: 10px;
-	height: 36px;
-	background-image: url('tab_b.png');
-	z-index: 101;
-	overflow: hidden;
-	font-size: 13px;
-}
-
-.navpath ul
-{
-	font-size: 11px;
-	background-image:url('tab_b.png');
-	background-repeat:repeat-x;
-	height:30px;
-	line-height:30px;
-	color:#A2A2A2;
-	border:solid 1px #CECECE;
-	overflow:hidden;
-	margin:0px;
-	padding:0px;
-}
-
-.navpath li
-{
-	list-style-type:none;
-	float:left;
-	padding-left:10px;
-	padding-right:15px;
-	background-image:url('bc_s.png');
-	background-repeat:no-repeat;
-	background-position:right;
-	color:#4D4D4D;
-}
-
-.navpath li.navelem a
-{
-	height:32px;
-	display:block;
-	text-decoration: none;
-	outline: none;
-}
-
-.navpath li.navelem a:hover
-{
-	color:#888888;
-}
-
-.navpath li.footer
-{
-        list-style-type:none;
-        float:right;
-        padding-left:10px;
-        padding-right:15px;
-        background-image:none;
-        background-repeat:no-repeat;
-        background-position:right;
-        color:#4D4D4D;
-        font-size: 8pt;
-}
-
-
-div.summary
-{
-	float: right;
-	font-size: 8pt;
-	padding-right: 5px;
-	width: 50%;
-	text-align: right;
-}       
-
-div.summary a
-{
-	white-space: nowrap;
-}
-
-div.ingroups
-{
-	font-size: 8pt;
-	width: 50%;
-	text-align: left;
-}
-
-div.ingroups a
-{
-	white-space: nowrap;
-}
-
-div.header
-{
-        background-image:url('nav_h.png');
-        background-repeat:repeat-x;
-	background-color: #FAFAFA;
-	margin:  0px;
-	border-bottom: 1px solid #D0D0D0;
-}
-
-div.headertitle
-{
-	padding: 5px 5px 5px 7px;
-}
-
-dl
-{
-        padding: 0 0 0 10px;
-}
-
-/* dl.note, dl.warning, dl.attention, dl.pre, dl.post, dl.invariant, dl.deprecated, dl.todo, dl.test, dl.bug */
-dl.section
-{
-	margin-left: 0px;
-	padding-left: 0px;
-}
-
-dl.note
-{
-        margin-left:-7px;
-        padding-left: 3px;
-        border-left:4px solid;
-        border-color: #D0C000;
-}
-
-dl.warning, dl.attention
-{
-        margin-left:-7px;
-        padding-left: 3px;
-        border-left:4px solid;
-        border-color: #FF0000;
-}
-
-dl.pre, dl.post, dl.invariant
-{
-        margin-left:-7px;
-        padding-left: 3px;
-        border-left:4px solid;
-        border-color: #00D000;
-}
-
-dl.deprecated
-{
-        margin-left:-7px;
-        padding-left: 3px;
-        border-left:4px solid;
-        border-color: #505050;
-}
-
-dl.todo
-{
-        margin-left:-7px;
-        padding-left: 3px;
-        border-left:4px solid;
-        border-color: #00C0E0;
-}
-
-dl.test
-{
-        margin-left:-7px;
-        padding-left: 3px;
-        border-left:4px solid;
-        border-color: #3030E0;
-}
-
-dl.bug
-{
-        margin-left:-7px;
-        padding-left: 3px;
-        border-left:4px solid;
-        border-color: #C08050;
-}
-
-dl.section dd {
-	margin-bottom: 6px;
-}
-
-
-#projectlogo
-{
-	text-align: center;
-	vertical-align: bottom;
-	border-collapse: separate;
-}
- 
-#projectlogo img
-{ 
-	border: 0px none;
-}
- 
-#projectname
-{
-	font: 300% Tahoma, Arial,sans-serif;
-	margin: 0px;
-	padding: 2px 0px;
-}
-    
-#projectbrief
-{
-	font: 120% Tahoma, Arial,sans-serif;
-	margin: 0px;
-	padding: 0px;
-}
-
-#projectnumber
-{
-	font: 50% Tahoma, Arial,sans-serif;
-	margin: 0px;
-	padding: 0px;
-}
-
-#titlearea
-{
-	padding: 0px;
-	margin: 0px;
-	width: 100%;
-	border-bottom: 1px solid #787878;
-}
-
-.image
-{
-        text-align: center;
-}
-
-.dotgraph
-{
-        text-align: center;
-}
-
-.mscgraph
-{
-        text-align: center;
-}
-
-.caption
-{
-	font-weight: bold;
-}
-
-div.zoom
-{
-	border: 1px solid #A6A6A6;
-}
-
-dl.citelist {
-        margin-bottom:50px;
-}
-
-dl.citelist dt {
-        color:#484848;
-        float:left;
-        font-weight:bold;
-        margin-right:10px;
-        padding:5px;
-}
-
-dl.citelist dd {
-        margin:2px 0;
-        padding:5px 0;
-}
-
-div.toc {
-        padding: 14px 25px;
-        background-color: #F6F6F6;
-        border: 1px solid #DFDFDF;
-        border-radius: 7px 7px 7px 7px;
-        float: right;
-        height: auto;
-        margin: 0 20px 10px 10px;
-        width: 200px;
-}
-
-div.toc li {
-        background: url("bdwn.png") no-repeat scroll 0 5px transparent;
-        font: 10px/1.2 Verdana,DejaVu Sans,Geneva,sans-serif;
-        margin-top: 5px;
-        padding-left: 10px;
-        padding-top: 2px;
-}
-
-div.toc h3 {
-        font: bold 12px/1.2 Arial,FreeSans,sans-serif;
-	color: #686868;
-        border-bottom: 0 none;
-        margin: 0;
-}
-
-div.toc ul {
-        list-style: none outside none;
-        border: medium none;
-        padding: 0px;
-}       
-
-div.toc li.level1 {
-        margin-left: 0px;
-}
-
-div.toc li.level2 {
-        margin-left: 15px;
-}
-
-div.toc li.level3 {
-        margin-left: 30px;
-}
-
-div.toc li.level4 {
-        margin-left: 45px;
-}
-
-.inherit_header {
-        font-weight: bold;
-        color: gray;
-        cursor: pointer;
-	-webkit-touch-callout: none;
-	-webkit-user-select: none;
-	-khtml-user-select: none;
-	-moz-user-select: none;
-	-ms-user-select: none;
-	user-select: none;
-}
-
-.inherit_header td {
-        padding: 6px 0px 2px 5px;
-}
-
-.inherit {
-        display: none;
-}
-
-tr.heading h2 {
-        margin-top: 12px;
-        margin-bottom: 4px;
-}
-
-@media print
-{
-  #top { display: none; }
-  #side-nav { display: none; }
-  #nav-path { display: none; }
-  body { overflow:visible; }
-  h1, h2, h3, h4, h5, h6 { page-break-after: avoid; }
-  .summary { display: none; }
-  .memitem { page-break-inside: avoid; }
-  #doc-content
-  {
-    margin-left:0 !important;
-    height:auto !important;
-    width:auto !important;
-    overflow:inherit;
-    display:inline;
-  }
-}
-
diff -Naur ns-3.19/doc/ns3_html_theme/static/ns3_stylesheet.css ns-3.20/doc/ns3_html_theme/static/ns3_stylesheet.css
--- ns-3.19/doc/ns3_html_theme/static/ns3_stylesheet.css	2014-06-17 10:34:00.321637565 -0700
+++ ns-3.20/doc/ns3_html_theme/static/ns3_stylesheet.css	2014-06-17 10:33:13.669997690 -0700
@@ -190,7 +190,7 @@
 
 #ns3-menu .menu div {
   background: #94A901;
-  background-size: 100%; 100%
+  background-size: 100%;
   color:#ffffff;
   position: absolute;
   visibility: hidden;
diff -Naur ns-3.19/doc/release_steps.txt ns-3.20/doc/release_steps.txt
--- ns-3.19/doc/release_steps.txt	2014-06-17 10:34:00.323637549 -0700
+++ ns-3.20/doc/release_steps.txt	2014-06-17 10:33:13.671997675 -0700
@@ -144,6 +144,9 @@
 
 2. Check if these new files are available on the website
 
+3. In ns-3-dev, edit the tutorial "Getting Started" page to 
+   update the release version numbers.
+
 preparing the Wordpress-based main website
 ------------------------------------------
 
diff -Naur ns-3.19/doc/tutorial/source/conf.py ns-3.20/doc/tutorial/source/conf.py
--- ns-3.19/doc/tutorial/source/conf.py	2014-06-17 10:34:00.344637387 -0700
+++ ns-3.20/doc/tutorial/source/conf.py	2014-06-17 10:33:13.691997521 -0700
@@ -41,16 +41,16 @@
 
 # General information about the project.
 project = u'ns-3'
-copyright = u'2008-13, ns-3 project'
+copyright = u'2010, 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.19'
+version = 'ns-3.20'
 # The full version, including alpha/beta/rc tags.
-release = 'ns-3.19'
+release = 'ns-3.20'
 
 # The language for content autogenerated by Sphinx. Refer to documentation
 # for a list of supported languages.
diff -Naur ns-3.19/doc/tutorial/source/getting-started.rst ns-3.20/doc/tutorial/source/getting-started.rst
--- ns-3.19/doc/tutorial/source/getting-started.rst	2014-06-17 10:34:00.345637379 -0700
+++ ns-3.20/doc/tutorial/source/getting-started.rst	2014-06-17 10:33:13.693997505 -0700
@@ -33,8 +33,8 @@
 copies of |ns3|.  We'll walk through both examples since the tools
 involved are slightly different.
 
-Downloading ns-3
-****************
+Downloading |ns3|
+*****************
 
 The |ns3| system as a whole is a fairly complex system and has a
 number of dependencies on other components.  Along with the systems you will
@@ -72,8 +72,8 @@
 downloading and building of various subsystems of |ns3| for you.  We 
 recommend that you begin your |ns3| work in this environment.
 
-Downloading ns-3 Using a Tarball
-++++++++++++++++++++++++++++++++
+Downloading |ns3| Using a Tarball
++++++++++++++++++++++++++++++++++
 
 A tarball is a particular format of software archive where multiple
 files are bundled together and the archive possibly compressed.
@@ -85,27 +85,24 @@
 directory called ``workspace``. 
 If you adopt the ``workspace`` directory approach, you can 
 get a copy of a release by typing the following into your Linux shell 
-(substitute the appropriate version numbers, of course):
-
-::
+(substitute the appropriate version numbers, of course)::
 
   $ cd
   $ mkdir workspace
   $ cd workspace
-  $ wget http://www.nsnam.org/releases/ns-allinone-3.17.tar.bz2
-  $ tar xjf ns-allinone-3.17.tar.bz2
+  $ wget http://www.nsnam.org/releases/ns-allinone-3.20.tar.bz2
+  $ tar xjf ns-allinone-3.20.tar.bz2
 
-If you change into the directory ``ns-allinone-3.17`` you should see a
-number of files:
+If you change into the directory ``ns-allinone-3.20`` you should see a
+number of files::
 
-::
-
-  bake      constants.py   ns-3.17               README
+  $ ls
+  bake      constants.py   ns-3.20               README
   build.py  netanim-3.103  pybindgen-0.16.0.825  util.py
 
 You are now ready to build the |ns3| distribution.
 
-Downloading ns-3 Using Bake
+Downloading |ns3| Using Bake
 ++++++++++++++++++++++++++++
 
 Bake is a tool for distributed integration and building, 
@@ -119,9 +116,7 @@
 Any directory name will do, but we'll assume that ``workspace`` is used
 herein (note:  ``repos`` may also be used in some documentation as
 an example directory name).  You can get a copy of ``bake`` by typing the 
-following into your Linux shell (assuming you have installed Mercurial):
-
-::
+following into your Linux shell (assuming you have installed Mercurial)::
 
   $ cd
   $ mkdir workspace
@@ -133,6 +128,7 @@
 
 ::
 
+  ...
   destination directory: bake
   requesting all changes
   adding changesets
@@ -143,10 +139,9 @@
   45 files updated, 0 files merged, 0 files removed, 0 files unresolved
 
 After the clone command completes, you should have a directory called 
-``bake``, the contents of which should look something like the following:
-
-::
+``bake``, the contents of which should look something like the following::
 
+  $ ls
   bake                  bakeconf.xml  doc       generate-binary.py  TODO
   bake.py               examples      test
 
@@ -157,10 +152,10 @@
 
 There are a few configuration targets available:
 
-1.  ``ns-3.17``:  the module corresponding to the release; it will download
+1.  ``ns-3.20``:  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.17``:  the module that includes other optional features
+3.  ``ns-allinone-3.20``:  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
@@ -178,7 +173,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.17``.
+this tutorial example with ``ns-3.20``.
 
 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.
@@ -187,9 +182,7 @@
 and installing libraries into a build directory.  bake can be run
 by referencing the binary, but if one chooses to run bake from
 outside of the directory it was downloaded into, it is advisable
-to put bake into your path, such as follows (Linux bash shell example):
-
-::
+to put bake into your path, such as follows (Linux bash shell example)::
 
   $ export BAKE_HOME=`pwd`/bake
   $ export PATH=$PATH:$BAKE_HOME
@@ -199,16 +192,12 @@
 complete this tutorial, so we'll call bake directly by specifying the path 
 to it in our shell commands.
 
-Step into the workspace directory and type the following into your shell:
-
-::
+Step into the workspace directory and type the following into your shell::
 
-  $ ./bake.py configure -e ns-3.17
+  $ ./bake.py configure -e ns-3.20
 
 Next, we'l ask bake to check whether we have enough tools to download
-various components.  Type:
-
-::
+various components.  Type::
 
   $ ./bake.py check
 
@@ -240,15 +229,11 @@
 are our principal concerns at this point, since they allow us to fetch
 the code.  Please install missing tools at this stage if you are able to.
 
-Next, try to download the software:
+Next, try to download the software::
 
-::
+  $ ./bake.py download
 
-  ./bake.py download
-
-should yield something like:
-
-::
+should yield something like::
 
    >> Searching for system dependency pygoocanvas - OK
    >> Searching for system dependency python-dev - OK
@@ -257,22 +242,21 @@
    >> Searching for system dependency g++ - OK
    >> Searching for system dependency qt4 - OK
    >> Downloading netanim-3.103 - OK
-   >> Downloading ns-3.17 - OK    
+   >> Downloading ns-3.20 - OK    
 
 The above suggests that three sources have been downloaded.  Check the
-``source`` directory now and type ``ls``; one should see:
+``source`` directory now and type ``ls``; one should see::
 
-::
-
-  netanim-3.103  ns-3.17  pybindgen-0.16.0.825
+  $ ls
+  netanim-3.103  ns-3.20  pybindgen-0.16.0.825
 
 You are now ready to build the |ns3| distribution.
 
-Building ns-3
-*************
+Building |ns3|
+**************
 
-Building with build.py
-++++++++++++++++++++++
+Building with ``build.py``
+++++++++++++++++++++++++++
 When working from a released tarball, the first time you build the 
 |ns3| project you can build using a convenience program found in the
 ``allinone`` directory.  This program is called ``build.py``.  This 
@@ -283,10 +267,8 @@
 
 If you downloaded
 using a tarball you should have a directory called something like 
-``ns-allinone-3.17`` under your ``~/workspace`` directory.  
-Type the following:
-
-::
+``ns-allinone-3.20`` under your ``~/workspace`` directory.  
+Type the following::
 
   $ ./build.py --enable-examples --enable-tests
 
@@ -299,11 +281,9 @@
 
 You will see lots of typical compiler output messages displayed as the build
 script builds the various pieces you downloaded.  Eventually you should see the
-following magic words:
-
-::
+following magic words::
 
-   Waf: Leaving directory `/path/to/workspace/ns-allinone-3.17/ns-3.17/build'
+   Waf: Leaving directory `/path/to/workspace/ns-allinone-3.20/ns-3.20/build'
    'build' finished successfully (6m25.032s)
   
    Modules built:
@@ -325,17 +305,15 @@
    brite                     click                     openflow                 
    visualizer               
 
-   Leaving directory `./ns-3.17'
-
-Regarding the portion about modules not built:
+   Leaving directory `./ns-3.20'
 
-::
+Regarding the portion about modules not built::
 
   Modules not built (see ns-3 tutorial for explanation):
   brite                     click                     openflow                 
   visualizer               
 
-This just means that some ns-3 modules that have dependencies on
+This just means that some |ns3| modules that have dependencies on
 outside libraries may not have been built, or that the configuration
 specifically asked not to build them.  It does not mean that the 
 simulator did not build successfully or that it will provide wrong 
@@ -351,20 +329,16 @@
 
   $ ./bake.py build
 
-and you should see something like:
-
-:: 
+and you should see something like::
 
   >> Building pybindgen-0.16.0.825 - OK
   >> Building netanim-3.103 - OK
-  >> Building ns-3.17 - OK
+  >> Building ns-3.20 - OK
 
 *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:
-
-::
+command tells you; it may give a hint as to a missing dependency::
 
   $ ./bake.py show
 
@@ -390,83 +364,96 @@
 your project to build the debug version.  Let's tell the project to 
 make an optimized build.  To explain to Waf that it should do optimized
 builds that include the examples and tests, you will need to execute the 
-following commands,
-
-::
+following commands::
 
   $ ./waf clean
-  $ ./waf -d optimized --enable-examples --enable-tests configure
+  $ ./waf --build-profile=optimized --enable-examples --enable-tests configure
 
 This runs Waf out of the local directory (which is provided as a convenience
 for you).  The first command to clean out the previous build is not 
-typically strictly necessary but is good practice; it will remove the
+typically strictly necessary but is good practice (but see `Build Profiles`_,
+below); it will remove the
 previously built libraries and object files found in directory ``build/``. 
 When the project is reconfigured and the build system checks for various 
 dependencies, you should see
-output that looks similar to the following,
-
-::
+output that looks similar to the following::
 
-  Checking for program g++                 : ok /usr/bin/g++
-  Checking for program cpp                 : ok /usr/bin/cpp
-  Checking for program ar                  : ok /usr/bin/ar
-  Checking for program ranlib              : ok /usr/bin/ranlib
-  Checking for g++                         : ok
-  Checking for program pkg-config          : ok /usr/bin/pkg-config
-  Checking for -Wno-error=deprecated-declarations support : yes
-  Checking for -Wl,--soname=foo support                   : yes
-  Checking for header stdlib.h                            : ok
-  Checking for header signal.h                            : ok
-  Checking for header pthread.h                           : ok
-  Checking for high precision time implementation         : 128-bit integer
-  Checking for header stdint.h                            : ok
-  Checking for header inttypes.h                          : ok
-  Checking for header sys/inttypes.h                      : not found
-  Checking for library rt                                 : ok
-  Checking for header netpacket/packet.h                  : ok
-  Checking for pkg-config flags for GSL                   : ok
-  Checking for header linux/if_tun.h                      : ok
-  Checking for pkg-config flags for GTK_CONFIG_STORE      : ok
-  Checking for pkg-config flags for LIBXML2               : ok
-  Checking for library sqlite3                            : ok
-  Checking for NSC location                               : ok ../nsc (guessed)
-  Checking for library dl                                 : ok
-  Checking for NSC supported architecture x86_64          : ok
-  Checking for program python                             : ok /usr/bin/python
-  Checking for Python version >= 2.3                      : ok 2.5.2
-  Checking for library python2.5                          : ok
-  Checking for program python2.5-config                   : ok /usr/bin/python2.5-config
-  Checking for header Python.h                            : ok
-  Checking for -fvisibility=hidden support                : yes
-  Checking for pybindgen location                         : ok ../pybindgen (guessed)
-  Checking for Python module pybindgen                    : ok
-  Checking for pybindgen version                          : ok 0.10.0.640
-  Checking for Python module pygccxml                     : ok
-  Checking for pygccxml version                           : ok 0.9.5
-  Checking for program gccxml                             : ok /usr/local/bin/gccxml
-  Checking for gccxml version                             : ok 0.9.0
-  Checking for program sudo                               : ok /usr/bin/sudo
-  Checking for program hg                                 : ok /usr/bin/hg
-  Checking for program valgrind                           : ok /usr/bin/valgrind
+  Setting top to                           : .
+  Setting out to                           : build 
+  Checking for 'gcc' (c compiler)          : /usr/bin/gcc 
+  Checking for cc version                  : 4.2.1 
+  Checking for 'g++' (c++ compiler)        : /usr/bin/g++ 
+  Checking boost includes                  : 1_46_1 
+  Checking boost libs                      : ok 
+  Checking for boost linkage               : ok 
+  Checking for click location              : not found 
+  Checking for program pkg-config          : /sw/bin/pkg-config 
+  Checking for 'gtk+-2.0' >= 2.12          : yes 
+  Checking for 'libxml-2.0' >= 2.7         : yes 
+  Checking for type uint128_t              : not found 
+  Checking for type __uint128_t            : yes 
+  Checking high precision implementation   : 128-bit integer (default) 
+  Checking for header stdint.h             : yes 
+  Checking for header inttypes.h           : yes 
+  Checking for header sys/inttypes.h       : not found 
+  Checking for header sys/types.h          : yes 
+  Checking for header sys/stat.h           : yes 
+  Checking for header dirent.h             : yes 
+  Checking for header stdlib.h             : yes 
+  Checking for header signal.h             : yes 
+  Checking for header pthread.h            : yes 
+  Checking for header stdint.h             : yes 
+  Checking for header inttypes.h           : yes 
+  Checking for header sys/inttypes.h       : not found 
+  Checking for library rt                  : not found 
+  Checking for header netpacket/packet.h   : not found 
+  Checking for header sys/ioctl.h          : yes 
+  Checking for header net/if.h             : not found 
+  Checking for header net/ethernet.h       : yes 
+  Checking for header linux/if_tun.h       : not found 
+  Checking for header netpacket/packet.h   : not found 
+  Checking for NSC location                : not found 
+  Checking for 'mpic++'                    : yes 
+  Checking for 'sqlite3'                   : yes 
+  Checking for header linux/if_tun.h       : not found 
+  Checking for program sudo                : /usr/bin/sudo 
+  Checking for program valgrind            : /sw/bin/valgrind 
+  Checking for 'gsl'                       : yes 
+  Checking for compilation flag -Wno-error=deprecated-d... support : ok 
+  Checking for compilation flag -Wno-error=deprecated-d... support : ok 
+  Checking for compilation flag -fstrict-aliasing... support       : ok 
+  Checking for compilation flag -fstrict-aliasing... support       : ok 
+  Checking for compilation flag -Wstrict-aliasing... support       : ok 
+  Checking for compilation flag -Wstrict-aliasing... support       : ok 
+  Checking for program doxygen                                     : /usr/local/bin/doxygen 
   ---- Summary of optional NS-3 features:
-  Threading Primitives          : enabled
-  Real Time Simulator           : enabled
-  Emulated Net Device           : enabled
-  GNU Scientific Library (GSL)  : enabled
-  Tap Bridge                    : enabled
+  Build profile                 : debug
+  Build directory               : build
+  Python Bindings               : enabled
+  BRITE Integration             : not enabled (BRITE not enabled (see option --with-brite))
+  NS-3 Click Integration        : not enabled (nsclick not enabled (see option --with-nsclick))
   GtkConfigStore                : enabled
   XmlIo                         : enabled
+  Threading Primitives          : enabled
+  Real Time Simulator           : enabled (librt is not available)
+  Emulated Net Device           : enabled (<netpacket/packet.h> include not detected)
+  File descriptor NetDevice     : enabled
+  Tap FdNetDevice               : not enabled (needs linux/if_tun.h)
+  Emulation FdNetDevice         : not enabled (needs netpacket/packet.h)
+  PlanetLab FdNetDevice         : not enabled (PlanetLab operating system not detected (see option --force-planetlab))
+  Network Simulation Cradle     : not enabled (NSC not found (see option --with-nsc))
+  MPI Support                   : enabled
+  NS-3 OpenFlow Integration     : not enabled (Required boost libraries not found, missing: system, signals, filesystem)
   SQlite stats data output      : enabled
-  Network Simulation Cradle     : enabled
-  Python Bindings               : enabled
-  Python API Scanning Support   : enabled
+  Tap Bridge                    : not enabled (<linux/if_tun.h> include not detected)
+  PyViz visualizer              : enabled
   Use sudo to set suid bit      : not enabled (option --enable-sudo not selected)
   Build tests                   : enabled
   Build examples                : enabled
-  Static build                  : not enabled (option --enable-static not selected)
-  'configure' finished successfully (2.870s)
+  GNU Scientific Library (GSL)  : enabled
+  'configure' finished successfully (1.944s)
 
-Note the last part of the above output.  Some ns-3 options are not enabled by
+Note the last part of the above output.  Some |ns3| options are not enabled by
 default or require support from the underlying system to work properly.
 For instance, to enable XmlTo, the library libxml-2.0 must be found on the
 system.  If this library were not found, the corresponding |ns3| feature 
@@ -479,7 +466,7 @@
 ::
 
   $ ./waf clean
-  $ ./waf -d debug --enable-examples --enable-tests configure
+  $ ./waf --build-profile=debug --enable-examples --enable-tests configure
 
 The build system is now configured and you can build the debug versions of 
 the |ns3| programs by simply typing
@@ -492,72 +479,146 @@
 but now you know how to change the configuration and build optimized code.
 
 Here are a few more introductory tips about Waf.
-Some waf commands are meaningful during the build phase and some commands are valid
-in the configuration phase.  For example, if you wanted to use the emulation 
+
+Configure vs. Build
+===================
+
+Some Waf commands are only meaningful during the configure phase and some commands are valid
+in the build phase.  For example, if you wanted to use the emulation 
 features of |ns3|, you might want to enable setting the suid bit using
 sudo as described above.  This turns out to be a configuration-time command, and so 
-you could reconfigure using the following command that also includes the examples and tests
+you could reconfigure using the following command that also includes the examples and tests.
 
 ::
 
-  $ ./waf configure -d debug --enable-sudo --enable-examples --enable-tests
+  $ ./waf configure --enable-sudo --enable-examples --enable-tests
 
-If you do this, waf will have run sudo to change the socket creator programs of the
-emulation code to run as root.  There are many other configure- and build-time options
-available in waf.  To explore these options, type:
+If you do this, Waf will have run sudo to change the socket creator programs of the
+emulation code to run as root.
 
-::
+There are many other configure- and build-time options
+available in Waf.  To explore these options, type::
 
   $ ./waf --help
 
 We'll use some of the testing-related commands in the next section.
 
-Finally, as an aside, it is possible to specify that waf builds the 
-project in 
-a directory different than the default ``build/`` directory by passing
-the ``-o`` option to configure; e.g.
+Build Profiles
+==============
 
-::
+We already saw how you can configure Waf for ``debug`` or ``optimized`` builds::
 
-  $ ./waf configure -d debug -o build/debug --enable-examples --enable-tests
+  $ ./waf --build-profile=debug
 
-This allows users to work with multiple builds rather than always
-overwriting the last build.
+There is also an intermediate build profile, ``release``.  ``-d`` is a
+synonym for ``--build-profile``.
 
-In the examples above, waf uses GCC C++ compiler, command ``g++``, for
-building ns-3. However, it's possible to change C++ compiler used by waf.
-Say one wants to use Clang C++ compiler, command ``clang++``; it's done by
+By default Waf puts the build artifacts in the ``build`` directory.  
+You can specify a different output directory with the ``--out``
+option, e.g.
 
 ::
 
-  $ CXX="clang++" ./waf configure
+  $ ./waf configure --out=foo
+
+Combining this with build profiles lets you switch between the different
+compile options in a clean way::
+
+  $ ./waf configure --build-profile=debug --out=build/debug
   $ ./waf build
+  ...
+  $ ./waf configure --build-profile=optimized --out=build/optimized
+  $ ./waf build
+  ...
 
-One can also set up waf to do distributed compilation with ``distcc`` in
-a similar way:
+This allows you to work with multiple builds rather than always
+overwriting the last build.  When you switch, Waf will only compile
+what it has to, instead of recompiling everything.
+
+When you do switch build profiles like this, you have to be careful
+to give the same configuration parameters each time.  It may be convenient
+to define some environment variables to help you avoid mistakes::
+
+  $ export NS3CONFIG="--enable-examples --enable-tests"
+  $ export NS3DEBUG="--build-profile=debug --out=build/debug"
+  $ export NS3OPT=="--build-profile=optimized --out=build/optimized"
+
+  $ ./waf configure $NS3CONFIG $NS3DEBUG
+  $ ./waf build
+  ...
+  $ ./waf configure $NS3CONFIG $NS3OPT
+  $ ./waf build
+
+Compilers
+=========
+
+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
+by defining the ``CXX`` environment variable.
+For example, to use the Clang C++ compiler, ``clang++``,
 
 ::
 
+  $ CXX="clang++" ./waf configure
+  $ ./waf build
+
+One can also set up Waf to do distributed compilation with ``distcc`` in
+a similar way::
+
   $ CXX="distcc g++" ./waf configure
   $ ./waf build
 
-More info on distcc and distributed compilation can be found on it's
+More info on ``distcc`` and distributed compilation can be found on it's
 `project page
 <http://code.google.com/p/distcc/>`_
 under Documentation section.
 
-Testing ns-3
-************
+One Waf
+=======
 
-You can run the unit tests of the |ns3| distribution by running the 
-"./test.py -c core" script,
+There is only one Waf script, at the top level of the |ns3| source tree.
+As you work, you may find yourself spending a lot of time in ``scratch/``,
+or deep in ``src/...``, and needing to invoke Waf.  You could just
+remember where you are, and invoke Waf like this::
 
-::
+  $ ../../../waf ...
+
+but that get's tedious, and error prone, and there are better solutions.
+
+If you have the full |ns3| repository this little gem is a start::
+
+  $ cd $(hg root) && ./waf ...
+
+Even better is to define this as a shell function::
+
+  $ function waff { cd $(hg root) && ./waf $* ; }
+
+  $ waff build
+
+If you only have the tarball, an environment variable can help::
+
+  $ export NS3DIR="$PWD"
+  $ function waff { cd $NS3DIR && ./waf $* ; }
+
+  $ cd scratch
+  $ waff build
+
+It might be tempting in a module directory to add a trivial ``waf``
+script along the lines of ``exec ../../waf``.  Please don't.  It's
+confusing to new-comers, and when done poorly it leads to subtle build
+errors.  The solutions above are the way to go.
+
+
+Testing |ns3|
+*************
+
+You can run the unit tests of the |ns3| distribution by running the 
+``./test.py -c core`` script::
 
   $ ./test.py -c core
 
-These tests are run in parallel by waf. You should eventually
-see a report saying that,
+These tests are run in parallel by Waf. You should eventually
+see a report saying that
 
 ::
 
@@ -565,9 +626,8 @@
 
 This is the important message.
 
-You will also see output from the test runner and the output will actually look something like,
-
-::
+You will also see the summary output from Waf and the test runner
+executing each test, which will actually look something like::
 
   Waf: Entering directory `/path/to/workspace/ns-3-allinone/ns-3-dev/build'
   Waf: Leaving directory `/path/to/workspace/ns-3-allinone/ns-3-dev/build'
@@ -590,34 +650,26 @@
 
   PASS: TestSuite ns3-wifi-interference
   PASS: TestSuite histogram
-  PASS: TestSuite sample
-  PASS: TestSuite ipv4-address-helper
-  PASS: TestSuite devices-wifi
-  PASS: TestSuite propagation-loss-model
 
   ...
 
-  PASS: TestSuite attributes
-  PASS: TestSuite config
-  PASS: TestSuite global-value
-  PASS: TestSuite command-line
-  PASS: TestSuite basic-random-number
   PASS: TestSuite object
   PASS: TestSuite random-number-generators
   92 of 92 tests passed (92 passed, 0 failed, 0 crashed, 0 valgrind errors)
 
 This command is typically run by users to quickly verify that an 
-|ns3| distribution has built correctly.  
+|ns3| distribution has built correctly.  (Note the order of the ``PASS: ...``
+lines can vary, which is okay.  What's important is that the summary line at
+the end report that all tests passed; none failed or crashed.)
 
 Running a Script
 ****************
+
 We typically run scripts under the control of Waf.  This allows the build 
 system to ensure that the shared library paths are set correctly and that
 the libraries are available at run time.  To run a program, simply use the
 ``--run`` option in Waf.  Let's run the |ns3| equivalent of the
-ubiquitous hello world program by typing the following:
-
-::
+ubiquitous hello world program by typing the following::
 
   $ ./waf --run hello-simulator
 
@@ -629,28 +681,26 @@
 
   Hello Simulator
 
-*Congratulations.  You are now an ns-3 user.*
+Congratulations!  You are now an ns-3 user!
 
-*What do I do if I don't see the output?*
+**What do I do if I don't see the output?**
 
-If you see ``waf`` messages indicating that the build was 
+If you see Waf messages indicating that the build was 
 completed successfully, but do not see the "Hello Simulator" output, 
-chances are that you have switched your build mode to "optimized" in 
-the "Building with Waf" section, but have missed the change back to 
-"debug" mode.  All of the console output used in this tutorial uses a 
+chances are that you have switched your build mode to ``optimized`` in 
+the `Building with Waf`_ section, but have missed the change back to 
+``debug`` mode.  All of the console output used in this tutorial uses a 
 special |ns3| logging component that is useful for printing 
 user messages to the console.  Output from this component is 
 automatically disabled when you compile optimized code -- it is 
 "optimized out."  If you don't see the "Hello Simulator" output,
-type the following,
+type the following::
 
-::
+  $ ./waf configure --build-profile=debug --enable-examples --enable-tests
 
-  $ ./waf configure -d debug --enable-examples --enable-tests
-
-to tell ``waf`` to build the debug versions of the |ns3| 
+to tell Waf to build the debug versions of the |ns3| 
 programs that includes the examples and tests.  You must still build 
-the actual debug version of the code by typing,
+the actual debug version of the code by typing
 
 ::
 
@@ -659,7 +709,80 @@
 Now, if you run the ``hello-simulator`` program, you should see the 
 expected output.
 
-If you want to run programs under another tool such as gdb or valgrind,
-see this `wiki entry
-<http://www.nsnam.org/wiki/User_FAQ#How_to_run_NS-3_programs_under_another_tool>`_.
+Program Arguments
++++++++++++++++++
+
+To feed command line arguments to an |ns3| program use this pattern::
+
+  $ ./waf --run <ns3-program> --command-template="%s <args>"
+
+Substitute your program name for ``<ns3-program>``, and the arguments
+for ``<args>``.  The ``--command-template`` argument to Waf is
+basically a recipe for constructing the actual command line Waf should use
+to execute the program.  Waf checks that the build is complete,
+sets the shared library paths, then invokes the executable
+using the provided command line template, 
+inserting the program name for the ``%s`` placeholder.
+(I admit this is a bit awkward, but that's the way it is.  Patches welcome!)
+
+Another particularly useful example is to run the ``mytest`` test suite
+by itself.  Above, we used the ``./test.py`` script to run a whole slew of
+tests in parallel, by repeatedly invoking the real testing program,
+``test-runner``.  To invoke ``test-runner`` directly for a single test::
+
+  $ ./waf --run test-runner --command-template="% --suite=mytest --verbose"
+
+This passes the arguments to the ``test-runner`` program.  To print the
+available ``test-runner`` options::
+
+  $ ./waf --run test-runner --command-template="% --help"
+
+Debugging
++++++++++
+
+To run |ns3| programs under the control of another utility, such as
+a debugger (*e.g.* ``gdb``) or memory checker (*e.g.* ``valgrind``),
+you use a similar ``--command-template="..."`` form.
+
+For example, to run your |ns3| program ``mysim`` with the arguments
+``<args>`` under the ``gdb`` debugger::
+
+  $ ./waf --run=hello-simulator --command-template="gdb %s --args <args>"
+
+Notice that the |ns3| program name goes with the ``--run`` argument,
+and the control utility (here ``gdb``) is the first token
+in the ``--commmand-template`` argument.  The ``--args`` tells ``gdb``
+that the remainder of the command line belongs to the "inferior" program.
+(Some ``gdb``'s don't understand the ``--args`` feature.  In this case,
+omit the program arguments from the ``--command-template``,
+and use the ``gdb`` command ``set args``.)
+
+We can combine this recipe and the previous one to run a test under the
+debugger::
+
+  $ ./waf --run test-runner --command-template="gdb %s --args --suite=mytest --verbose"
+
+Working Directory
++++++++++++++++++
 
+Waf needs to run from it's location at the top of the |ns3| tree.
+This becomes the working directory where output files will be written.
+But what if you want to keep those ouf to the |ns3| source tree?  Use
+the ``--cwd`` argument::
+
+  $ ./waf --cwd=...
+
+It may be more convenient to start with your working directory where
+you want the output files, in which case a little indirection can help::
+
+  $ function waff {
+      CWD="$PWD"
+      cd $NS3DIR >/dev/null
+      ./waf --cwd="$CWD" $*
+      cd - >/dev/null
+    }
+
+This embellishment of the previous version saves the current working directory,
+``cd``'s to the Waf directory, then instructs Waf to change the working
+directory *back* to the saved current working directory before running the
+program.
diff -Naur ns-3.19/doc/tutorial-pt-br/source/conf.py ns-3.20/doc/tutorial-pt-br/source/conf.py
--- ns-3.19/doc/tutorial-pt-br/source/conf.py	2014-06-17 10:34:00.331637488 -0700
+++ ns-3.20/doc/tutorial-pt-br/source/conf.py	2014-06-17 10:33:13.678997621 -0700
@@ -42,7 +42,7 @@
 
 # General information about the project.
 project = u'ns-3'
-copyright = u'2008-13, ns-3 project'
+copyright = u'2008-11, ns-3 project'
 
 
 # The version info for the project you're documenting, acts as replacement for
@@ -50,9 +50,9 @@
 # built documents.
 #
 # The short X.Y version.
-version = 'ns-3.19'
+version = 'ns-3.20'
 # The full version, including alpha/beta/rc tags.
-release = 'ns-3.19'
+release = 'ns-3.20'
 
 # The language for content autogenerated by . Refer to babel documentation
 # for a list of supported languages.
diff -Naur ns-3.19/examples/energy/waf ns-3.20/examples/energy/waf
--- ns-3.19/examples/energy/waf	2014-06-17 10:34:00.351637333 -0700
+++ ns-3.20/examples/energy/waf	1969-12-31 16:00:00.000000000 -0800
@@ -1 +0,0 @@
-exec "`dirname "$0"`"/../../waf "$@"
diff -Naur ns-3.19/examples/error-model/waf ns-3.20/examples/error-model/waf
--- ns-3.19/examples/error-model/waf	2014-06-17 10:34:00.352637325 -0700
+++ ns-3.20/examples/error-model/waf	1969-12-31 16:00:00.000000000 -0800
@@ -1 +0,0 @@
-exec "`dirname "$0"`"/../../waf "$@"
diff -Naur ns-3.19/examples/ipv6/waf ns-3.20/examples/ipv6/waf
--- ns-3.19/examples/ipv6/waf	2014-06-17 10:34:00.356637295 -0700
+++ ns-3.20/examples/ipv6/waf	1969-12-31 16:00:00.000000000 -0800
@@ -1 +0,0 @@
-exec "`dirname "$0"`"/../../waf "$@"
diff -Naur ns-3.19/examples/ipv6/wscript ns-3.20/examples/ipv6/wscript
--- ns-3.19/examples/ipv6/wscript	2014-06-17 10:34:00.357637287 -0700
+++ ns-3.20/examples/ipv6/wscript	2014-06-17 10:33:13.704997420 -0700
@@ -25,3 +25,6 @@
     obj = bld.create_ns3_program('loose-routing-ipv6', ['csma', 'internet'])
     obj.source = 'loose-routing-ipv6.cc'
 
+    obj = bld.create_ns3_program('wsn-ping6', ['lr-wpan', 'internet', 'sixlowpan', 'mobility'])
+    obj.source = 'wsn-ping6.cc'
+
diff -Naur ns-3.19/examples/ipv6/wsn-ping6.cc ns-3.20/examples/ipv6/wsn-ping6.cc
--- ns-3.19/examples/ipv6/wsn-ping6.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.20/examples/ipv6/wsn-ping6.cc	2014-06-17 10:33:13.704997420 -0700
@@ -0,0 +1,141 @@
+/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2014 Universita' di Firenze
+ *
+ * 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: Tommaso Pecorella <tommaso.pecorella@unifi.it>
+ */
+
+// Network topology
+//
+//       n0    n1
+//       |     |
+//       =================
+//        WSN (802.15.4)
+//
+// - ICMPv6 echo request flows from n0 to n1 and back with ICMPv6 echo reply
+// - DropTail queues 
+// - Tracing of queues and packet receptions to file "wsn-ping6.tr"
+//
+// This example is based on the "ping6.cc" example.
+
+#include <fstream>
+#include "ns3/core-module.h"
+#include "ns3/internet-module.h"
+#include "ns3/sixlowpan-module.h"
+#include "ns3/lr-wpan-module.h"
+#include "ns3/applications-module.h"
+#include "ns3/mobility-module.h"
+
+using namespace ns3;
+
+NS_LOG_COMPONENT_DEFINE ("Ping6WsnExample");
+
+int main (int argc, char **argv)
+{
+  bool verbose = false;
+
+  CommandLine cmd;
+  cmd.AddValue ("verbose", "turn on log components", verbose);
+  cmd.Parse (argc, argv);
+
+  if (verbose)
+    {
+      LogComponentEnable ("Ping6WsnExample", LOG_LEVEL_INFO);
+      LogComponentEnable ("Ipv6EndPointDemux", LOG_LEVEL_ALL);
+      LogComponentEnable ("Ipv6L3Protocol", LOG_LEVEL_ALL);
+      LogComponentEnable ("Ipv6StaticRouting", LOG_LEVEL_ALL);
+      LogComponentEnable ("Ipv6ListRouting", LOG_LEVEL_ALL);
+      LogComponentEnable ("Ipv6Interface", LOG_LEVEL_ALL);
+      LogComponentEnable ("Icmpv6L4Protocol", LOG_LEVEL_ALL);
+      LogComponentEnable ("Ping6Application", LOG_LEVEL_ALL);
+      LogComponentEnable ("NdiscCache", LOG_LEVEL_ALL);
+      LogComponentEnable ("SixLowPanNetDevice", LOG_LEVEL_ALL);
+    }
+
+  NS_LOG_INFO ("Create nodes.");
+  NodeContainer nodes;
+  nodes.Create (2);
+
+  // Set seed for random numbers
+  SeedManager::SetSeed (167);
+
+  // Install mobility
+  MobilityHelper mobility;
+  mobility.SetMobilityModel ("ns3::ConstantPositionMobilityModel");
+
+  Ptr<ListPositionAllocator> nodesPositionAlloc = CreateObject<ListPositionAllocator> ();
+  nodesPositionAlloc->Add (Vector (0.0, 0.0, 0.0));
+  nodesPositionAlloc->Add (Vector (50.0, 0.0, 0.0));
+  mobility.SetPositionAllocator (nodesPositionAlloc);
+  mobility.Install (nodes);
+
+  NS_LOG_INFO ("Create channels.");
+  LrWpanHelper lrWpanHelper;
+  // Add and install the LrWpanNetDevice for each node
+  // lrWpanHelper.EnableLogComponents();
+  NetDeviceContainer devContainer = lrWpanHelper.Install(nodes);
+  lrWpanHelper.AssociateToPan (devContainer, 10);
+
+  std::cout << "Created " << devContainer.GetN() << " devices" << std::endl;
+  std::cout << "There are " << nodes.GetN() << " nodes" << std::endl;
+
+  /* Install IPv4/IPv6 stack */
+  NS_LOG_INFO ("Install Internet stack.");
+  InternetStackHelper internetv6;
+  internetv6.SetIpv4StackInstall (false);
+  internetv6.Install (nodes);
+
+  // Install 6LowPan layer
+  NS_LOG_INFO ("Install 6LoWPAN.");
+  SixLowPanHelper sixlowpan;
+  NetDeviceContainer six1 = sixlowpan.Install (devContainer);
+
+  NS_LOG_INFO ("Assign addresses.");
+  Ipv6AddressHelper ipv6;
+  ipv6.SetBase (Ipv6Address ("2001:1::"), Ipv6Prefix (64));
+  Ipv6InterfaceContainer i = ipv6.Assign (six1);
+
+  NS_LOG_INFO ("Create Applications.");
+
+  /* Create a Ping6 application to send ICMPv6 echo request from node zero to
+   * all-nodes (ff02::1).
+   */
+  uint32_t packetSize = 10;
+  uint32_t maxPacketCount = 5;
+  Time interPacketInterval = Seconds (1.);
+  Ping6Helper ping6;
+
+  ping6.SetLocal (i.GetAddress (0, 1));
+  ping6.SetRemote (i.GetAddress (1, 1));
+  // ping6.SetRemote (Ipv6Address::GetAllNodesMulticast ());
+
+  ping6.SetAttribute ("MaxPackets", UintegerValue (maxPacketCount));
+  ping6.SetAttribute ("Interval", TimeValue (interPacketInterval));
+  ping6.SetAttribute ("PacketSize", UintegerValue (packetSize));
+  ApplicationContainer apps = ping6.Install (nodes.Get (0));
+  apps.Start (Seconds (2.0));
+  apps.Stop (Seconds (10.0));
+
+  AsciiTraceHelper ascii;
+  lrWpanHelper.EnableAsciiAll (ascii.CreateFileStream ("ping6wsn.tr"));
+  lrWpanHelper.EnablePcapAll (std::string ("ping6wsn"), true);
+
+  NS_LOG_INFO ("Run Simulation.");
+  Simulator::Run ();
+  Simulator::Destroy ();
+  NS_LOG_INFO ("Done.");
+}
+
diff -Naur ns-3.19/examples/naming/waf ns-3.20/examples/naming/waf
--- ns-3.19/examples/naming/waf	2014-06-17 10:34:00.359637271 -0700
+++ ns-3.20/examples/naming/waf	1969-12-31 16:00:00.000000000 -0800
@@ -1 +0,0 @@
-exec "`dirname "$0"`"/../../waf "$@"
diff -Naur ns-3.19/examples/realtime/waf ns-3.20/examples/realtime/waf
--- ns-3.19/examples/realtime/waf	2014-06-17 10:34:00.361637256 -0700
+++ ns-3.20/examples/realtime/waf	1969-12-31 16:00:00.000000000 -0800
@@ -1 +0,0 @@
-exec "`dirname "$0"`"/../../waf "$@"
diff -Naur ns-3.19/examples/routing/manet-routing-compare.cc ns-3.20/examples/routing/manet-routing-compare.cc
--- ns-3.19/examples/routing/manet-routing-compare.cc	2014-06-17 10:34:00.378637125 -0700
+++ ns-3.20/examples/routing/manet-routing-compare.cc	2014-06-17 10:33:13.710997374 -0700
@@ -343,7 +343,7 @@
   onoff1.SetAttribute ("OnTime", StringValue ("ns3::ConstantRandomVariable[Constant=1.0]"));
   onoff1.SetAttribute ("OffTime", StringValue ("ns3::ConstantRandomVariable[Constant=0.0]"));
 
-  for (int i = 0; i <= nSinks - 1; i++)
+  for (int i = 0; i < nSinks; i++)
     {
       Ptr<Socket> sink = SetupPacketReceive (adhocInterfaces.GetAddress (i), adhocNodes.Get (i));
 
diff -Naur ns-3.19/examples/routing/ripng-simple-network.cc ns-3.20/examples/routing/ripng-simple-network.cc
--- ns-3.19/examples/routing/ripng-simple-network.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.20/examples/routing/ripng-simple-network.cc	2014-06-17 10:33:13.711997366 -0700
@@ -0,0 +1,268 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2014 Universita' di Firenze, Italy
+ *
+ * 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: Tommaso Pecorella <tommaso.pecorella@unifi.it>
+ */
+
+// Network topology
+//
+//    SRC
+//     |<=== source network
+//     A-----B
+//      \   / \   all networks have cost 1, except
+//       \ /  |   for the direct link from C to D, which
+//        C  /    has cost 10
+//        | /
+//        |/
+//        D
+//        |<=== target network
+//       DST
+//
+//
+// A, B, C and D are RIPng routers.
+// A and D are configured with static addresses.
+// SRC and DST will exchange packets.
+//
+// After about 3 seconds, the topology is built, and Echo Reply will be received.
+// After 40 seconds, the link between B and D will break, causing a route failure.
+// After 44 seconds from the failure, the routers will recovery from the failure.
+// Split Horizoning should affect the recovery time, but it is not. See the manual
+// for an explanation of this effect.
+//
+// If "showPings" is enabled, the user will see:
+// 1) if the ping has been acknowledged
+// 2) if a Destination Unreachable has been received by the sender
+// 3) nothing, when the Echo Request has been received by the destination but
+//    the Echo Reply is unable to reach the sender.
+// Examining the .pcap files with Wireshark can confirm this effect.
+
+
+#include <fstream>
+#include "ns3/core-module.h"
+#include "ns3/internet-module.h"
+#include "ns3/csma-module.h"
+#include "ns3/applications-module.h"
+#include "ns3/ipv6-static-routing-helper.h"
+#include "ns3/ipv6-routing-table-entry.h"
+
+using namespace ns3;
+
+NS_LOG_COMPONENT_DEFINE ("RipNgSimpleRouting");
+
+void TearDownLink (Ptr<Node> nodeA, Ptr<Node> nodeB, uint32_t interfaceA, uint32_t interfaceB)
+{
+  nodeA->GetObject<Ipv6> ()->SetDown (interfaceA);
+  nodeB->GetObject<Ipv6> ()->SetDown (interfaceB);
+}
+
+int main (int argc, char **argv)
+{
+  bool verbose = false;
+  bool printRoutingTables = false;
+  bool showPings = false;
+  std::string SplitHorizon ("PoisonReverse");
+
+  CommandLine cmd;
+  cmd.AddValue ("verbose", "turn on log components", verbose);
+  cmd.AddValue ("printRoutingTables", "Print routing tables at 30, 60 and 90 seconds", printRoutingTables);
+  cmd.AddValue ("showPings", "Show Ping6 reception", showPings);
+  cmd.AddValue ("splitHorizonStrategy", "Split Horizon strategy to use (NoSplitHorizon, SplitHorizon, PoisonReverse)", SplitHorizon);
+  cmd.Parse (argc, argv);
+
+  if (verbose)
+    {
+      LogComponentEnable ("RipNgSimpleRouting", LOG_LEVEL_INFO);
+      LogComponentEnable ("RipNg", LOG_LEVEL_ALL);
+      LogComponentEnable ("Icmpv6L4Protocol", LOG_LEVEL_INFO);
+      LogComponentEnable ("Ipv6Interface", LOG_LEVEL_ALL);
+      LogComponentEnable ("Icmpv6L4Protocol", LOG_LEVEL_ALL);
+      LogComponentEnable ("NdiscCache", LOG_LEVEL_ALL);
+      LogComponentEnable ("Ping6Application", LOG_LEVEL_ALL);
+    }
+
+  if (showPings)
+    {
+      LogComponentEnable ("Ping6Application", LOG_LEVEL_INFO);
+    }
+
+  if (SplitHorizon == "NoSplitHorizon")
+    {
+      Config::SetDefault ("ns3::RipNg::SplitHorizon", EnumValue (RipNg::NO_SPLIT_HORIZON));
+    }
+  else if (SplitHorizon == "SplitHorizon")
+    {
+      Config::SetDefault ("ns3::RipNg::SplitHorizon", EnumValue (RipNg::SPLIT_HORIZON));
+    }
+  else
+    {
+      Config::SetDefault ("ns3::RipNg::SplitHorizon", EnumValue (RipNg::POISON_REVERSE));
+    }
+
+  NS_LOG_INFO ("Create nodes.");
+  Ptr<Node> src = CreateObject<Node> ();
+  Names::Add ("SrcNode", src);
+  Ptr<Node> dst = CreateObject<Node> ();
+  Names::Add ("DstNode", dst);
+  Ptr<Node> a = CreateObject<Node> ();
+  Names::Add ("RouterA", a);
+  Ptr<Node> b = CreateObject<Node> ();
+  Names::Add ("RouterB", b);
+  Ptr<Node> c = CreateObject<Node> ();
+  Names::Add ("RouterC", c);
+  Ptr<Node> d = CreateObject<Node> ();
+  Names::Add ("RouterD", d);
+  NodeContainer net1 (src, a);
+  NodeContainer net2 (a, b);
+  NodeContainer net3 (a, c);
+  NodeContainer net4 (b, c);
+  NodeContainer net5 (c, d);
+  NodeContainer net6 (b, d);
+  NodeContainer net7 (d, dst);
+  NodeContainer routers (a, b, c, d);
+  NodeContainer nodes (src, dst);
+
+
+  NS_LOG_INFO ("Create channels.");
+  CsmaHelper csma;
+  csma.SetChannelAttribute ("DataRate", DataRateValue (5000000));
+  csma.SetChannelAttribute ("Delay", TimeValue (MilliSeconds (2)));
+  NetDeviceContainer ndc1 = csma.Install (net1);
+  NetDeviceContainer ndc2 = csma.Install (net2);
+  NetDeviceContainer ndc3 = csma.Install (net3);
+  NetDeviceContainer ndc4 = csma.Install (net4);
+  NetDeviceContainer ndc5 = csma.Install (net5);
+  NetDeviceContainer ndc6 = csma.Install (net6);
+  NetDeviceContainer ndc7 = csma.Install (net7);
+
+  NS_LOG_INFO ("Create IPv6 and routing");
+  RipNgHelper ripNgRouting;
+
+  // Rule of thumb:
+  // Interfaces are added sequentially, starting from 0
+  // However, interface 0 is always the loopback...
+  ripNgRouting.ExcludeInterface (a, 1);
+  ripNgRouting.ExcludeInterface (d, 3);
+
+  ripNgRouting.SetInterfaceMetric (c, 3, 10);
+  ripNgRouting.SetInterfaceMetric (d, 1, 10);
+
+  Ipv6ListRoutingHelper listRH;
+  listRH.Add (ripNgRouting, 0);
+
+  InternetStackHelper internetv6;
+  internetv6.SetIpv4StackInstall (false);
+  internetv6.SetRoutingHelper (listRH);
+  internetv6.Install (routers);
+
+  InternetStackHelper internetv6Nodes;
+  internetv6Nodes.SetIpv4StackInstall (false);
+  internetv6Nodes.Install (nodes);
+
+  // Assign addresses.
+  // The source and destination networks have global addresses
+  // The "core" network just needs link-local addresses for routing.
+  // We assign global addresses to the routers as well to receive
+  // ICMPv6 errors.
+  NS_LOG_INFO ("Assign IPv6 Addresses.");
+  Ipv6AddressHelper ipv6;
+
+  ipv6.SetBase (Ipv6Address ("2001:1::"), Ipv6Prefix (64));
+  Ipv6InterfaceContainer iic1 = ipv6.Assign (ndc1);
+  iic1.SetForwarding (1, true);
+  iic1.SetDefaultRouteInAllNodes (1);
+
+  ipv6.SetBase (Ipv6Address ("2001:0:1::"), Ipv6Prefix (64));
+  Ipv6InterfaceContainer iic2 = ipv6.Assign (ndc2);
+  iic2.SetForwarding (0, true);
+  iic2.SetForwarding (1, true);
+
+  ipv6.SetBase (Ipv6Address ("2001:0:2::"), Ipv6Prefix (64));
+  Ipv6InterfaceContainer iic3 = ipv6.Assign (ndc3);
+  iic3.SetForwarding (0, true);
+  iic3.SetForwarding (1, true);
+
+  ipv6.SetBase (Ipv6Address ("2001:0:3::"), Ipv6Prefix (64));
+  Ipv6InterfaceContainer iic4 = ipv6.Assign (ndc4);
+  iic4.SetForwarding (0, true);
+  iic4.SetForwarding (1, true);
+
+  ipv6.SetBase (Ipv6Address ("2001:0:4::"), Ipv6Prefix (64));
+  Ipv6InterfaceContainer iic5 = ipv6.Assign (ndc5);
+  iic5.SetForwarding (0, true);
+  iic5.SetForwarding (1, true);
+
+  ipv6.SetBase (Ipv6Address ("2001:0:5::"), Ipv6Prefix (64));
+  Ipv6InterfaceContainer iic6 = ipv6.Assign (ndc6);
+  iic6.SetForwarding (0, true);
+  iic6.SetForwarding (1, true);
+
+  ipv6.SetBase (Ipv6Address ("2001:2::"), Ipv6Prefix (64));
+  Ipv6InterfaceContainer iic7 = ipv6.Assign (ndc7);
+  iic7.SetForwarding (0, true);
+  iic7.SetDefaultRouteInAllNodes (0);
+
+  if (printRoutingTables)
+    {
+      RipNgHelper routingHelper;
+
+      Ptr<OutputStreamWrapper> routingStream = Create<OutputStreamWrapper> (&std::cout);
+
+      routingHelper.PrintRoutingTableAt (Seconds (30.0), a, routingStream);
+      routingHelper.PrintRoutingTableAt (Seconds (30.0), b, routingStream);
+      routingHelper.PrintRoutingTableAt (Seconds (30.0), c, routingStream);
+      routingHelper.PrintRoutingTableAt (Seconds (30.0), d, routingStream);
+
+      routingHelper.PrintRoutingTableAt (Seconds (60.0), a, routingStream);
+      routingHelper.PrintRoutingTableAt (Seconds (60.0), b, routingStream);
+      routingHelper.PrintRoutingTableAt (Seconds (60.0), c, routingStream);
+      routingHelper.PrintRoutingTableAt (Seconds (60.0), d, routingStream);
+
+      routingHelper.PrintRoutingTableAt (Seconds (90.0), a, routingStream);
+      routingHelper.PrintRoutingTableAt (Seconds (90.0), b, routingStream);
+      routingHelper.PrintRoutingTableAt (Seconds (90.0), c, routingStream);
+      routingHelper.PrintRoutingTableAt (Seconds (90.0), d, routingStream);
+    }
+
+  NS_LOG_INFO ("Create Applications.");
+  uint32_t packetSize = 1024;
+  uint32_t maxPacketCount = 100;
+  Time interPacketInterval = Seconds (1.0);
+  Ping6Helper ping6;
+
+  ping6.SetLocal (iic1.GetAddress (0, 1));
+  ping6.SetRemote (iic7.GetAddress (1, 1));
+  ping6.SetAttribute ("MaxPackets", UintegerValue (maxPacketCount));
+  ping6.SetAttribute ("Interval", TimeValue (interPacketInterval));
+  ping6.SetAttribute ("PacketSize", UintegerValue (packetSize));
+  ApplicationContainer apps = ping6.Install (src);
+  apps.Start (Seconds (1.0));
+  apps.Stop (Seconds (110.0));
+
+  AsciiTraceHelper ascii;
+  csma.EnableAsciiAll (ascii.CreateFileStream ("ripng-simple-routing.tr"));
+  csma.EnablePcapAll ("ripng-simple-routing", true);
+
+  Simulator::Schedule (Seconds (40), &TearDownLink, b, d, 3, 2);
+
+  /* Now, do the actual simulation. */
+  NS_LOG_INFO ("Run Simulation.");
+  Simulator::Stop (Seconds (120));
+  Simulator::Run ();
+  Simulator::Destroy ();
+  NS_LOG_INFO ("Done.");
+}
+
diff -Naur ns-3.19/examples/routing/simple-global-routing.cc ns-3.20/examples/routing/simple-global-routing.cc
--- ns-3.19/examples/routing/simple-global-routing.cc	2014-06-17 10:34:00.379637117 -0700
+++ ns-3.20/examples/routing/simple-global-routing.cc	2014-06-17 10:33:13.712997359 -0700
@@ -149,11 +149,10 @@
   p2p.EnablePcapAll ("simple-global-routing");
 
   // Flow Monitor
-  Ptr<FlowMonitor> flowmon;
   FlowMonitorHelper flowmonHelper;
   if (enableFlowMonitor)
     {
-      flowmon = flowmonHelper.InstallAll ();
+      flowmonHelper.InstallAll ();
     }
 
   NS_LOG_INFO ("Run Simulation.");
@@ -163,7 +162,7 @@
 
   if (enableFlowMonitor)
     {
-      flowmon->SerializeToXmlFile ("simple-global-routing.flowmon", false, false);
+      flowmonHelper.SerializeToXmlFile ("simple-global-routing.flowmon", false, false);
     }
 
   Simulator::Destroy ();
diff -Naur ns-3.19/examples/routing/waf ns-3.20/examples/routing/waf
--- ns-3.19/examples/routing/waf	2014-06-17 10:34:00.381637101 -0700
+++ ns-3.20/examples/routing/waf	1969-12-31 16:00:00.000000000 -0800
@@ -1 +0,0 @@
-exec "`dirname "$0"`"/../../waf "$@"
diff -Naur ns-3.19/examples/routing/wscript ns-3.20/examples/routing/wscript
--- ns-3.19/examples/routing/wscript	2014-06-17 10:34:00.381637101 -0700
+++ ns-3.20/examples/routing/wscript	2014-06-17 10:33:13.714997343 -0700
@@ -37,4 +37,8 @@
                                  ['wifi', 'dsr', 'dsdv', 'aodv', 'olsr', 'internet', 'applications'])
     obj.source = 'manet-routing-compare.cc'
 
+    obj = bld.create_ns3_program('ripng-simple-network',
+                                 ['csma', 'internet', 'applications'])
+    obj.source = 'ripng-simple-network.cc'
+
     bld.register_ns3_script('simple-routing-ping6.py', ['csma', 'internet', 'applications'])
diff -Naur ns-3.19/examples/socket/waf ns-3.20/examples/socket/waf
--- ns-3.19/examples/socket/waf	2014-06-17 10:34:00.383637086 -0700
+++ ns-3.20/examples/socket/waf	1969-12-31 16:00:00.000000000 -0800
@@ -1 +0,0 @@
-exec "`dirname "$0"`"/../../waf "$@"
diff -Naur ns-3.19/examples/tcp/tcp-variants-comparison.cc ns-3.20/examples/tcp/tcp-variants-comparison.cc
--- ns-3.19/examples/tcp/tcp-variants-comparison.cc	2014-06-17 10:34:00.390637032 -0700
+++ ns-3.20/examples/tcp/tcp-variants-comparison.cc	2014-06-17 10:33:13.723997274 -0700
@@ -339,11 +339,10 @@
   LocalLink.EnablePcapAll("TcpVariantsComparison", true);
 
   // Flow monitor
-  Ptr<FlowMonitor> flowMonitor;
   FlowMonitorHelper flowHelper;
   if (flow_monitor)
     {
-      flowMonitor = flowHelper.InstallAll();
+      flowHelper.InstallAll();
     }
 
   Simulator::Stop (Seconds(stop_time));
@@ -351,7 +350,7 @@
 
   if (flow_monitor)
     {
-      flowMonitor->SerializeToXmlFile("TcpVariantsComparison.flowmonitor", true, true);
+      flowHelper.SerializeToXmlFile("TcpVariantsComparison.flowmonitor", true, true);
     }
 
   Simulator::Destroy ();
diff -Naur ns-3.19/examples/tcp/waf ns-3.20/examples/tcp/waf
--- ns-3.19/examples/tcp/waf	2014-06-17 10:34:00.391637024 -0700
+++ ns-3.20/examples/tcp/waf	1969-12-31 16:00:00.000000000 -0800
@@ -1 +0,0 @@
-exec "`dirname "$0"`"/../../waf "$@"
diff -Naur ns-3.19/examples/tutorial/waf ns-3.20/examples/tutorial/waf
--- ns-3.19/examples/tutorial/waf	2014-06-17 10:34:00.395636994 -0700
+++ ns-3.20/examples/tutorial/waf	1969-12-31 16:00:00.000000000 -0800
@@ -1 +0,0 @@
-exec "`dirname "$0"`"/../../waf "$@"
diff -Naur ns-3.19/examples/udp/waf ns-3.20/examples/udp/waf
--- ns-3.19/examples/udp/waf	2014-06-17 10:34:00.398636970 -0700
+++ ns-3.20/examples/udp/waf	1969-12-31 16:00:00.000000000 -0800
@@ -1 +0,0 @@
-exec "`dirname "$0"`"/../../waf "$@"
diff -Naur ns-3.19/examples/udp-client-server/waf ns-3.20/examples/udp-client-server/waf
--- ns-3.19/examples/udp-client-server/waf	2014-06-17 10:34:00.397636978 -0700
+++ ns-3.20/examples/udp-client-server/waf	1969-12-31 16:00:00.000000000 -0800
@@ -1 +0,0 @@
-exec "`dirname "$0"`"/../../waf "$@"
diff -Naur ns-3.19/examples/waf ns-3.20/examples/waf
--- ns-3.19/examples/waf	2014-06-17 10:34:00.398636970 -0700
+++ ns-3.20/examples/waf	1969-12-31 16:00:00.000000000 -0800
@@ -1 +0,0 @@
-exec "`dirname "$0"`"/../waf "$@"
diff -Naur ns-3.19/examples/wireless/mixed-wireless.cc ns-3.20/examples/wireless/mixed-wireless.cc
--- ns-3.19/examples/wireless/mixed-wireless.cc	2014-06-17 10:34:00.400636955 -0700
+++ ns-3.20/examples/wireless/mixed-wireless.cc	2014-06-17 10:33:13.731997212 -0700
@@ -69,6 +69,7 @@
 #include "ns3/csma-module.h"
 #include "ns3/olsr-helper.h"
 #include "ns3/internet-module.h"
+#include "ns3/netanim-module.h"
 
 using namespace ns3;
 
@@ -96,18 +97,17 @@
   // simulation parameters.
   //
   uint32_t backboneNodes = 10;
-  uint32_t infraNodes = 5;
-  uint32_t lanNodes = 5;
-  uint32_t stopTime = 10;
+  uint32_t infraNodes = 2;
+  uint32_t lanNodes = 2;
+  uint32_t stopTime = 20;
   bool useCourseChangeCallback = false;
-  bool enableTracing = false;
 
   //
   // Simulation defaults are typically set next, before command line
   // arguments are parsed.
   //
-  Config::SetDefault ("ns3::OnOffApplication::PacketSize", StringValue ("210"));
-  Config::SetDefault ("ns3::OnOffApplication::DataRate", StringValue ("10kb/s"));
+  Config::SetDefault ("ns3::OnOffApplication::PacketSize", StringValue ("1472"));
+  Config::SetDefault ("ns3::OnOffApplication::DataRate", StringValue ("100kb/s"));
 
   //
   // For convenience, we add the local variables to the command line argument
@@ -120,7 +120,6 @@
   cmd.AddValue ("lanNodes", "number of LAN nodes", lanNodes);
   cmd.AddValue ("stopTime", "simulation stop time (seconds)", stopTime);
   cmd.AddValue ("useCourseChangeCallback", "whether to enable course change tracing", useCourseChangeCallback);
-  cmd.AddValue ("enableTracing", "enable tracing", enableTracing);
 
   //
   // The system global variables and the local values added to the argument
@@ -128,6 +127,11 @@
   //
   cmd.Parse (argc, argv);
 
+  if (stopTime < 10)
+    {
+      std::cout << "Use a simulation stop time >= 10 seconds" << std::endl;
+      exit (1);
+    }
   /////////////////////////////////////////////////////////////////////////// 
   //                                                                       //
   // Construct the backbone                                                //
@@ -165,9 +169,6 @@
   internet.SetRoutingHelper (olsr); // has effect on the next Install ()
   internet.Install (backbone);
 
-  // re-initialize for non-olsr routing.
-  internet.Reset ();
-
   //
   // Assign IPv4 addresses to the device drivers (actually to the associated
   // IPv4 interfaces) we just created.
@@ -181,17 +182,15 @@
   // each of the nodes we just finished building.
   //
   MobilityHelper mobility;
-  Ptr<ListPositionAllocator> positionAlloc = 
-    CreateObject<ListPositionAllocator> ();
-  double x = 0.0;
-  for (uint32_t i = 0; i < backboneNodes; ++i)
-    {
-      positionAlloc->Add (Vector (x, 0.0, 0.0));
-      x += 5.0;
-    }
-  mobility.SetPositionAllocator (positionAlloc);
+  mobility.SetPositionAllocator ("ns3::GridPositionAllocator",
+                                 "MinX", DoubleValue (20.0),
+                                 "MinY", DoubleValue (20.0),
+                                 "DeltaX", DoubleValue (20.0),
+                                 "DeltaY", DoubleValue (20.0),
+                                 "GridWidth", UintegerValue (5),
+                                 "LayoutType", StringValue ("RowFirst"));
   mobility.SetMobilityModel ("ns3::RandomDirection2dMobilityModel",
-                             "Bounds", RectangleValue (Rectangle (0, 20, 0, 20)),
+                             "Bounds", RectangleValue (Rectangle (-500, 500, -500, 500)),
                              "Speed", StringValue ("ns3::ConstantRandomVariable[Constant=2]"),
                              "Pause", StringValue ("ns3::ConstantRandomVariable[Constant=0.2]"));
   mobility.Install (backbone);
@@ -242,6 +241,21 @@
       // network mask initialized above
       //
       ipAddrs.NewNetwork ();
+      //
+      // The new LAN nodes need a mobility model so we aggregate one
+      // to each of the nodes we just finished building.
+      //
+      MobilityHelper mobilityLan;
+      Ptr<ListPositionAllocator> subnetAlloc = 
+        CreateObject<ListPositionAllocator> ();
+      for (uint32_t j = 0; j < newLanNodes.GetN (); ++j)
+        {
+          subnetAlloc->Add (Vector (0.0, j*10 + 10, 0.0));
+        }
+      mobilityLan.PushReferenceMobilityModel (backbone.Get (i));
+      mobilityLan.SetPositionAllocator (subnetAlloc);
+      mobilityLan.SetMobilityModel ("ns3::ConstantPositionMobilityModel");
+      mobilityLan.Install (newLanNodes);
     }
 
   /////////////////////////////////////////////////////////////////////////// 
@@ -286,7 +300,9 @@
       NetDeviceContainer staDevices = wifiInfra.Install (wifiPhy, macInfra, stas);
       // setup ap.
       macInfra.SetType ("ns3::ApWifiMac",
-                        "Ssid", SsidValue (ssid));
+                        "Ssid", SsidValue (ssid),
+                        "BeaconGeneration", BooleanValue (true),
+                        "BeaconInterval", TimeValue(Seconds(2.5)));
       NetDeviceContainer apDevices = wifiInfra.Install (wifiPhy, macInfra, backbone.Get (i));
       // Collect all of these new devices
       NetDeviceContainer infraDevices (apDevices, staDevices);
@@ -320,19 +336,8 @@
                                  "Bounds", RectangleValue (Rectangle (-10, 10, -10, 10)),
                                  "Speed", StringValue ("ns3::ConstantRandomVariable[Constant=3]"),
                                  "Pause", StringValue ("ns3::ConstantRandomVariable[Constant=0.4]"));
-      mobility.Install (infra);
+      mobility.Install (stas);
     }
-  /////////////////////////////////////////////////////////////////////////// 
-  //                                                                       //
-  // Routing configuration                                                 //
-  //                                                                       //
-  /////////////////////////////////////////////////////////////////////////// 
-
-  // The below global routing does not take into account wireless effects.
-  // However, it is useful for setting default routes for all of the nodes
-  // such as the LAN nodes.
-  NS_LOG_INFO ("Enabling global routing on all nodes");
-  Ipv4GlobalRoutingHelper::PopulateRoutingTables ();
 
   /////////////////////////////////////////////////////////////////////////// 
   //                                                                       //
@@ -363,17 +368,16 @@
 
   OnOffHelper onoff ("ns3::UdpSocketFactory", 
                      Address (InetSocketAddress (remoteAddr, port)));
-  onoff.SetConstantRate (DataRate ("10kb/s"));
 
   ApplicationContainer apps = onoff.Install (appSource);
-  apps.Start (Seconds (3.0));
-  apps.Stop (Seconds (20.0));
+  apps.Start (Seconds (3));
+  apps.Stop (Seconds (stopTime - 1));
 
   // Create a packet sink to receive these packets
   PacketSinkHelper sink ("ns3::UdpSocketFactory", 
                          InetSocketAddress (Ipv4Address::GetAny (), port));
   apps = sink.Install (appSink);
-  apps.Start (Seconds (3.0));
+  apps.Start (Seconds (3));
 
   /////////////////////////////////////////////////////////////////////////// 
   //                                                                       //
@@ -382,36 +386,31 @@
   /////////////////////////////////////////////////////////////////////////// 
 
   NS_LOG_INFO ("Configure Tracing.");
-  if (enableTracing == true)
-    {
-      CsmaHelper csma;
+  CsmaHelper csma;
 
-      //
-      // Let's set up some ns-2-like ascii traces, using another helper class
-      //
-      AsciiTraceHelper ascii;
-      Ptr<OutputStreamWrapper> stream = ascii.CreateFileStream ("mixed-wireless.tr");
-      wifiPhy.EnableAsciiAll (stream);
-      csma.EnableAsciiAll (stream);
-      internet.EnableAsciiIpv4All (stream);
-
-      // Let's do a pcap trace on the application source and sink, ifIndex 0
-      // Csma captures in non-promiscuous mode
-#if 0
-      csma.EnablePcap ("mixed-wireless", appSource->GetId (), 0, false);
-#else
-      csma.EnablePcapAll ("mixed-wireless", false);
-#endif
-      wifiPhy.EnablePcap ("mixed-wireless", appSink->GetId (), 0);
-      wifiPhy.EnablePcap ("mixed-wireless", 9, 2);
-      wifiPhy.EnablePcap ("mixed-wireless", 9, 0);
-    }
+  //
+  // Let's set up some ns-2-like ascii traces, using another helper class
+  //
+  AsciiTraceHelper ascii;
+  Ptr<OutputStreamWrapper> stream = ascii.CreateFileStream ("mixed-wireless.tr");
+  wifiPhy.EnableAsciiAll (stream);
+  csma.EnableAsciiAll (stream);
+  internet.EnableAsciiIpv4All (stream);
+
+  // Csma captures in non-promiscuous mode
+  csma.EnablePcapAll ("mixed-wireless", false);
+  // pcap captures on the backbone wifi devices
+  wifiPhy.EnablePcap ("mixed-wireless", backboneDevices, false);
+  // pcap trace on the application data sink
+  wifiPhy.EnablePcap ("mixed-wireless", appSink->GetId (), 0);
 
   if (useCourseChangeCallback == true)
     {
       Config::Connect ("/NodeList/*/$ns3::MobilityModel/CourseChange", MakeCallback (&CourseChangeCallback));
     }
 
+  AnimationInterface anim ("mixed-wireless.xml");
+
   /////////////////////////////////////////////////////////////////////////// 
   //                                                                       //
   // Run simulation                                                        //
diff -Naur ns-3.19/examples/wireless/mixed-wireless.py ns-3.20/examples/wireless/mixed-wireless.py
--- ns-3.19/examples/wireless/mixed-wireless.py	2014-06-17 10:34:00.400636955 -0700
+++ ns-3.20/examples/wireless/mixed-wireless.py	2014-06-17 10:33:13.731997212 -0700
@@ -76,16 +76,16 @@
     #  simulation parameters.
     # 
     backboneNodes = 10
-    infraNodes = 5
-    lanNodes = 5
-    stopTime = 10
+    infraNodes = 2 
+    lanNodes = 2
+    stopTime = 20
 
     # 
     #  Simulation defaults are typically set next, before command line
     #  arguments are parsed.
     # 
-    ns.core.Config.SetDefault("ns3::OnOffApplication::PacketSize", ns.core.StringValue("210"))
-    ns.core.Config.SetDefault("ns3::OnOffApplication::DataRate", ns.core.StringValue("448kb/s"))
+    ns.core.Config.SetDefault("ns3::OnOffApplication::PacketSize", ns.core.StringValue("1472"))
+    ns.core.Config.SetDefault("ns3::OnOffApplication::DataRate", ns.core.StringValue("100kb/s"))
 
     # 
     #  For convenience, we add the local variables to the command line argument
@@ -93,10 +93,10 @@
     #  "--backboneNodes=20"
     # 
     cmd = ns.core.CommandLine()
-    #cmd.AddValue("backboneNodes", "number of backbone nodes", backboneNodes)
-    #cmd.AddValue("infraNodes", "number of leaf nodes", infraNodes)
-    #cmd.AddValue("lanNodes", "number of LAN nodes", lanNodes)
-    #cmd.AddValue("stopTime", "simulation stop time(seconds)", stopTime)
+    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))
 
     # 
     #  The system global variables and the local values added to the argument
@@ -104,6 +104,9 @@
     # 
     cmd.Parse(argv)
 
+    if (stopTime < 10):
+        print "Use a simulation stop time >= 10 seconds"
+        exit(1)
     # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # / 
     #                                                                        # 
     #  Construct the backbone                                                # 
@@ -138,7 +141,7 @@
     internet.SetRoutingHelper(olsr); # has effect on the next Install ()
     internet.Install(backbone);
     # re-initialize for non-olsr routing.
-    internet.Reset()
+    # internet.Reset()
     # 
     #  Assign IPv4 addresses to the device drivers(actually to the associated
     #  IPv4 interfaces) we just created.
@@ -152,15 +155,16 @@
     #  each of the nodes we just finished building.  
     # 
     mobility = ns.mobility.MobilityHelper()
-    positionAlloc = ns.mobility.ListPositionAllocator()
-    x = 0.0
-    for i in range(backboneNodes):
-        positionAlloc.Add(ns.core.Vector(x, 0.0, 0.0))
-        x += 5.0
-    mobility.SetPositionAllocator(positionAlloc)
+    mobility.SetPositionAllocator("ns3::GridPositionAllocator",
+                                  "MinX", ns.core.DoubleValue(20.0),
+                                  "MinY", ns.core.DoubleValue(20.0),
+                                  "DeltaX", ns.core.DoubleValue(20.0),
+                                  "DeltaY", ns.core.DoubleValue(20.0),
+                                  "GridWidth", ns.core.UintegerValue(5),
+                                  "LayoutType", ns.core.StringValue("RowFirst"))
     mobility.SetMobilityModel("ns3::RandomDirection2dMobilityModel",
-                               "Bounds", ns.mobility.RectangleValue(ns.mobility.Rectangle(0, 1000, 0, 1000)),
-                               "Speed", ns.core.StringValue ("ns3::ConstantRandomVariable[Constant=2000]"),
+                               "Bounds", ns.mobility.RectangleValue(ns.mobility.Rectangle(-500, 500, -500, 500)),
+                               "Speed", ns.core.StringValue ("ns3::ConstantRandomVariable[Constant=2]"),
                                "Pause", ns.core.StringValue ("ns3::ConstantRandomVariable[Constant=0.2]"))
     mobility.Install(backbone)
 
@@ -207,6 +211,19 @@
         #  network mask initialized above
         # 
         ipAddrs.NewNetwork()
+        #
+        # The new LAN nodes need a mobility model so we aggregate one
+        # to each of the nodes we just finished building.
+        #
+        mobilityLan = ns.mobility.MobilityHelper() 
+        positionAlloc = ns.mobility.ListPositionAllocator()
+        for j in range(newLanNodes.GetN()):
+            positionAlloc.Add(ns.core.Vector(0.0, (j*10 + 10), 0.0))
+
+        mobilityLan.SetPositionAllocator(positionAlloc)
+        mobilityLan.PushReferenceMobilityModel(backbone.Get(i))
+        mobilityLan.SetMobilityModel("ns3::ConstantPositionMobilityModel")
+        mobilityLan.Install(newLanNodes);
 
     # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # / 
     #                                                                        # 
@@ -276,10 +293,10 @@
         mobility.PushReferenceMobilityModel(backbone.Get(i))
         mobility.SetPositionAllocator(subnetAlloc)
         mobility.SetMobilityModel("ns3::RandomDirection2dMobilityModel",
-                                  "Bounds", ns.mobility.RectangleValue(ns.mobility.Rectangle(-25, 25, -25, 25)),
-                                  "Speed", ns.core.StringValue ("ns3::ConstantRandomVariable[Constant=30]"),
+                                  "Bounds", ns.mobility.RectangleValue(ns.mobility.Rectangle(-10, 10, -10, 10)),
+                                  "Speed", ns.core.StringValue ("ns3::ConstantRandomVariable[Constant=3]"),
                                   "Pause", ns.core.StringValue ("ns3::ConstantRandomVariable[Constant=0.4]"))
-        mobility.Install(infra)
+        mobility.Install(stas)
 
     # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # / 
     #                                                                        # 
@@ -292,25 +309,23 @@
     print "Create Applications."
     port = 9   #  Discard port(RFC 863)
 
-    #  Let's make sure that the user does not define too few LAN nodes
-    #  to make this example work.  We need lanNodes >= 5
-    assert(lanNodes >= 5)
-    appSource = ns.network.NodeList.GetNode(11)
-    appSink = ns.network.NodeList.GetNode(13)
-    remoteAddr = ns.network.Ipv4Address("172.16.0.5")
+    appSource = ns.network.NodeList.GetNode(backboneNodes)
+    lastNodeIndex = backboneNodes + backboneNodes*(lanNodes - 1) + backboneNodes*(infraNodes - 1) - 1
+    appSink = ns.network.NodeList.GetNode(lastNodeIndex)
+    # Let's fetch the IP address of the last node, which is on Ipv4Interface 1
+    remoteAddr = appSink.GetObject(ns.internet.Ipv4.GetTypeId()).GetAddress(1,0).GetLocal()
 
     onoff = ns.applications.OnOffHelper("ns3::UdpSocketFactory", 
                             ns.network.Address(ns.network.InetSocketAddress(remoteAddr, port)))
-    onoff.SetConstantRate (ns.network.DataRate ("10kb/s"))
     apps = onoff.Install(ns.network.NodeContainer(appSource))
-    apps.Start(ns.core.Seconds(3.0))
-    apps.Stop(ns.core.Seconds(20.0))
+    apps.Start(ns.core.Seconds(3))
+    apps.Stop(ns.core.Seconds(stopTime - 1))
 
     #  Create a packet sink to receive these packets
     sink = ns.applications.PacketSinkHelper("ns3::UdpSocketFactory", 
                                 ns.network.InetSocketAddress(ns.network.Ipv4Address.GetAny(), port))
     apps = sink.Install(ns.network.NodeContainer(appSink))
-    apps.Start(ns.core.Seconds(3.0))
+    apps.Start(ns.core.Seconds(3))
 
     # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # / 
     #                                                                        # 
@@ -319,24 +334,21 @@
     # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # / 
 
     print "Configure Tracing."
+    csma = ns.csma.CsmaHelper()
     # 
     #  Let's set up some ns-2-like ascii traces, using another helper class
     # 
-    #std.ofstream ascii
-    #ascii = ns.core.AsciiTraceHelper();
-    #stream = ascii.CreateFileStream("mixed-wireless.tr");
-    #wifiPhy.EnableAsciiAll(stream);
-    #csma.EnableAsciiAll(stream);
-    print "(tracing not done for Python)"
-    #  Look at nodes 11, 13 only
-    # WifiHelper.EnableAscii(ascii, 11, 0); 
-    # WifiHelper.EnableAscii(ascii, 13, 0); 
+    ascii = ns.network.AsciiTraceHelper();
+    stream = ascii.CreateFileStream("mixed-wireless.tr");
+    wifiPhy.EnableAsciiAll(stream);
+    csma.EnableAsciiAll(stream);
+    internet.EnableAsciiIpv4All(stream);
 
+    #  Csma captures in non-promiscuous mode
+    csma.EnablePcapAll("mixed-wireless", False)
     #  Let's do a pcap trace on the backbone devices
     wifiPhy.EnablePcap("mixed-wireless", backboneDevices)
-    #  Let's additionally trace the application Sink, ifIndex 0
-    csma = ns.csma.CsmaHelper()
-    csma.EnablePcapAll("mixed-wireless", False)
+    wifiPhy.EnablePcap("mixed-wireless", appSink.GetId(), 0)
 
 #   #ifdef ENABLE_FOR_TRACING_EXAMPLE
 #     Config.Connect("/NodeList/*/$MobilityModel/CourseChange",
diff -Naur ns-3.19/examples/wireless/multirate.cc ns-3.20/examples/wireless/multirate.cc
--- ns-3.19/examples/wireless/multirate.cc	2014-06-17 10:34:00.401636947 -0700
+++ ns-3.20/examples/wireless/multirate.cc	2014-06-17 10:33:13.732997204 -0700
@@ -508,12 +508,11 @@
       phy.EnableAsciiAll (ascii.CreateFileStream (GetOutputFileName () + ".tr"));
     }
 
-  Ptr<FlowMonitor> flowmon;
   FlowMonitorHelper flowmonHelper;
 
   if (enableFlowMon)
     {
-      flowmon = flowmonHelper.InstallAll ();
+      flowmonHelper.InstallAll ();
     }
 
   Simulator::Stop (Seconds (totalTime));
@@ -521,7 +520,7 @@
 
   if (enableFlowMon)
     {
-      flowmon->SerializeToXmlFile ((GetOutputFileName () + ".flomon"), false, false);
+      flowmonHelper.SerializeToXmlFile ((GetOutputFileName () + ".flomon"), false, false);
     }
 
   Simulator::Destroy ();
diff -Naur ns-3.19/examples/wireless/waf ns-3.20/examples/wireless/waf
--- ns-3.19/examples/wireless/waf	2014-06-17 10:34:00.402636940 -0700
+++ ns-3.20/examples/wireless/waf	1969-12-31 16:00:00.000000000 -0800
@@ -1 +0,0 @@
-exec "`dirname "$0"`"/../../waf "$@"
diff -Naur ns-3.19/examples/wireless/wscript ns-3.20/examples/wireless/wscript
--- ns-3.19/examples/wireless/wscript	2014-06-17 10:34:00.408636893 -0700
+++ ns-3.20/examples/wireless/wscript	2014-06-17 10:33:13.739997150 -0700
@@ -2,7 +2,7 @@
 
 def build(bld):
     obj = bld.create_ns3_program('mixed-wireless', ['core', 'mobility', 'wifi', 'applications', 'point-to-point', 
-                                                    'internet', 'csma', 'olsr'])
+                                                    'internet', 'csma', 'olsr', 'netanim'])
     obj.source = 'mixed-wireless.cc'
 
     bld.register_ns3_script('mixed-wireless.py', ['core', 'mobility', 'wifi', 'applications', 'point-to-point', 
diff -Naur ns-3.19/.hgignore ns-3.20/.hgignore
--- ns-3.19/.hgignore	2014-06-17 10:34:00.259638043 -0700
+++ ns-3.20/.hgignore	2014-06-17 10:33:13.606998177 -0700
@@ -42,5 +42,7 @@
 \.plt$
 \#[^\#/]+\#$
 ^coverity
+^(D|U)l[A-Z][a-z]*Stats.txt$
 syntax: glob
 TAGS
+waf
diff -Naur ns-3.19/.hgtags ns-3.20/.hgtags
--- ns-3.19/.hgtags	2014-06-17 10:34:00.261638028 -0700
+++ ns-3.20/.hgtags	2014-06-17 10:33:13.608998161 -0700
@@ -66,4 +66,5 @@
 49d343e55caec257bb01e400eef6c14522f37e1b ns-3.16
 b4a70b99171ade6e9628a87780994238950a1df1 ns-3.17
 cfbc9491d7e7c9d346cc042fd35b8afb8836e81f ns-3.18
-a831982d3190a1ff8d4be3c36befc2abf78a6009 ns-3.19
+322102df792e2be6c74df74f776b3470fb1db795 ns-3.19
+0430f8ab48f8177999b5203700dfb0edca1e2056 ns-3.20
diff -Naur ns-3.19/RELEASE_NOTES ns-3.20/RELEASE_NOTES
--- ns-3.19/RELEASE_NOTES	2014-06-17 10:34:00.276637912 -0700
+++ ns-3.20/RELEASE_NOTES	2014-06-17 10:33:13.624998038 -0700
@@ -9,6 +9,115 @@
 Consult the file CHANGES.html for more detailed information about changed
 API and behavior across ns-3 releases.
 
+Release 3.20
+=============
+
+Availability
+------------
+This release is available from:
+http://www.nsnam.org/release/ns-allinone-3.20.tar.bz2
+
+Supported platforms
+-------------------
+- Fedora Core 20 (32/64 bit) with g++-4.8.2
+- Ubuntu 14.04 (32/64 bit) with g++-4.8.2
+- Ubuntu 12.04.4 (64 bit) with g++-4.6.3
+- Ubuntu 10.04.4 LTS (64 bit) with g++-4.4.3
+- CentOS/RHEL 6.5 (64-bit) with g++-4.4.7
+- OS X Mavericks 10.9 with Xcode 5.1.1 and clang-503.0.40
+- FreeBSD 9.2-RELEASE (64 bit) with clang-3.3
+
+New user-visible features
+-------------------------
+
+- A new LrWpan model, providing initial support for IEEE 802.15.4 networks
+- A new IPv6 routing protocol has been added: RIPng. This protocol is
+  an Interior Gateway Protocol and it is available in the Internet module.
+- A new LTE MAC downlink scheduling algorithm named Channel and QoS Aware (CQA) 
+  Scheduler is provided by the new ``ns3::CqaFfMacScheduler`` object.
+- The Internet FlowMonitor can now track IPv6 packets.
+- FlowMonitor no longer tracks multicast/broadcast packets, reflecting
+  its original design.
+- FlowMonitor "SerializeToXml" functions are now directly available 
+  from the helper.
+- The SixLowPan model can now use uncompressed IPv6 headers. An option to
+  define the minimum compressed packet size has been added. 
+- Simplify output of Times in a specific unit; see Time::As ()
+- Ipv6Extension::m_dropTrace has been removed. Ipv6L3Protocol::m_dropTrace 
+  is now fired when appropriate.
+- IPv4 identification field value is now dependent on the protocol field.
+- Fixes to support Python >= 3.3 in ns3 Python bindings
+- Enable selection of high precision int64x64_t implementation
+  at configure time, for debugging purposes.
+
+Bugs fixed
+----------
+- Bug 1276 - optimize NistErrorRateModel
+- Bug 1294 - New PeekU8 () and Read (Buffer::Iterator start, uint32_t size) methods in Buffer::Iterator
+- Bug 1443 - MinDistance replaced by MinLoss in FriisPropagationLossModel, to
+  better handle conditions outside of the assumed far field region.
+- Bug 1653 - Extension of CommandLine interface: restored operator << (CommandLine)
+- Bug 1717 - Detect unsettable attributes
+- Bug 1730 - no model library documentation for spectrum module
+- Bug 1739 - The endpoint is not deallocated for UDP sockets
+- Bug 1786 - os << int64x64_t prints un-normalized fractional values
+- Bug 1787 - Runtime error when using AnimationInterface::EnablePacketMetadata() to fetch metadata of CSMA packet
+- Bug 1792 - Parameter logger constructor
+- Bug 1808 - FlowMon relies on IPv4's Identification field to trace packets
+- Bug 1817 - IPv4 Identification field should consider protocol as well.
+- Bug 1818 - FlowMonitor needs IPv6 support
+- Bug 1820 - models library doc: make should not rm -rf figures
+- Bug 1821 - Setting an interface to Down state will cause various asserts in IPv6
+- Bug 1829 - Multiple TCP socket entries
+- Bug 1837 - AODV crashes when using multiple interfaces
+- Bug 1838 - FlowMonitorHelper must not be copied.
+- Bug 1841 - FlowMonitor fails to install if IPv4 is not installed in the node
+- Bug 1842 - FlowMonitor SerializeToXml<Something> should be called by the helper
+- Bug 1843 - IPv6 extensions dropped packets do not fire L3 drop trace
+- Bug 1845 - FlowMonitor should discard any broadcast/multicast packet
+- Bug 1846 - IPv6 should send Destination Unreachable if no route is available
+- Bug 1850 - TCP NewReno loss behavior
+- Bug 1852 - cairo-wideint-private.h error cannot find definitions for fixed-width integral types
+- Bug 1853 - NS_LOG_FUNCTION broken on OSX 10.9
+- Bug 1855 - SixLowPanNetDevice is not correctly indexed
+- Bug 1857 - Detect location of installed boost libraries
+- Bug 1862 - NS_LOG="Time=*|prefix_time" causes stack overflow
+- Bug 1868 - Optimized builds are sensitive to -fstrict-overflow
+- Bug 1870 - Remove unnecessary AsInt functions
+- Bug 1872 - Inside RREQ processing, in case of IP duplication, packet dropped instead of being forwarded
+- Bug 1873 - Energy source checked to be aggregated to the node
+- Bug 1874 - Ipv4L3Protocol::ProcessFragment: addressCombination and idProto identifiers not properly computed
+- Bug 1876 - enable OLSR HNA table access
+- Bug 1877 - constructors missing for PropagationLossModels
+- Bug 1882 - int64x64 tests trigger valgrind bug
+- Bug 1883 - IPv6 don't consider the prefix and network when choosing output address
+- Bug 1885 - WifiSpectrumValue5MhzFactory::CreateRfFilter does not align with the used 5Mhz SpectrumModel
+- Bug 1887 - Point-to-point traces should contain PPP headers
+- Bug 1888 - COST231 propagation loss model: corrections
+- Bug 1889 - PointToPointNetDevice: In some cases MacTxDrop trace is not called
+- Bug 1890 - UdpClientTrace: MPEG frame size is squeezed into (insufficient) 16 bit integer
+- Bug 1891 - UdpSocketImpl::GetSockName doesn't return the IPv6 address
+- Bug 1894 - CqaFfMacScheduler needs an update
+- Bug 1895 - IP header Source Address changed while forwarding RREQ
+- Bug 1900 - Avoid floating point differences across platforms in test outputs
+- Bug 1903 - Namespace usage in olsr-state.cc/h
+- Bug 1907 - Add IsSupportedMcs method in YansWifiPhy
+- Bug 1912 - Avoid multiple Wifi MacTxMiddle instances
+- Bug 1913 - Avoid crash in Wifi BlockAckManager::GetNextPacket()
+- Bug 1915 - BRITE channel delay is rounded to an integer
+- Bug 1916 - RandomWalk2dMobilityMode default "Bounds" attribute is not a rectangle
+- Bug 1919 - Strip trailing semi-colons from mobility trace files
+- Bug 1920 - Remove DSR attributes so file can be re-loaded by config-store
+- Bug 1922 - WAVE GetSsid should not be fatal
+- Bug 1923 - Setting Active Probing to false in Wifi Sta has no effect
+- Bug 1924 - sensing radius and CCA
+
+Known issues
+------------
+- Bug 1770 - The mesh module will crash if used for g++ version >= 4.8.1
+in optimized mode, on a 32-bit Linux machine.  Lowering the optimization
+level to -O1 in this case can be used as a workaround.
+
 Release 3.19
 =============
 
@@ -115,6 +224,7 @@
 - Bug 1814 - IPv6 Packet with length not multiple of 8 bytes are fragmented incorrectly.
 - Bug 1815 - Python bindings compilation with clang compiler toolchain
 - Bug 1816 - IPv4 fragmentation loses Packet tags
+- Bug 1877 - constructor missing for <something>PropagationLossModels
 
 Release 3.18.2
 ==============
diff -Naur ns-3.19/src/antenna/bindings/modulegen__gcc_ILP32.py ns-3.20/src/antenna/bindings/modulegen__gcc_ILP32.py
--- ns-3.19/src/antenna/bindings/modulegen__gcc_ILP32.py	2014-06-17 10:34:00.411636870 -0700
+++ ns-3.20/src/antenna/bindings/modulegen__gcc_ILP32.py	2014-06-17 10:33:13.741997135 -0700
@@ -102,17 +102,17 @@
     module.add_class('Vector3DChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## vector.h (module 'core'): ns3::Vector3DValue [class]
     module.add_class('Vector3DValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
-    typehandlers.add_type_alias('ns3::Vector3D', 'ns3::Vector')
-    typehandlers.add_type_alias('ns3::Vector3D*', 'ns3::Vector*')
-    typehandlers.add_type_alias('ns3::Vector3D&', 'ns3::Vector&')
+    typehandlers.add_type_alias(u'ns3::Vector3D', u'ns3::Vector')
+    typehandlers.add_type_alias(u'ns3::Vector3D*', u'ns3::Vector*')
+    typehandlers.add_type_alias(u'ns3::Vector3D&', u'ns3::Vector&')
     module.add_typedef(root_module['ns3::Vector3D'], 'Vector')
-    typehandlers.add_type_alias('ns3::Vector3DValue', 'ns3::VectorValue')
-    typehandlers.add_type_alias('ns3::Vector3DValue*', 'ns3::VectorValue*')
-    typehandlers.add_type_alias('ns3::Vector3DValue&', 'ns3::VectorValue&')
+    typehandlers.add_type_alias(u'ns3::Vector3DValue', u'ns3::VectorValue')
+    typehandlers.add_type_alias(u'ns3::Vector3DValue*', u'ns3::VectorValue*')
+    typehandlers.add_type_alias(u'ns3::Vector3DValue&', u'ns3::VectorValue&')
     module.add_typedef(root_module['ns3::Vector3DValue'], 'VectorValue')
-    typehandlers.add_type_alias('ns3::Vector3DChecker', 'ns3::VectorChecker')
-    typehandlers.add_type_alias('ns3::Vector3DChecker*', 'ns3::VectorChecker*')
-    typehandlers.add_type_alias('ns3::Vector3DChecker&', 'ns3::VectorChecker&')
+    typehandlers.add_type_alias(u'ns3::Vector3DChecker', u'ns3::VectorChecker')
+    typehandlers.add_type_alias(u'ns3::Vector3DChecker*', u'ns3::VectorChecker*')
+    typehandlers.add_type_alias(u'ns3::Vector3DChecker&', u'ns3::VectorChecker&')
     module.add_typedef(root_module['ns3::Vector3DChecker'], 'VectorChecker')
     
     ## Register a nested module for the namespace FatalImpl
@@ -136,12 +136,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
     
diff -Naur ns-3.19/src/antenna/bindings/modulegen__gcc_LP64.py ns-3.20/src/antenna/bindings/modulegen__gcc_LP64.py
--- ns-3.19/src/antenna/bindings/modulegen__gcc_LP64.py	2014-06-17 10:34:00.412636862 -0700
+++ ns-3.20/src/antenna/bindings/modulegen__gcc_LP64.py	2014-06-17 10:33:13.742997127 -0700
@@ -102,17 +102,17 @@
     module.add_class('Vector3DChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## vector.h (module 'core'): ns3::Vector3DValue [class]
     module.add_class('Vector3DValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
-    typehandlers.add_type_alias('ns3::Vector3D', 'ns3::Vector')
-    typehandlers.add_type_alias('ns3::Vector3D*', 'ns3::Vector*')
-    typehandlers.add_type_alias('ns3::Vector3D&', 'ns3::Vector&')
+    typehandlers.add_type_alias(u'ns3::Vector3D', u'ns3::Vector')
+    typehandlers.add_type_alias(u'ns3::Vector3D*', u'ns3::Vector*')
+    typehandlers.add_type_alias(u'ns3::Vector3D&', u'ns3::Vector&')
     module.add_typedef(root_module['ns3::Vector3D'], 'Vector')
-    typehandlers.add_type_alias('ns3::Vector3DValue', 'ns3::VectorValue')
-    typehandlers.add_type_alias('ns3::Vector3DValue*', 'ns3::VectorValue*')
-    typehandlers.add_type_alias('ns3::Vector3DValue&', 'ns3::VectorValue&')
+    typehandlers.add_type_alias(u'ns3::Vector3DValue', u'ns3::VectorValue')
+    typehandlers.add_type_alias(u'ns3::Vector3DValue*', u'ns3::VectorValue*')
+    typehandlers.add_type_alias(u'ns3::Vector3DValue&', u'ns3::VectorValue&')
     module.add_typedef(root_module['ns3::Vector3DValue'], 'VectorValue')
-    typehandlers.add_type_alias('ns3::Vector3DChecker', 'ns3::VectorChecker')
-    typehandlers.add_type_alias('ns3::Vector3DChecker*', 'ns3::VectorChecker*')
-    typehandlers.add_type_alias('ns3::Vector3DChecker&', 'ns3::VectorChecker&')
+    typehandlers.add_type_alias(u'ns3::Vector3DChecker', u'ns3::VectorChecker')
+    typehandlers.add_type_alias(u'ns3::Vector3DChecker*', u'ns3::VectorChecker*')
+    typehandlers.add_type_alias(u'ns3::Vector3DChecker&', u'ns3::VectorChecker&')
     module.add_typedef(root_module['ns3::Vector3DChecker'], 'VectorChecker')
     
     ## Register a nested module for the namespace FatalImpl
@@ -136,12 +136,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
     
diff -Naur ns-3.19/src/antenna/model/antenna-model.cc ns-3.20/src/antenna/model/antenna-model.cc
--- ns-3.19/src/antenna/model/antenna-model.cc	2014-06-17 10:34:00.416636831 -0700
+++ ns-3.20/src/antenna/model/antenna-model.cc	2014-06-17 10:33:13.746997096 -0700
@@ -28,8 +28,7 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (AntennaModel)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (AntennaModel);
 
 
 AntennaModel::AntennaModel ()
diff -Naur ns-3.19/src/antenna/model/cosine-antenna-model.cc ns-3.20/src/antenna/model/cosine-antenna-model.cc
--- ns-3.19/src/antenna/model/cosine-antenna-model.cc	2014-06-17 10:34:00.417636824 -0700
+++ ns-3.20/src/antenna/model/cosine-antenna-model.cc	2014-06-17 10:33:13.747997088 -0700
@@ -31,8 +31,7 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (CosineAntennaModel)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (CosineAntennaModel);
 
 
 TypeId 
diff -Naur ns-3.19/src/antenna/model/isotropic-antenna-model.cc ns-3.20/src/antenna/model/isotropic-antenna-model.cc
--- ns-3.19/src/antenna/model/isotropic-antenna-model.cc	2014-06-17 10:34:00.418636816 -0700
+++ ns-3.20/src/antenna/model/isotropic-antenna-model.cc	2014-06-17 10:33:13.748997081 -0700
@@ -29,8 +29,7 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (IsotropicAntennaModel)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (IsotropicAntennaModel);
 
 
 TypeId 
diff -Naur ns-3.19/src/antenna/model/parabolic-antenna-model.cc ns-3.20/src/antenna/model/parabolic-antenna-model.cc
--- ns-3.19/src/antenna/model/parabolic-antenna-model.cc	2014-06-17 10:34:00.419636808 -0700
+++ ns-3.20/src/antenna/model/parabolic-antenna-model.cc	2014-06-17 10:33:13.748997081 -0700
@@ -31,8 +31,7 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (ParabolicAntennaModel)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (ParabolicAntennaModel);
 
 
 TypeId 
diff -Naur ns-3.19/src/antenna/test/test-angles.cc ns-3.20/src/antenna/test/test-angles.cc
--- ns-3.19/src/antenna/test/test-angles.cc	2014-06-17 10:34:00.419636808 -0700
+++ ns-3.20/src/antenna/test/test-angles.cc	2014-06-17 10:33:13.749997073 -0700
@@ -26,7 +26,7 @@
 #include <iostream>
 #include <sstream>
 
-namespace ns3 {
+using namespace ns3;
 
 class OneVectorConstructorTestCase : public TestCase
 {
@@ -209,8 +209,3 @@
 };
 
 static AnglesTestSuite staticAnglesTestSuiteInstance;
-
-
-
-
-} // namespace ns3
diff -Naur ns-3.19/src/antenna/test/test-cosine-antenna.cc ns-3.20/src/antenna/test/test-cosine-antenna.cc
--- ns-3.19/src/antenna/test/test-cosine-antenna.cc	2014-06-17 10:34:00.420636800 -0700
+++ ns-3.20/src/antenna/test/test-cosine-antenna.cc	2014-06-17 10:33:13.750997065 -0700
@@ -31,7 +31,7 @@
 
 NS_LOG_COMPONENT_DEFINE ("TestCosineAntennaModel");
 
-namespace ns3 {
+using namespace ns3;
 
 enum CosineAntennaModelGainTestCondition  {
   EQUAL = 0,
@@ -204,8 +204,3 @@
 };
 
 static CosineAntennaModelTestSuite staticCosineAntennaModelTestSuiteInstance;
-
-
-
-
-} // namespace ns3
diff -Naur ns-3.19/src/antenna/test/test-degrees-radians.cc ns-3.20/src/antenna/test/test-degrees-radians.cc
--- ns-3.19/src/antenna/test/test-degrees-radians.cc	2014-06-17 10:34:00.420636800 -0700
+++ ns-3.20/src/antenna/test/test-degrees-radians.cc	2014-06-17 10:33:13.750997065 -0700
@@ -26,7 +26,7 @@
 #include <iostream>
 #include <sstream>
 
-namespace ns3 {
+using namespace ns3;
 
 class DegreesToRadiansTestCase : public TestCase
 {
@@ -132,8 +132,3 @@
 };
 
 static DegreesRadiansTestSuite staticDegreesRadiansTestSuiteInstance;
-
-
-
-
-} // namespace ns3
diff -Naur ns-3.19/src/antenna/test/test-isotropic-antenna.cc ns-3.20/src/antenna/test/test-isotropic-antenna.cc
--- ns-3.19/src/antenna/test/test-isotropic-antenna.cc	2014-06-17 10:34:00.421636793 -0700
+++ ns-3.20/src/antenna/test/test-isotropic-antenna.cc	2014-06-17 10:33:13.750997065 -0700
@@ -26,7 +26,7 @@
 #include <iostream>
 #include <sstream>
 
-namespace ns3 {
+using namespace ns3;
 
 class IsotropicAntennaModelTestCase : public TestCase
 {
@@ -90,8 +90,3 @@
 };
 
 static IsotropicAntennaModelTestSuite staticIsotropicAntennaModelTestSuiteInstance;
-
-
-
-
-} // namespace ns3
diff -Naur ns-3.19/src/antenna/test/test-parabolic-antenna.cc ns-3.20/src/antenna/test/test-parabolic-antenna.cc
--- ns-3.19/src/antenna/test/test-parabolic-antenna.cc	2014-06-17 10:34:00.421636793 -0700
+++ ns-3.20/src/antenna/test/test-parabolic-antenna.cc	2014-06-17 10:33:13.751997058 -0700
@@ -31,7 +31,7 @@
 
 NS_LOG_COMPONENT_DEFINE ("TestParabolicAntennaModel");
 
-namespace ns3 {
+using namespace ns3;
 
 enum ParabolicAntennaModelGainTestCondition  {
   EQUAL = 0,
@@ -183,8 +183,3 @@
 };
 
 static ParabolicAntennaModelTestSuite staticParabolicAntennaModelTestSuiteInstance;
-
-
-
-
-} // namespace ns3
diff -Naur ns-3.19/src/aodv/bindings/modulegen__gcc_ILP32.py ns-3.20/src/aodv/bindings/modulegen__gcc_ILP32.py
--- ns-3.19/src/aodv/bindings/modulegen__gcc_ILP32.py	2014-06-17 10:34:00.428636739 -0700
+++ ns-3.20/src/aodv/bindings/modulegen__gcc_ILP32.py	2014-06-17 10:33:13.757997011 -0700
@@ -102,12 +102,6 @@
     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-interface-address.h (module 'internet'): ns3::Ipv6InterfaceAddress [class]
-    module.add_class('Ipv6InterfaceAddress', import_from_module='ns.internet')
-    ## ipv6-interface-address.h (module 'internet'): ns3::Ipv6InterfaceAddress::State_e [enumeration]
-    module.add_enum('State_e', ['TENTATIVE', 'DEPRECATED', 'PREFERRED', 'PERMANENT', 'HOMEADDRESS', 'TENTATIVE_OPTIMISTIC', 'INVALID'], outer_class=root_module['ns3::Ipv6InterfaceAddress'], import_from_module='ns.internet')
-    ## ipv6-interface-address.h (module 'internet'): ns3::Ipv6InterfaceAddress::Scope_e [enumeration]
-    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]
@@ -148,6 +142,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')
     ## timer.h (module 'core'): ns3::Timer [class]
     module.add_class('Timer', import_from_module='ns.core')
     ## timer.h (module 'core'): ns3::Timer::DestroyPolicy [enumeration]
@@ -168,6 +164,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')
     ## aodv-helper.h (module 'aodv'): ns3::AodvHelper [class]
     module.add_class('AodvHelper', parent=root_module['ns3::Ipv4RoutingHelper'])
     ## chunk.h (module 'network'): ns3::Chunk [class]
@@ -180,10 +178,6 @@
     module.add_enum('DscpType', ['DscpDefault', 'DSCP_CS1', 'DSCP_AF11', 'DSCP_AF12', 'DSCP_AF13', 'DSCP_CS2', 'DSCP_AF21', 'DSCP_AF22', 'DSCP_AF23', 'DSCP_CS3', 'DSCP_AF31', 'DSCP_AF32', 'DSCP_AF33', 'DSCP_CS4', 'DSCP_AF41', 'DSCP_AF42', 'DSCP_AF43', 'DSCP_CS5', 'DSCP_EF', 'DSCP_CS6', 'DSCP_CS7'], outer_class=root_module['ns3::Ipv4Header'], import_from_module='ns.internet')
     ## ipv4-header.h (module 'internet'): ns3::Ipv4Header::EcnType [enumeration]
     module.add_enum('EcnType', ['ECN_NotECT', 'ECN_ECT1', 'ECN_ECT0', 'ECN_CE'], outer_class=root_module['ns3::Ipv4Header'], import_from_module='ns.internet')
-    ## ipv6-header.h (module 'internet'): ns3::Ipv6Header [class]
-    module.add_class('Ipv6Header', import_from_module='ns.internet', parent=root_module['ns3::Header'])
-    ## ipv6-header.h (module 'internet'): ns3::Ipv6Header::NextHeader_e [enumeration]
-    module.add_enum('NextHeader_e', ['IPV6_EXT_HOP_BY_HOP', 'IPV6_IPV4', 'IPV6_TCP', 'IPV6_UDP', 'IPV6_IPV6', 'IPV6_EXT_ROUTING', 'IPV6_EXT_FRAGMENTATION', 'IPV6_EXT_CONFIDENTIALITY', 'IPV6_EXT_AUTHENTIFICATION', 'IPV6_ICMPV6', 'IPV6_EXT_END', 'IPV6_EXT_DESTINATION', 'IPV6_SCTP', 'IPV6_EXT_MOBILITY', 'IPV6_UDP_LITE'], outer_class=root_module['ns3::Ipv6Header'], import_from_module='ns.internet')
     ## 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]
@@ -296,10 +290,6 @@
     module.add_class('ExponentialRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
     ## random-variable-stream.h (module 'core'): ns3::GammaRandomVariable [class]
     module.add_class('GammaRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
-    ## ip-l4-protocol.h (module 'internet'): ns3::IpL4Protocol [class]
-    module.add_class('IpL4Protocol', import_from_module='ns.internet', parent=root_module['ns3::Object'])
-    ## ip-l4-protocol.h (module 'internet'): ns3::IpL4Protocol::RxStatus [enumeration]
-    module.add_enum('RxStatus', ['RX_OK', 'RX_CSUM_FAILED', 'RX_ENDPOINT_CLOSED', 'RX_ENDPOINT_UNREACH'], outer_class=root_module['ns3::IpL4Protocol'], import_from_module='ns.internet')
     ## ipv4.h (module 'internet'): ns3::Ipv4 [class]
     module.add_class('Ipv4', import_from_module='ns.internet', parent=root_module['ns3::Object'])
     ## ipv4-address.h (module 'network'): ns3::Ipv4AddressChecker [class]
@@ -326,8 +316,6 @@
     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-interface.h (module 'internet'): ns3::Ipv6Interface [class]
-    module.add_class('Ipv6Interface', import_from_module='ns.internet', parent=root_module['ns3::Object'])
     ## 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]
@@ -370,8 +358,8 @@
     module.add_class('AddressValue', import_from_module='ns.network', parent=root_module['ns3::AttributeValue'])
     ## ipv4-list-routing.h (module 'internet'): ns3::Ipv4ListRouting [class]
     module.add_class('Ipv4ListRouting', import_from_module='ns.internet', parent=root_module['ns3::Ipv4RoutingProtocol'])
-    module.add_container('std::list< ns3::Ptr< ns3::Packet > >', 'ns3::Ptr< ns3::Packet >', container_type='list')
-    module.add_container('std::map< unsigned int, unsigned int >', ('unsigned int', 'unsigned int'), container_type='map')
+    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')
     
     ## Register a nested module for the namespace FatalImpl
     
@@ -400,12 +388,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('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('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(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&')
+    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&')
     
     ## Register a nested module for the namespace Function
     
@@ -460,8 +448,8 @@
     module.add_class('RreqHeader', parent=root_module['ns3::Header'])
     ## aodv-packet.h (module 'aodv'): ns3::aodv::TypeHeader [class]
     module.add_class('TypeHeader', parent=root_module['ns3::Header'])
-    module.add_container('std::map< ns3::Ipv4Address, unsigned int >', ('ns3::Ipv4Address', 'unsigned int'), container_type='map')
-    module.add_container('std::vector< ns3::Ipv4Address >', 'ns3::Ipv4Address', container_type='vector')
+    module.add_container('std::map< ns3::Ipv4Address, unsigned int >', ('ns3::Ipv4Address', 'unsigned int'), container_type=u'map')
+    module.add_container('std::vector< ns3::Ipv4Address >', 'ns3::Ipv4Address', container_type=u'vector')
 
 def register_methods(root_module):
     register_Ns3Address_methods(root_module, root_module['ns3::Address'])
@@ -491,7 +479,6 @@
     register_Ns3Ipv4Mask_methods(root_module, root_module['ns3::Ipv4Mask'])
     register_Ns3Ipv4RoutingHelper_methods(root_module, root_module['ns3::Ipv4RoutingHelper'])
     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'])
@@ -509,6 +496,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_Ns3Timer_methods(root_module, root_module['ns3::Timer'])
     register_Ns3TimerImpl_methods(root_module, root_module['ns3::TimerImpl'])
     register_Ns3TypeId_methods(root_module, root_module['ns3::TypeId'])
@@ -520,7 +508,6 @@
     register_Ns3Chunk_methods(root_module, root_module['ns3::Chunk'])
     register_Ns3Header_methods(root_module, root_module['ns3::Header'])
     register_Ns3Ipv4Header_methods(root_module, root_module['ns3::Ipv4Header'])
-    register_Ns3Ipv6Header_methods(root_module, root_module['ns3::Ipv6Header'])
     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'])
@@ -571,7 +558,6 @@
     register_Ns3EventImpl_methods(root_module, root_module['ns3::EventImpl'])
     register_Ns3ExponentialRandomVariable_methods(root_module, root_module['ns3::ExponentialRandomVariable'])
     register_Ns3GammaRandomVariable_methods(root_module, root_module['ns3::GammaRandomVariable'])
-    register_Ns3IpL4Protocol_methods(root_module, root_module['ns3::IpL4Protocol'])
     register_Ns3Ipv4_methods(root_module, root_module['ns3::Ipv4'])
     register_Ns3Ipv4AddressChecker_methods(root_module, root_module['ns3::Ipv4AddressChecker'])
     register_Ns3Ipv4AddressValue_methods(root_module, root_module['ns3::Ipv4AddressValue'])
@@ -584,7 +570,6 @@
     register_Ns3Ipv4RoutingProtocol_methods(root_module, root_module['ns3::Ipv4RoutingProtocol'])
     register_Ns3Ipv6AddressChecker_methods(root_module, root_module['ns3::Ipv6AddressChecker'])
     register_Ns3Ipv6AddressValue_methods(root_module, root_module['ns3::Ipv6AddressValue'])
-    register_Ns3Ipv6Interface_methods(root_module, root_module['ns3::Ipv6Interface'])
     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'])
@@ -871,6 +856,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', 
@@ -883,6 +872,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', 
@@ -1781,61 +1774,6 @@
                    [param('uint8_t *', 'address')])
     return
 
-def register_Ns3Ipv6InterfaceAddress_methods(root_module, cls):
-    cls.add_binary_comparison_operator('!=')
-    cls.add_output_stream_operator()
-    cls.add_binary_comparison_operator('==')
-    ## ipv6-interface-address.h (module 'internet'): ns3::Ipv6InterfaceAddress::Ipv6InterfaceAddress() [constructor]
-    cls.add_constructor([])
-    ## ipv6-interface-address.h (module 'internet'): ns3::Ipv6InterfaceAddress::Ipv6InterfaceAddress(ns3::Ipv6Address address) [constructor]
-    cls.add_constructor([param('ns3::Ipv6Address', 'address')])
-    ## ipv6-interface-address.h (module 'internet'): ns3::Ipv6InterfaceAddress::Ipv6InterfaceAddress(ns3::Ipv6Address address, ns3::Ipv6Prefix prefix) [constructor]
-    cls.add_constructor([param('ns3::Ipv6Address', 'address'), param('ns3::Ipv6Prefix', 'prefix')])
-    ## ipv6-interface-address.h (module 'internet'): ns3::Ipv6InterfaceAddress::Ipv6InterfaceAddress(ns3::Ipv6InterfaceAddress const & o) [copy constructor]
-    cls.add_constructor([param('ns3::Ipv6InterfaceAddress const &', 'o')])
-    ## ipv6-interface-address.h (module 'internet'): ns3::Ipv6Address ns3::Ipv6InterfaceAddress::GetAddress() const [member function]
-    cls.add_method('GetAddress', 
-                   'ns3::Ipv6Address', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface-address.h (module 'internet'): uint32_t ns3::Ipv6InterfaceAddress::GetNsDadUid() const [member function]
-    cls.add_method('GetNsDadUid', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface-address.h (module 'internet'): ns3::Ipv6Prefix ns3::Ipv6InterfaceAddress::GetPrefix() const [member function]
-    cls.add_method('GetPrefix', 
-                   'ns3::Ipv6Prefix', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface-address.h (module 'internet'): ns3::Ipv6InterfaceAddress::Scope_e ns3::Ipv6InterfaceAddress::GetScope() const [member function]
-    cls.add_method('GetScope', 
-                   'ns3::Ipv6InterfaceAddress::Scope_e', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface-address.h (module 'internet'): ns3::Ipv6InterfaceAddress::State_e ns3::Ipv6InterfaceAddress::GetState() const [member function]
-    cls.add_method('GetState', 
-                   'ns3::Ipv6InterfaceAddress::State_e', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface-address.h (module 'internet'): void ns3::Ipv6InterfaceAddress::SetAddress(ns3::Ipv6Address address) [member function]
-    cls.add_method('SetAddress', 
-                   'void', 
-                   [param('ns3::Ipv6Address', 'address')])
-    ## ipv6-interface-address.h (module 'internet'): void ns3::Ipv6InterfaceAddress::SetNsDadUid(uint32_t uid) [member function]
-    cls.add_method('SetNsDadUid', 
-                   'void', 
-                   [param('uint32_t', 'uid')])
-    ## ipv6-interface-address.h (module 'internet'): void ns3::Ipv6InterfaceAddress::SetScope(ns3::Ipv6InterfaceAddress::Scope_e scope) [member function]
-    cls.add_method('SetScope', 
-                   'void', 
-                   [param('ns3::Ipv6InterfaceAddress::Scope_e', 'scope')])
-    ## ipv6-interface-address.h (module 'internet'): void ns3::Ipv6InterfaceAddress::SetState(ns3::Ipv6InterfaceAddress::State_e state) [member function]
-    cls.add_method('SetState', 
-                   'void', 
-                   [param('ns3::Ipv6InterfaceAddress::State_e', 'state')])
-    return
-
 def register_Ns3Ipv6Prefix_methods(root_module, cls):
     cls.add_binary_comparison_operator('!=')
     cls.add_output_stream_operator()
@@ -2517,6 +2455,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_Ns3Timer_methods(root_module, cls):
     ## timer.h (module 'core'): ns3::Timer::Timer(ns3::Timer const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::Timer const &', 'arg0')])
@@ -2800,61 +2746,17 @@
 def register_Ns3Int64x64_t_methods(root_module, cls):
     cls.add_binary_comparison_operator('<=')
     cls.add_binary_comparison_operator('!=')
-    cls.add_inplace_numeric_operator('+=', 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 &', '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_inplace_numeric_operator('+=', 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_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_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_output_stream_operator()
     cls.add_binary_comparison_operator('==')
     cls.add_binary_comparison_operator('>=')
@@ -2862,6 +2764,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]
@@ -2902,6 +2806,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_Ns3AodvHelper_methods(root_module, cls):
@@ -3156,106 +3062,6 @@
                    [param('uint8_t', 'ttl')])
     return
 
-def register_Ns3Ipv6Header_methods(root_module, cls):
-    ## ipv6-header.h (module 'internet'): ns3::Ipv6Header::Ipv6Header(ns3::Ipv6Header const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::Ipv6Header const &', 'arg0')])
-    ## ipv6-header.h (module 'internet'): ns3::Ipv6Header::Ipv6Header() [constructor]
-    cls.add_constructor([])
-    ## ipv6-header.h (module 'internet'): uint32_t ns3::Ipv6Header::Deserialize(ns3::Buffer::Iterator start) [member function]
-    cls.add_method('Deserialize', 
-                   'uint32_t', 
-                   [param('ns3::Buffer::Iterator', 'start')], 
-                   is_virtual=True)
-    ## ipv6-header.h (module 'internet'): ns3::Ipv6Address ns3::Ipv6Header::GetDestinationAddress() const [member function]
-    cls.add_method('GetDestinationAddress', 
-                   'ns3::Ipv6Address', 
-                   [], 
-                   is_const=True)
-    ## ipv6-header.h (module 'internet'): uint32_t ns3::Ipv6Header::GetFlowLabel() const [member function]
-    cls.add_method('GetFlowLabel', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    ## ipv6-header.h (module 'internet'): uint8_t ns3::Ipv6Header::GetHopLimit() const [member function]
-    cls.add_method('GetHopLimit', 
-                   'uint8_t', 
-                   [], 
-                   is_const=True)
-    ## ipv6-header.h (module 'internet'): ns3::TypeId ns3::Ipv6Header::GetInstanceTypeId() const [member function]
-    cls.add_method('GetInstanceTypeId', 
-                   'ns3::TypeId', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## ipv6-header.h (module 'internet'): uint8_t ns3::Ipv6Header::GetNextHeader() const [member function]
-    cls.add_method('GetNextHeader', 
-                   'uint8_t', 
-                   [], 
-                   is_const=True)
-    ## ipv6-header.h (module 'internet'): uint16_t ns3::Ipv6Header::GetPayloadLength() const [member function]
-    cls.add_method('GetPayloadLength', 
-                   'uint16_t', 
-                   [], 
-                   is_const=True)
-    ## ipv6-header.h (module 'internet'): uint32_t ns3::Ipv6Header::GetSerializedSize() const [member function]
-    cls.add_method('GetSerializedSize', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## ipv6-header.h (module 'internet'): ns3::Ipv6Address ns3::Ipv6Header::GetSourceAddress() const [member function]
-    cls.add_method('GetSourceAddress', 
-                   'ns3::Ipv6Address', 
-                   [], 
-                   is_const=True)
-    ## ipv6-header.h (module 'internet'): uint8_t ns3::Ipv6Header::GetTrafficClass() const [member function]
-    cls.add_method('GetTrafficClass', 
-                   'uint8_t', 
-                   [], 
-                   is_const=True)
-    ## ipv6-header.h (module 'internet'): static ns3::TypeId ns3::Ipv6Header::GetTypeId() [member function]
-    cls.add_method('GetTypeId', 
-                   'ns3::TypeId', 
-                   [], 
-                   is_static=True)
-    ## ipv6-header.h (module 'internet'): void ns3::Ipv6Header::Print(std::ostream & os) const [member function]
-    cls.add_method('Print', 
-                   'void', 
-                   [param('std::ostream &', 'os')], 
-                   is_const=True, is_virtual=True)
-    ## ipv6-header.h (module 'internet'): void ns3::Ipv6Header::Serialize(ns3::Buffer::Iterator start) const [member function]
-    cls.add_method('Serialize', 
-                   'void', 
-                   [param('ns3::Buffer::Iterator', 'start')], 
-                   is_const=True, is_virtual=True)
-    ## ipv6-header.h (module 'internet'): void ns3::Ipv6Header::SetDestinationAddress(ns3::Ipv6Address dst) [member function]
-    cls.add_method('SetDestinationAddress', 
-                   'void', 
-                   [param('ns3::Ipv6Address', 'dst')])
-    ## ipv6-header.h (module 'internet'): void ns3::Ipv6Header::SetFlowLabel(uint32_t flow) [member function]
-    cls.add_method('SetFlowLabel', 
-                   'void', 
-                   [param('uint32_t', 'flow')])
-    ## ipv6-header.h (module 'internet'): void ns3::Ipv6Header::SetHopLimit(uint8_t limit) [member function]
-    cls.add_method('SetHopLimit', 
-                   'void', 
-                   [param('uint8_t', 'limit')])
-    ## ipv6-header.h (module 'internet'): void ns3::Ipv6Header::SetNextHeader(uint8_t next) [member function]
-    cls.add_method('SetNextHeader', 
-                   'void', 
-                   [param('uint8_t', 'next')])
-    ## ipv6-header.h (module 'internet'): void ns3::Ipv6Header::SetPayloadLength(uint16_t len) [member function]
-    cls.add_method('SetPayloadLength', 
-                   'void', 
-                   [param('uint16_t', 'len')])
-    ## ipv6-header.h (module 'internet'): void ns3::Ipv6Header::SetSourceAddress(ns3::Ipv6Address src) [member function]
-    cls.add_method('SetSourceAddress', 
-                   'void', 
-                   [param('ns3::Ipv6Address', 'src')])
-    ## ipv6-header.h (module 'internet'): void ns3::Ipv6Header::SetTrafficClass(uint8_t traffic) [member function]
-    cls.add_method('SetTrafficClass', 
-                   'void', 
-                   [param('uint8_t', 'traffic')])
-    return
-
 def register_Ns3Object_methods(root_module, cls):
     ## object.h (module 'core'): ns3::Object::Object() [constructor]
     cls.add_constructor([])
@@ -4163,12 +3969,14 @@
 def register_Ns3Time_methods(root_module, cls):
     cls.add_binary_comparison_operator('<=')
     cls.add_binary_comparison_operator('!=')
-    cls.add_inplace_numeric_operator('+=', 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('ns3::Time const &', 'right'))
+    cls.add_inplace_numeric_operator('+=', 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_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_inplace_numeric_operator('-=', param('ns3::Time const &', '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('>=')
@@ -4194,6 +4002,11 @@
     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', 
@@ -5647,63 +5460,6 @@
                    is_virtual=True)
     return
 
-def register_Ns3IpL4Protocol_methods(root_module, cls):
-    ## ip-l4-protocol.h (module 'internet'): ns3::IpL4Protocol::IpL4Protocol() [constructor]
-    cls.add_constructor([])
-    ## ip-l4-protocol.h (module 'internet'): ns3::IpL4Protocol::IpL4Protocol(ns3::IpL4Protocol const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::IpL4Protocol const &', 'arg0')])
-    ## ip-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::IpL4Protocol::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 >', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## ip-l4-protocol.h (module 'internet'): 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> ns3::IpL4Protocol::GetDownTarget6() const [member function]
-    cls.add_method('GetDownTarget6', 
-                   '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 >', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## ip-l4-protocol.h (module 'internet'): int ns3::IpL4Protocol::GetProtocolNumber() const [member function]
-    cls.add_method('GetProtocolNumber', 
-                   'int', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## ip-l4-protocol.h (module 'internet'): static ns3::TypeId ns3::IpL4Protocol::GetTypeId() [member function]
-    cls.add_method('GetTypeId', 
-                   'ns3::TypeId', 
-                   [], 
-                   is_static=True)
-    ## ip-l4-protocol.h (module 'internet'): ns3::IpL4Protocol::RxStatus ns3::IpL4Protocol::Receive(ns3::Ptr<ns3::Packet> p, ns3::Ipv4Header const & header, 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')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## ip-l4-protocol.h (module 'internet'): ns3::IpL4Protocol::RxStatus ns3::IpL4Protocol::Receive(ns3::Ptr<ns3::Packet> p, ns3::Ipv6Header const & header, 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')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## ip-l4-protocol.h (module 'internet'): void ns3::IpL4Protocol::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', 
-                   'void', 
-                   [param('ns3::Ipv4Address', 'icmpSource'), param('uint8_t', 'icmpTtl'), param('uint8_t', 'icmpType'), param('uint8_t', 'icmpCode'), param('uint32_t', 'icmpInfo'), param('ns3::Ipv4Address', 'payloadSource'), param('ns3::Ipv4Address', 'payloadDestination'), param('uint8_t const *', 'payload')], 
-                   is_virtual=True)
-    ## ip-l4-protocol.h (module 'internet'): void ns3::IpL4Protocol::ReceiveIcmp(ns3::Ipv6Address icmpSource, uint8_t icmpTtl, uint8_t icmpType, uint8_t icmpCode, uint32_t icmpInfo, ns3::Ipv6Address payloadSource, ns3::Ipv6Address payloadDestination, uint8_t const * payload) [member function]
-    cls.add_method('ReceiveIcmp', 
-                   'void', 
-                   [param('ns3::Ipv6Address', 'icmpSource'), param('uint8_t', 'icmpTtl'), param('uint8_t', 'icmpType'), param('uint8_t', 'icmpCode'), param('uint32_t', 'icmpInfo'), param('ns3::Ipv6Address', 'payloadSource'), param('ns3::Ipv6Address', 'payloadDestination'), param('uint8_t const *', 'payload')], 
-                   is_virtual=True)
-    ## ip-l4-protocol.h (module 'internet'): void ns3::IpL4Protocol::SetDownTarget(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> cb) [member function]
-    cls.add_method('SetDownTarget', 
-                   'void', 
-                   [param('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 >', 'cb')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## ip-l4-protocol.h (module 'internet'): void ns3::IpL4Protocol::SetDownTarget6(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) [member function]
-    cls.add_method('SetDownTarget6', 
-                   '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_pure_virtual=True, is_virtual=True)
-    return
-
 def register_Ns3Ipv4_methods(root_module, cls):
     ## ipv4.h (module 'internet'): ns3::Ipv4::Ipv4(ns3::Ipv4 const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::Ipv4 const &', 'arg0')])
@@ -6127,6 +5883,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', 
@@ -6460,151 +6221,6 @@
                    [param('ns3::Ipv6Address const &', 'value')])
     return
 
-def register_Ns3Ipv6Interface_methods(root_module, cls):
-    ## ipv6-interface.h (module 'internet'): ns3::Ipv6Interface::Ipv6Interface(ns3::Ipv6Interface const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::Ipv6Interface const &', 'arg0')])
-    ## ipv6-interface.h (module 'internet'): ns3::Ipv6Interface::Ipv6Interface() [constructor]
-    cls.add_constructor([])
-    ## ipv6-interface.h (module 'internet'): bool ns3::Ipv6Interface::AddAddress(ns3::Ipv6InterfaceAddress iface) [member function]
-    cls.add_method('AddAddress', 
-                   'bool', 
-                   [param('ns3::Ipv6InterfaceAddress', 'iface')])
-    ## ipv6-interface.h (module 'internet'): ns3::Ipv6InterfaceAddress ns3::Ipv6Interface::GetAddress(uint32_t index) const [member function]
-    cls.add_method('GetAddress', 
-                   'ns3::Ipv6InterfaceAddress', 
-                   [param('uint32_t', 'index')], 
-                   is_const=True)
-    ## ipv6-interface.h (module 'internet'): ns3::Ipv6InterfaceAddress ns3::Ipv6Interface::GetAddressMatchingDestination(ns3::Ipv6Address dst) [member function]
-    cls.add_method('GetAddressMatchingDestination', 
-                   'ns3::Ipv6InterfaceAddress', 
-                   [param('ns3::Ipv6Address', 'dst')])
-    ## ipv6-interface.h (module 'internet'): uint16_t ns3::Ipv6Interface::GetBaseReachableTime() const [member function]
-    cls.add_method('GetBaseReachableTime', 
-                   'uint16_t', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface.h (module 'internet'): uint8_t ns3::Ipv6Interface::GetCurHopLimit() const [member function]
-    cls.add_method('GetCurHopLimit', 
-                   'uint8_t', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface.h (module 'internet'): ns3::Ptr<ns3::NetDevice> ns3::Ipv6Interface::GetDevice() const [member function]
-    cls.add_method('GetDevice', 
-                   'ns3::Ptr< ns3::NetDevice >', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## ipv6-interface.h (module 'internet'): ns3::Ipv6InterfaceAddress ns3::Ipv6Interface::GetLinkLocalAddress() const [member function]
-    cls.add_method('GetLinkLocalAddress', 
-                   'ns3::Ipv6InterfaceAddress', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface.h (module 'internet'): uint16_t ns3::Ipv6Interface::GetMetric() const [member function]
-    cls.add_method('GetMetric', 
-                   'uint16_t', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface.h (module 'internet'): uint32_t ns3::Ipv6Interface::GetNAddresses() const [member function]
-    cls.add_method('GetNAddresses', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface.h (module 'internet'): uint16_t ns3::Ipv6Interface::GetReachableTime() const [member function]
-    cls.add_method('GetReachableTime', 
-                   'uint16_t', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface.h (module 'internet'): uint16_t ns3::Ipv6Interface::GetRetransTimer() const [member function]
-    cls.add_method('GetRetransTimer', 
-                   'uint16_t', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface.h (module 'internet'): static ns3::TypeId ns3::Ipv6Interface::GetTypeId() [member function]
-    cls.add_method('GetTypeId', 
-                   'ns3::TypeId', 
-                   [], 
-                   is_static=True)
-    ## ipv6-interface.h (module 'internet'): bool ns3::Ipv6Interface::IsDown() const [member function]
-    cls.add_method('IsDown', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface.h (module 'internet'): bool ns3::Ipv6Interface::IsForwarding() const [member function]
-    cls.add_method('IsForwarding', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface.h (module 'internet'): bool ns3::Ipv6Interface::IsUp() const [member function]
-    cls.add_method('IsUp', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface.h (module 'internet'): ns3::Ipv6InterfaceAddress ns3::Ipv6Interface::RemoveAddress(uint32_t index) [member function]
-    cls.add_method('RemoveAddress', 
-                   'ns3::Ipv6InterfaceAddress', 
-                   [param('uint32_t', 'index')])
-    ## ipv6-interface.h (module 'internet'): ns3::Ipv6InterfaceAddress ns3::Ipv6Interface::RemoveAddress(ns3::Ipv6Address address) [member function]
-    cls.add_method('RemoveAddress', 
-                   'ns3::Ipv6InterfaceAddress', 
-                   [param('ns3::Ipv6Address', 'address')])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::Send(ns3::Ptr<ns3::Packet> p, ns3::Ipv6Address dest) [member function]
-    cls.add_method('Send', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::Packet >', 'p'), param('ns3::Ipv6Address', 'dest')])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetBaseReachableTime(uint16_t baseReachableTime) [member function]
-    cls.add_method('SetBaseReachableTime', 
-                   'void', 
-                   [param('uint16_t', 'baseReachableTime')])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetCurHopLimit(uint8_t curHopLimit) [member function]
-    cls.add_method('SetCurHopLimit', 
-                   'void', 
-                   [param('uint8_t', 'curHopLimit')])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetDevice(ns3::Ptr<ns3::NetDevice> device) [member function]
-    cls.add_method('SetDevice', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::NetDevice >', 'device')])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetDown() [member function]
-    cls.add_method('SetDown', 
-                   'void', 
-                   [])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetForwarding(bool forward) [member function]
-    cls.add_method('SetForwarding', 
-                   'void', 
-                   [param('bool', 'forward')])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetMetric(uint16_t metric) [member function]
-    cls.add_method('SetMetric', 
-                   'void', 
-                   [param('uint16_t', 'metric')])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetNode(ns3::Ptr<ns3::Node> node) [member function]
-    cls.add_method('SetNode', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::Node >', 'node')])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetNsDadUid(ns3::Ipv6Address address, uint32_t uid) [member function]
-    cls.add_method('SetNsDadUid', 
-                   'void', 
-                   [param('ns3::Ipv6Address', 'address'), param('uint32_t', 'uid')])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetReachableTime(uint16_t reachableTime) [member function]
-    cls.add_method('SetReachableTime', 
-                   'void', 
-                   [param('uint16_t', 'reachableTime')])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetRetransTimer(uint16_t retransTimer) [member function]
-    cls.add_method('SetRetransTimer', 
-                   'void', 
-                   [param('uint16_t', 'retransTimer')])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetState(ns3::Ipv6Address address, ns3::Ipv6InterfaceAddress::State_e state) [member function]
-    cls.add_method('SetState', 
-                   'void', 
-                   [param('ns3::Ipv6Address', 'address'), param('ns3::Ipv6InterfaceAddress::State_e', 'state')])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetUp() [member function]
-    cls.add_method('SetUp', 
-                   'void', 
-                   [])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::DoDispose() [member function]
-    cls.add_method('DoDispose', 
-                   'void', 
-                   [], 
-                   visibility='protected', is_virtual=True)
-    return
-
 def register_Ns3Ipv6PrefixChecker_methods(root_module, cls):
     ## ipv6-address.h (module 'network'): ns3::Ipv6PrefixChecker::Ipv6PrefixChecker() [constructor]
     cls.add_constructor([])
@@ -7259,10 +6875,10 @@
                    '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')])
     return
 
 def register_Ns3ParetoRandomVariable_methods(root_module, cls):
diff -Naur ns-3.19/src/aodv/bindings/modulegen__gcc_LP64.py ns-3.20/src/aodv/bindings/modulegen__gcc_LP64.py
--- ns-3.19/src/aodv/bindings/modulegen__gcc_LP64.py	2014-06-17 10:34:00.433636700 -0700
+++ ns-3.20/src/aodv/bindings/modulegen__gcc_LP64.py	2014-06-17 10:33:13.762996973 -0700
@@ -102,12 +102,6 @@
     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-interface-address.h (module 'internet'): ns3::Ipv6InterfaceAddress [class]
-    module.add_class('Ipv6InterfaceAddress', import_from_module='ns.internet')
-    ## ipv6-interface-address.h (module 'internet'): ns3::Ipv6InterfaceAddress::State_e [enumeration]
-    module.add_enum('State_e', ['TENTATIVE', 'DEPRECATED', 'PREFERRED', 'PERMANENT', 'HOMEADDRESS', 'TENTATIVE_OPTIMISTIC', 'INVALID'], outer_class=root_module['ns3::Ipv6InterfaceAddress'], import_from_module='ns.internet')
-    ## ipv6-interface-address.h (module 'internet'): ns3::Ipv6InterfaceAddress::Scope_e [enumeration]
-    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]
@@ -148,6 +142,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')
     ## timer.h (module 'core'): ns3::Timer [class]
     module.add_class('Timer', import_from_module='ns.core')
     ## timer.h (module 'core'): ns3::Timer::DestroyPolicy [enumeration]
@@ -168,6 +164,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')
     ## aodv-helper.h (module 'aodv'): ns3::AodvHelper [class]
     module.add_class('AodvHelper', parent=root_module['ns3::Ipv4RoutingHelper'])
     ## chunk.h (module 'network'): ns3::Chunk [class]
@@ -180,10 +178,6 @@
     module.add_enum('DscpType', ['DscpDefault', 'DSCP_CS1', 'DSCP_AF11', 'DSCP_AF12', 'DSCP_AF13', 'DSCP_CS2', 'DSCP_AF21', 'DSCP_AF22', 'DSCP_AF23', 'DSCP_CS3', 'DSCP_AF31', 'DSCP_AF32', 'DSCP_AF33', 'DSCP_CS4', 'DSCP_AF41', 'DSCP_AF42', 'DSCP_AF43', 'DSCP_CS5', 'DSCP_EF', 'DSCP_CS6', 'DSCP_CS7'], outer_class=root_module['ns3::Ipv4Header'], import_from_module='ns.internet')
     ## ipv4-header.h (module 'internet'): ns3::Ipv4Header::EcnType [enumeration]
     module.add_enum('EcnType', ['ECN_NotECT', 'ECN_ECT1', 'ECN_ECT0', 'ECN_CE'], outer_class=root_module['ns3::Ipv4Header'], import_from_module='ns.internet')
-    ## ipv6-header.h (module 'internet'): ns3::Ipv6Header [class]
-    module.add_class('Ipv6Header', import_from_module='ns.internet', parent=root_module['ns3::Header'])
-    ## ipv6-header.h (module 'internet'): ns3::Ipv6Header::NextHeader_e [enumeration]
-    module.add_enum('NextHeader_e', ['IPV6_EXT_HOP_BY_HOP', 'IPV6_IPV4', 'IPV6_TCP', 'IPV6_UDP', 'IPV6_IPV6', 'IPV6_EXT_ROUTING', 'IPV6_EXT_FRAGMENTATION', 'IPV6_EXT_CONFIDENTIALITY', 'IPV6_EXT_AUTHENTIFICATION', 'IPV6_ICMPV6', 'IPV6_EXT_END', 'IPV6_EXT_DESTINATION', 'IPV6_SCTP', 'IPV6_EXT_MOBILITY', 'IPV6_UDP_LITE'], outer_class=root_module['ns3::Ipv6Header'], import_from_module='ns.internet')
     ## 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]
@@ -296,10 +290,6 @@
     module.add_class('ExponentialRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
     ## random-variable-stream.h (module 'core'): ns3::GammaRandomVariable [class]
     module.add_class('GammaRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
-    ## ip-l4-protocol.h (module 'internet'): ns3::IpL4Protocol [class]
-    module.add_class('IpL4Protocol', import_from_module='ns.internet', parent=root_module['ns3::Object'])
-    ## ip-l4-protocol.h (module 'internet'): ns3::IpL4Protocol::RxStatus [enumeration]
-    module.add_enum('RxStatus', ['RX_OK', 'RX_CSUM_FAILED', 'RX_ENDPOINT_CLOSED', 'RX_ENDPOINT_UNREACH'], outer_class=root_module['ns3::IpL4Protocol'], import_from_module='ns.internet')
     ## ipv4.h (module 'internet'): ns3::Ipv4 [class]
     module.add_class('Ipv4', import_from_module='ns.internet', parent=root_module['ns3::Object'])
     ## ipv4-address.h (module 'network'): ns3::Ipv4AddressChecker [class]
@@ -326,8 +316,6 @@
     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-interface.h (module 'internet'): ns3::Ipv6Interface [class]
-    module.add_class('Ipv6Interface', import_from_module='ns.internet', parent=root_module['ns3::Object'])
     ## 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]
@@ -370,8 +358,8 @@
     module.add_class('AddressValue', import_from_module='ns.network', parent=root_module['ns3::AttributeValue'])
     ## ipv4-list-routing.h (module 'internet'): ns3::Ipv4ListRouting [class]
     module.add_class('Ipv4ListRouting', import_from_module='ns.internet', parent=root_module['ns3::Ipv4RoutingProtocol'])
-    module.add_container('std::list< ns3::Ptr< ns3::Packet > >', 'ns3::Ptr< ns3::Packet >', container_type='list')
-    module.add_container('std::map< unsigned int, unsigned int >', ('unsigned int', 'unsigned int'), container_type='map')
+    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')
     
     ## Register a nested module for the namespace FatalImpl
     
@@ -400,12 +388,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('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('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(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&')
+    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&')
     
     ## Register a nested module for the namespace Function
     
@@ -460,8 +448,8 @@
     module.add_class('RreqHeader', parent=root_module['ns3::Header'])
     ## aodv-packet.h (module 'aodv'): ns3::aodv::TypeHeader [class]
     module.add_class('TypeHeader', parent=root_module['ns3::Header'])
-    module.add_container('std::map< ns3::Ipv4Address, unsigned int >', ('ns3::Ipv4Address', 'unsigned int'), container_type='map')
-    module.add_container('std::vector< ns3::Ipv4Address >', 'ns3::Ipv4Address', container_type='vector')
+    module.add_container('std::map< ns3::Ipv4Address, unsigned int >', ('ns3::Ipv4Address', 'unsigned int'), container_type=u'map')
+    module.add_container('std::vector< ns3::Ipv4Address >', 'ns3::Ipv4Address', container_type=u'vector')
 
 def register_methods(root_module):
     register_Ns3Address_methods(root_module, root_module['ns3::Address'])
@@ -491,7 +479,6 @@
     register_Ns3Ipv4Mask_methods(root_module, root_module['ns3::Ipv4Mask'])
     register_Ns3Ipv4RoutingHelper_methods(root_module, root_module['ns3::Ipv4RoutingHelper'])
     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'])
@@ -509,6 +496,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_Ns3Timer_methods(root_module, root_module['ns3::Timer'])
     register_Ns3TimerImpl_methods(root_module, root_module['ns3::TimerImpl'])
     register_Ns3TypeId_methods(root_module, root_module['ns3::TypeId'])
@@ -520,7 +508,6 @@
     register_Ns3Chunk_methods(root_module, root_module['ns3::Chunk'])
     register_Ns3Header_methods(root_module, root_module['ns3::Header'])
     register_Ns3Ipv4Header_methods(root_module, root_module['ns3::Ipv4Header'])
-    register_Ns3Ipv6Header_methods(root_module, root_module['ns3::Ipv6Header'])
     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'])
@@ -571,7 +558,6 @@
     register_Ns3EventImpl_methods(root_module, root_module['ns3::EventImpl'])
     register_Ns3ExponentialRandomVariable_methods(root_module, root_module['ns3::ExponentialRandomVariable'])
     register_Ns3GammaRandomVariable_methods(root_module, root_module['ns3::GammaRandomVariable'])
-    register_Ns3IpL4Protocol_methods(root_module, root_module['ns3::IpL4Protocol'])
     register_Ns3Ipv4_methods(root_module, root_module['ns3::Ipv4'])
     register_Ns3Ipv4AddressChecker_methods(root_module, root_module['ns3::Ipv4AddressChecker'])
     register_Ns3Ipv4AddressValue_methods(root_module, root_module['ns3::Ipv4AddressValue'])
@@ -584,7 +570,6 @@
     register_Ns3Ipv4RoutingProtocol_methods(root_module, root_module['ns3::Ipv4RoutingProtocol'])
     register_Ns3Ipv6AddressChecker_methods(root_module, root_module['ns3::Ipv6AddressChecker'])
     register_Ns3Ipv6AddressValue_methods(root_module, root_module['ns3::Ipv6AddressValue'])
-    register_Ns3Ipv6Interface_methods(root_module, root_module['ns3::Ipv6Interface'])
     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'])
@@ -871,6 +856,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', 
@@ -883,6 +872,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', 
@@ -1781,61 +1774,6 @@
                    [param('uint8_t *', 'address')])
     return
 
-def register_Ns3Ipv6InterfaceAddress_methods(root_module, cls):
-    cls.add_binary_comparison_operator('!=')
-    cls.add_output_stream_operator()
-    cls.add_binary_comparison_operator('==')
-    ## ipv6-interface-address.h (module 'internet'): ns3::Ipv6InterfaceAddress::Ipv6InterfaceAddress() [constructor]
-    cls.add_constructor([])
-    ## ipv6-interface-address.h (module 'internet'): ns3::Ipv6InterfaceAddress::Ipv6InterfaceAddress(ns3::Ipv6Address address) [constructor]
-    cls.add_constructor([param('ns3::Ipv6Address', 'address')])
-    ## ipv6-interface-address.h (module 'internet'): ns3::Ipv6InterfaceAddress::Ipv6InterfaceAddress(ns3::Ipv6Address address, ns3::Ipv6Prefix prefix) [constructor]
-    cls.add_constructor([param('ns3::Ipv6Address', 'address'), param('ns3::Ipv6Prefix', 'prefix')])
-    ## ipv6-interface-address.h (module 'internet'): ns3::Ipv6InterfaceAddress::Ipv6InterfaceAddress(ns3::Ipv6InterfaceAddress const & o) [copy constructor]
-    cls.add_constructor([param('ns3::Ipv6InterfaceAddress const &', 'o')])
-    ## ipv6-interface-address.h (module 'internet'): ns3::Ipv6Address ns3::Ipv6InterfaceAddress::GetAddress() const [member function]
-    cls.add_method('GetAddress', 
-                   'ns3::Ipv6Address', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface-address.h (module 'internet'): uint32_t ns3::Ipv6InterfaceAddress::GetNsDadUid() const [member function]
-    cls.add_method('GetNsDadUid', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface-address.h (module 'internet'): ns3::Ipv6Prefix ns3::Ipv6InterfaceAddress::GetPrefix() const [member function]
-    cls.add_method('GetPrefix', 
-                   'ns3::Ipv6Prefix', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface-address.h (module 'internet'): ns3::Ipv6InterfaceAddress::Scope_e ns3::Ipv6InterfaceAddress::GetScope() const [member function]
-    cls.add_method('GetScope', 
-                   'ns3::Ipv6InterfaceAddress::Scope_e', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface-address.h (module 'internet'): ns3::Ipv6InterfaceAddress::State_e ns3::Ipv6InterfaceAddress::GetState() const [member function]
-    cls.add_method('GetState', 
-                   'ns3::Ipv6InterfaceAddress::State_e', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface-address.h (module 'internet'): void ns3::Ipv6InterfaceAddress::SetAddress(ns3::Ipv6Address address) [member function]
-    cls.add_method('SetAddress', 
-                   'void', 
-                   [param('ns3::Ipv6Address', 'address')])
-    ## ipv6-interface-address.h (module 'internet'): void ns3::Ipv6InterfaceAddress::SetNsDadUid(uint32_t uid) [member function]
-    cls.add_method('SetNsDadUid', 
-                   'void', 
-                   [param('uint32_t', 'uid')])
-    ## ipv6-interface-address.h (module 'internet'): void ns3::Ipv6InterfaceAddress::SetScope(ns3::Ipv6InterfaceAddress::Scope_e scope) [member function]
-    cls.add_method('SetScope', 
-                   'void', 
-                   [param('ns3::Ipv6InterfaceAddress::Scope_e', 'scope')])
-    ## ipv6-interface-address.h (module 'internet'): void ns3::Ipv6InterfaceAddress::SetState(ns3::Ipv6InterfaceAddress::State_e state) [member function]
-    cls.add_method('SetState', 
-                   'void', 
-                   [param('ns3::Ipv6InterfaceAddress::State_e', 'state')])
-    return
-
 def register_Ns3Ipv6Prefix_methods(root_module, cls):
     cls.add_binary_comparison_operator('!=')
     cls.add_output_stream_operator()
@@ -2517,6 +2455,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_Ns3Timer_methods(root_module, cls):
     ## timer.h (module 'core'): ns3::Timer::Timer(ns3::Timer const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::Timer const &', 'arg0')])
@@ -2800,61 +2746,17 @@
 def register_Ns3Int64x64_t_methods(root_module, cls):
     cls.add_binary_comparison_operator('<=')
     cls.add_binary_comparison_operator('!=')
-    cls.add_inplace_numeric_operator('+=', 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 &', '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_inplace_numeric_operator('+=', 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_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_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_output_stream_operator()
     cls.add_binary_comparison_operator('==')
     cls.add_binary_comparison_operator('>=')
@@ -2862,6 +2764,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]
@@ -2902,6 +2806,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_Ns3AodvHelper_methods(root_module, cls):
@@ -3156,106 +3062,6 @@
                    [param('uint8_t', 'ttl')])
     return
 
-def register_Ns3Ipv6Header_methods(root_module, cls):
-    ## ipv6-header.h (module 'internet'): ns3::Ipv6Header::Ipv6Header(ns3::Ipv6Header const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::Ipv6Header const &', 'arg0')])
-    ## ipv6-header.h (module 'internet'): ns3::Ipv6Header::Ipv6Header() [constructor]
-    cls.add_constructor([])
-    ## ipv6-header.h (module 'internet'): uint32_t ns3::Ipv6Header::Deserialize(ns3::Buffer::Iterator start) [member function]
-    cls.add_method('Deserialize', 
-                   'uint32_t', 
-                   [param('ns3::Buffer::Iterator', 'start')], 
-                   is_virtual=True)
-    ## ipv6-header.h (module 'internet'): ns3::Ipv6Address ns3::Ipv6Header::GetDestinationAddress() const [member function]
-    cls.add_method('GetDestinationAddress', 
-                   'ns3::Ipv6Address', 
-                   [], 
-                   is_const=True)
-    ## ipv6-header.h (module 'internet'): uint32_t ns3::Ipv6Header::GetFlowLabel() const [member function]
-    cls.add_method('GetFlowLabel', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    ## ipv6-header.h (module 'internet'): uint8_t ns3::Ipv6Header::GetHopLimit() const [member function]
-    cls.add_method('GetHopLimit', 
-                   'uint8_t', 
-                   [], 
-                   is_const=True)
-    ## ipv6-header.h (module 'internet'): ns3::TypeId ns3::Ipv6Header::GetInstanceTypeId() const [member function]
-    cls.add_method('GetInstanceTypeId', 
-                   'ns3::TypeId', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## ipv6-header.h (module 'internet'): uint8_t ns3::Ipv6Header::GetNextHeader() const [member function]
-    cls.add_method('GetNextHeader', 
-                   'uint8_t', 
-                   [], 
-                   is_const=True)
-    ## ipv6-header.h (module 'internet'): uint16_t ns3::Ipv6Header::GetPayloadLength() const [member function]
-    cls.add_method('GetPayloadLength', 
-                   'uint16_t', 
-                   [], 
-                   is_const=True)
-    ## ipv6-header.h (module 'internet'): uint32_t ns3::Ipv6Header::GetSerializedSize() const [member function]
-    cls.add_method('GetSerializedSize', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## ipv6-header.h (module 'internet'): ns3::Ipv6Address ns3::Ipv6Header::GetSourceAddress() const [member function]
-    cls.add_method('GetSourceAddress', 
-                   'ns3::Ipv6Address', 
-                   [], 
-                   is_const=True)
-    ## ipv6-header.h (module 'internet'): uint8_t ns3::Ipv6Header::GetTrafficClass() const [member function]
-    cls.add_method('GetTrafficClass', 
-                   'uint8_t', 
-                   [], 
-                   is_const=True)
-    ## ipv6-header.h (module 'internet'): static ns3::TypeId ns3::Ipv6Header::GetTypeId() [member function]
-    cls.add_method('GetTypeId', 
-                   'ns3::TypeId', 
-                   [], 
-                   is_static=True)
-    ## ipv6-header.h (module 'internet'): void ns3::Ipv6Header::Print(std::ostream & os) const [member function]
-    cls.add_method('Print', 
-                   'void', 
-                   [param('std::ostream &', 'os')], 
-                   is_const=True, is_virtual=True)
-    ## ipv6-header.h (module 'internet'): void ns3::Ipv6Header::Serialize(ns3::Buffer::Iterator start) const [member function]
-    cls.add_method('Serialize', 
-                   'void', 
-                   [param('ns3::Buffer::Iterator', 'start')], 
-                   is_const=True, is_virtual=True)
-    ## ipv6-header.h (module 'internet'): void ns3::Ipv6Header::SetDestinationAddress(ns3::Ipv6Address dst) [member function]
-    cls.add_method('SetDestinationAddress', 
-                   'void', 
-                   [param('ns3::Ipv6Address', 'dst')])
-    ## ipv6-header.h (module 'internet'): void ns3::Ipv6Header::SetFlowLabel(uint32_t flow) [member function]
-    cls.add_method('SetFlowLabel', 
-                   'void', 
-                   [param('uint32_t', 'flow')])
-    ## ipv6-header.h (module 'internet'): void ns3::Ipv6Header::SetHopLimit(uint8_t limit) [member function]
-    cls.add_method('SetHopLimit', 
-                   'void', 
-                   [param('uint8_t', 'limit')])
-    ## ipv6-header.h (module 'internet'): void ns3::Ipv6Header::SetNextHeader(uint8_t next) [member function]
-    cls.add_method('SetNextHeader', 
-                   'void', 
-                   [param('uint8_t', 'next')])
-    ## ipv6-header.h (module 'internet'): void ns3::Ipv6Header::SetPayloadLength(uint16_t len) [member function]
-    cls.add_method('SetPayloadLength', 
-                   'void', 
-                   [param('uint16_t', 'len')])
-    ## ipv6-header.h (module 'internet'): void ns3::Ipv6Header::SetSourceAddress(ns3::Ipv6Address src) [member function]
-    cls.add_method('SetSourceAddress', 
-                   'void', 
-                   [param('ns3::Ipv6Address', 'src')])
-    ## ipv6-header.h (module 'internet'): void ns3::Ipv6Header::SetTrafficClass(uint8_t traffic) [member function]
-    cls.add_method('SetTrafficClass', 
-                   'void', 
-                   [param('uint8_t', 'traffic')])
-    return
-
 def register_Ns3Object_methods(root_module, cls):
     ## object.h (module 'core'): ns3::Object::Object() [constructor]
     cls.add_constructor([])
@@ -4163,12 +3969,14 @@
 def register_Ns3Time_methods(root_module, cls):
     cls.add_binary_comparison_operator('<=')
     cls.add_binary_comparison_operator('!=')
-    cls.add_inplace_numeric_operator('+=', 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('ns3::Time const &', 'right'))
+    cls.add_inplace_numeric_operator('+=', 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_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_inplace_numeric_operator('-=', param('ns3::Time const &', '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('>=')
@@ -4194,6 +4002,11 @@
     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', 
@@ -5647,63 +5460,6 @@
                    is_virtual=True)
     return
 
-def register_Ns3IpL4Protocol_methods(root_module, cls):
-    ## ip-l4-protocol.h (module 'internet'): ns3::IpL4Protocol::IpL4Protocol() [constructor]
-    cls.add_constructor([])
-    ## ip-l4-protocol.h (module 'internet'): ns3::IpL4Protocol::IpL4Protocol(ns3::IpL4Protocol const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::IpL4Protocol const &', 'arg0')])
-    ## ip-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::IpL4Protocol::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 >', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## ip-l4-protocol.h (module 'internet'): 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> ns3::IpL4Protocol::GetDownTarget6() const [member function]
-    cls.add_method('GetDownTarget6', 
-                   '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 >', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## ip-l4-protocol.h (module 'internet'): int ns3::IpL4Protocol::GetProtocolNumber() const [member function]
-    cls.add_method('GetProtocolNumber', 
-                   'int', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## ip-l4-protocol.h (module 'internet'): static ns3::TypeId ns3::IpL4Protocol::GetTypeId() [member function]
-    cls.add_method('GetTypeId', 
-                   'ns3::TypeId', 
-                   [], 
-                   is_static=True)
-    ## ip-l4-protocol.h (module 'internet'): ns3::IpL4Protocol::RxStatus ns3::IpL4Protocol::Receive(ns3::Ptr<ns3::Packet> p, ns3::Ipv4Header const & header, 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')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## ip-l4-protocol.h (module 'internet'): ns3::IpL4Protocol::RxStatus ns3::IpL4Protocol::Receive(ns3::Ptr<ns3::Packet> p, ns3::Ipv6Header const & header, 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')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## ip-l4-protocol.h (module 'internet'): void ns3::IpL4Protocol::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', 
-                   'void', 
-                   [param('ns3::Ipv4Address', 'icmpSource'), param('uint8_t', 'icmpTtl'), param('uint8_t', 'icmpType'), param('uint8_t', 'icmpCode'), param('uint32_t', 'icmpInfo'), param('ns3::Ipv4Address', 'payloadSource'), param('ns3::Ipv4Address', 'payloadDestination'), param('uint8_t const *', 'payload')], 
-                   is_virtual=True)
-    ## ip-l4-protocol.h (module 'internet'): void ns3::IpL4Protocol::ReceiveIcmp(ns3::Ipv6Address icmpSource, uint8_t icmpTtl, uint8_t icmpType, uint8_t icmpCode, uint32_t icmpInfo, ns3::Ipv6Address payloadSource, ns3::Ipv6Address payloadDestination, uint8_t const * payload) [member function]
-    cls.add_method('ReceiveIcmp', 
-                   'void', 
-                   [param('ns3::Ipv6Address', 'icmpSource'), param('uint8_t', 'icmpTtl'), param('uint8_t', 'icmpType'), param('uint8_t', 'icmpCode'), param('uint32_t', 'icmpInfo'), param('ns3::Ipv6Address', 'payloadSource'), param('ns3::Ipv6Address', 'payloadDestination'), param('uint8_t const *', 'payload')], 
-                   is_virtual=True)
-    ## ip-l4-protocol.h (module 'internet'): void ns3::IpL4Protocol::SetDownTarget(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> cb) [member function]
-    cls.add_method('SetDownTarget', 
-                   'void', 
-                   [param('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 >', 'cb')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## ip-l4-protocol.h (module 'internet'): void ns3::IpL4Protocol::SetDownTarget6(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) [member function]
-    cls.add_method('SetDownTarget6', 
-                   '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_pure_virtual=True, is_virtual=True)
-    return
-
 def register_Ns3Ipv4_methods(root_module, cls):
     ## ipv4.h (module 'internet'): ns3::Ipv4::Ipv4(ns3::Ipv4 const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::Ipv4 const &', 'arg0')])
@@ -6127,6 +5883,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', 
@@ -6460,151 +6221,6 @@
                    [param('ns3::Ipv6Address const &', 'value')])
     return
 
-def register_Ns3Ipv6Interface_methods(root_module, cls):
-    ## ipv6-interface.h (module 'internet'): ns3::Ipv6Interface::Ipv6Interface(ns3::Ipv6Interface const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::Ipv6Interface const &', 'arg0')])
-    ## ipv6-interface.h (module 'internet'): ns3::Ipv6Interface::Ipv6Interface() [constructor]
-    cls.add_constructor([])
-    ## ipv6-interface.h (module 'internet'): bool ns3::Ipv6Interface::AddAddress(ns3::Ipv6InterfaceAddress iface) [member function]
-    cls.add_method('AddAddress', 
-                   'bool', 
-                   [param('ns3::Ipv6InterfaceAddress', 'iface')])
-    ## ipv6-interface.h (module 'internet'): ns3::Ipv6InterfaceAddress ns3::Ipv6Interface::GetAddress(uint32_t index) const [member function]
-    cls.add_method('GetAddress', 
-                   'ns3::Ipv6InterfaceAddress', 
-                   [param('uint32_t', 'index')], 
-                   is_const=True)
-    ## ipv6-interface.h (module 'internet'): ns3::Ipv6InterfaceAddress ns3::Ipv6Interface::GetAddressMatchingDestination(ns3::Ipv6Address dst) [member function]
-    cls.add_method('GetAddressMatchingDestination', 
-                   'ns3::Ipv6InterfaceAddress', 
-                   [param('ns3::Ipv6Address', 'dst')])
-    ## ipv6-interface.h (module 'internet'): uint16_t ns3::Ipv6Interface::GetBaseReachableTime() const [member function]
-    cls.add_method('GetBaseReachableTime', 
-                   'uint16_t', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface.h (module 'internet'): uint8_t ns3::Ipv6Interface::GetCurHopLimit() const [member function]
-    cls.add_method('GetCurHopLimit', 
-                   'uint8_t', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface.h (module 'internet'): ns3::Ptr<ns3::NetDevice> ns3::Ipv6Interface::GetDevice() const [member function]
-    cls.add_method('GetDevice', 
-                   'ns3::Ptr< ns3::NetDevice >', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## ipv6-interface.h (module 'internet'): ns3::Ipv6InterfaceAddress ns3::Ipv6Interface::GetLinkLocalAddress() const [member function]
-    cls.add_method('GetLinkLocalAddress', 
-                   'ns3::Ipv6InterfaceAddress', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface.h (module 'internet'): uint16_t ns3::Ipv6Interface::GetMetric() const [member function]
-    cls.add_method('GetMetric', 
-                   'uint16_t', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface.h (module 'internet'): uint32_t ns3::Ipv6Interface::GetNAddresses() const [member function]
-    cls.add_method('GetNAddresses', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface.h (module 'internet'): uint16_t ns3::Ipv6Interface::GetReachableTime() const [member function]
-    cls.add_method('GetReachableTime', 
-                   'uint16_t', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface.h (module 'internet'): uint16_t ns3::Ipv6Interface::GetRetransTimer() const [member function]
-    cls.add_method('GetRetransTimer', 
-                   'uint16_t', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface.h (module 'internet'): static ns3::TypeId ns3::Ipv6Interface::GetTypeId() [member function]
-    cls.add_method('GetTypeId', 
-                   'ns3::TypeId', 
-                   [], 
-                   is_static=True)
-    ## ipv6-interface.h (module 'internet'): bool ns3::Ipv6Interface::IsDown() const [member function]
-    cls.add_method('IsDown', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface.h (module 'internet'): bool ns3::Ipv6Interface::IsForwarding() const [member function]
-    cls.add_method('IsForwarding', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface.h (module 'internet'): bool ns3::Ipv6Interface::IsUp() const [member function]
-    cls.add_method('IsUp', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface.h (module 'internet'): ns3::Ipv6InterfaceAddress ns3::Ipv6Interface::RemoveAddress(uint32_t index) [member function]
-    cls.add_method('RemoveAddress', 
-                   'ns3::Ipv6InterfaceAddress', 
-                   [param('uint32_t', 'index')])
-    ## ipv6-interface.h (module 'internet'): ns3::Ipv6InterfaceAddress ns3::Ipv6Interface::RemoveAddress(ns3::Ipv6Address address) [member function]
-    cls.add_method('RemoveAddress', 
-                   'ns3::Ipv6InterfaceAddress', 
-                   [param('ns3::Ipv6Address', 'address')])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::Send(ns3::Ptr<ns3::Packet> p, ns3::Ipv6Address dest) [member function]
-    cls.add_method('Send', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::Packet >', 'p'), param('ns3::Ipv6Address', 'dest')])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetBaseReachableTime(uint16_t baseReachableTime) [member function]
-    cls.add_method('SetBaseReachableTime', 
-                   'void', 
-                   [param('uint16_t', 'baseReachableTime')])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetCurHopLimit(uint8_t curHopLimit) [member function]
-    cls.add_method('SetCurHopLimit', 
-                   'void', 
-                   [param('uint8_t', 'curHopLimit')])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetDevice(ns3::Ptr<ns3::NetDevice> device) [member function]
-    cls.add_method('SetDevice', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::NetDevice >', 'device')])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetDown() [member function]
-    cls.add_method('SetDown', 
-                   'void', 
-                   [])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetForwarding(bool forward) [member function]
-    cls.add_method('SetForwarding', 
-                   'void', 
-                   [param('bool', 'forward')])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetMetric(uint16_t metric) [member function]
-    cls.add_method('SetMetric', 
-                   'void', 
-                   [param('uint16_t', 'metric')])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetNode(ns3::Ptr<ns3::Node> node) [member function]
-    cls.add_method('SetNode', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::Node >', 'node')])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetNsDadUid(ns3::Ipv6Address address, uint32_t uid) [member function]
-    cls.add_method('SetNsDadUid', 
-                   'void', 
-                   [param('ns3::Ipv6Address', 'address'), param('uint32_t', 'uid')])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetReachableTime(uint16_t reachableTime) [member function]
-    cls.add_method('SetReachableTime', 
-                   'void', 
-                   [param('uint16_t', 'reachableTime')])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetRetransTimer(uint16_t retransTimer) [member function]
-    cls.add_method('SetRetransTimer', 
-                   'void', 
-                   [param('uint16_t', 'retransTimer')])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetState(ns3::Ipv6Address address, ns3::Ipv6InterfaceAddress::State_e state) [member function]
-    cls.add_method('SetState', 
-                   'void', 
-                   [param('ns3::Ipv6Address', 'address'), param('ns3::Ipv6InterfaceAddress::State_e', 'state')])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetUp() [member function]
-    cls.add_method('SetUp', 
-                   'void', 
-                   [])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::DoDispose() [member function]
-    cls.add_method('DoDispose', 
-                   'void', 
-                   [], 
-                   visibility='protected', is_virtual=True)
-    return
-
 def register_Ns3Ipv6PrefixChecker_methods(root_module, cls):
     ## ipv6-address.h (module 'network'): ns3::Ipv6PrefixChecker::Ipv6PrefixChecker() [constructor]
     cls.add_constructor([])
@@ -7259,10 +6875,10 @@
                    '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')])
     return
 
 def register_Ns3ParetoRandomVariable_methods(root_module, cls):
diff -Naur ns-3.19/src/aodv/model/aodv-packet.cc ns-3.20/src/aodv/model/aodv-packet.cc
--- ns-3.19/src/aodv/model/aodv-packet.cc	2014-06-17 10:34:00.438636662 -0700
+++ ns-3.20/src/aodv/model/aodv-packet.cc	2014-06-17 10:33:13.767996934 -0700
@@ -34,8 +34,7 @@
 namespace aodv
 {
 
-NS_OBJECT_ENSURE_REGISTERED (TypeHeader)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (TypeHeader);
 
 TypeHeader::TypeHeader (MessageType t) :
   m_type (t), m_valid (true)
@@ -147,8 +146,7 @@
 {
 }
 
-NS_OBJECT_ENSURE_REGISTERED (RreqHeader)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (RreqHeader);
 
 TypeId
 RreqHeader::GetTypeId ()
@@ -287,8 +285,7 @@
   m_lifeTime = uint32_t (lifeTime.GetMilliSeconds ());
 }
 
-NS_OBJECT_ENSURE_REGISTERED (RrepHeader)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (RrepHeader);
 
 TypeId
 RrepHeader::GetTypeId ()
@@ -430,8 +427,7 @@
 {
 }
 
-NS_OBJECT_ENSURE_REGISTERED (RrepAckHeader)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (RrepAckHeader);
   
 TypeId
 RrepAckHeader::GetTypeId ()
@@ -497,8 +493,7 @@
 {
 }
 
-NS_OBJECT_ENSURE_REGISTERED (RerrHeader)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (RerrHeader);
 
 TypeId
 RerrHeader::GetTypeId ()
diff -Naur ns-3.19/src/aodv/model/aodv-routing-protocol.cc ns-3.20/src/aodv/model/aodv-routing-protocol.cc
--- ns-3.19/src/aodv/model/aodv-routing-protocol.cc	2014-06-17 10:34:00.439636654 -0700
+++ ns-3.20/src/aodv/model/aodv-routing-protocol.cc	2014-06-17 10:33:13.769996919 -0700
@@ -48,8 +48,7 @@
 {
 namespace aodv
 {
-NS_OBJECT_ENSURE_REGISTERED (RoutingProtocol)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (RoutingProtocol);
 
 /// UDP Port for AODV control traffic
 const uint32_t RoutingProtocol::AODV_PORT = 654;
@@ -112,8 +111,7 @@
   int32_t m_oif;
 };
 
-NS_OBJECT_ENSURE_REGISTERED (DeferredRouteOutputTag)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (DeferredRouteOutputTag);
 
 
 //-----------------------------------------------------------------------------
@@ -1746,7 +1744,7 @@
             { 
               destination = iface.GetBroadcast ();
             }
-          socket->SendTo (packet, 0, InetSocketAddress (destination, AODV_PORT));
+          socket->SendTo (packet->Copy (), 0, InetSocketAddress (destination, AODV_PORT));
         }
     }
 }
diff -Naur ns-3.19/src/aodv/test/aodv-chain-regression-test-0-0.pcap ns-3.20/src/aodv/test/aodv-chain-regression-test-0-0.pcap
--- ns-3.19/src/aodv/test/aodv-chain-regression-test-0-0.pcap	2014-06-17 10:34:00.442636631 -0700
+++ ns-3.20/src/aodv/test/aodv-chain-regression-test-0-0.pcap	2014-06-17 10:33:13.772996895 -0700
@@ -1,4 +1,4 @@
-ÔÃ²¡          ÿÿ  i       Ð  X   X   €  ÿÿÿÿÿÿ            ªª    E  4     
+ÔÃ²¡          ÿÿ  i       Ð  X   X   €  ÿÿÿÿÿÿ            ªª    E  4      
 
 ÿŽŽ    (     
     
@@ -22,73 +22,74 @@
      
         ™Ç        Ô€               AÈ  x   x   €<                0 ªª    E  T    @  
 
-                                                                       5É        Ô€               	Ù  @   @   €  ÿÿÿÿÿÿ          P ªª           
+                                                                       6É        Ô€               
+Ù  @   @   €  ÿÿÿÿÿÿ          P ªª           
 ÿÿÿÿÿÿ
         ØÙ        Ô€               Û  x   x   €<                ` ªª    E  T    ?  
 
-                                                                       Hî  T   T   €  ÿÿÿÿÿÿ          @ ªª    E  0     
+                                                                       Hî  T   T   €  ÿÿÿÿÿÿ          @ ªª    E  0     
 
 ÿŽŽ      
    
-  Ð        ú÷        Ô€               Ôø  x   x   €<                p ªª    E  T   =  
+  Ð        ú÷        Ô€               Ôø  x   x   €<                p ªª    E  T    =  
 
-                                                                        äø        Ô€                  x   x   €<                P ªª    E  T   @  
+                                                                        äø        Ô€                  x   x   €<                P ªª    E  T   @  
 
-                                                                     ô         Ô€              Î  x   x   €<                € ªª    E  T   ?  
+                                                                     ô         Ô€              Î  x   x   €<                € ªª    E  T   ?  
 
-                                                                     –        Ô€              p  x   x   €<                � ªª    E  T   =  
+                                                                     –        Ô€              p  x   x   €<                � ªª    E  T   =  
 
                                                                       €        Ô€              ((  T   T   €  ÿÿÿÿÿÿ            ªª    E  0     
 
 ÿŽŽ      
     
-  Ð       ¸ T   T   €  ÿÿÿÿÿÿ          ` ªª    E  0     
+  Ð       ¸ T   T   €  ÿÿÿÿÿÿ          ` ªª    E  0     
 
 ÿŽŽ      
    
-  Ð           x   x   €<                p ªª    E  T   @  
+  Ð           x   x   €<                p ªª    E  T   @  
 
-                                                                     ô         Ô€              Î  x   x   €<                ° ªª    E  T   ?  
+                                                                     ô         Ô€              Î  x   x   €<                ° ªª    E  T   ?  
 
-                                                                     –        Ô€              p  x   x   €<                À ªª    E  T   =  
+                                                                     –        Ô€              p  x   x   €<                À ªª    E  T   =  
 
                                                                       €        Ô€                 T   T   €  ÿÿÿÿÿÿ          Ð ªª    E  0     
 
 ÿŽŽ      
     
-  Ð        	 T   T   €  ÿÿÿÿÿÿ          € ªª    E  0     
+  Ð        	 T   T   €  ÿÿÿÿÿÿ          € ªª    E  0     
 
 ÿŽŽ      
    
-  Ð           x   x   €<                � ªª    E  T   @  
+  Ð           x   x   €<                � ªª    E  T   @  
 
-                                                                     ô         Ô€              Î  x   x   €<                à ªª    E  T   ?  
+                                                                     ô         Ô€              Î  x   x   €<                à ªª    E  T   ?  
 
-                                                                     ð        Ô€              Ê  x   x   €<                ð ªª    E  T   =  
+                                                                     ð        Ô€              Ê  x   x   €<                ð ªª    E  T   =  
 
                                                                       Ú        Ô€                 T   T   €  ÿÿÿÿÿÿ           ªª    E  0     
 
 ÿŽŽ      
     
-  Ð       ö  T   T   €  ÿÿÿÿÿÿ            ªª    E  0     
+  Ð       ö  T   T   €  ÿÿÿÿÿÿ            ªª    E  0     
 
 ÿŽŽ      
    
-  Ð           x   x   €<                ° ªª    E  T 	  @  
+  Ð           x   x   €<                ° ªª    E  T   @  
 
-                                                                     ô         Ô€              Î  x   x   €<                ªª    E  T 	  ?  
+                                                                     ô         Ô€              Î  x   x   €<                ªª    E  T   ?  
 
-                                                                       x   x   ˆ<                ªª    E  T 	  ?  
+                                                                       x   x   ˆ<                ªª    E  T   ?  
 
-                                                                     `  x   x   ˆ<                ªª    E  T 	  ?  
+                                                                     `  x   x   ˆ<                ªª    E  T   ?  
 
-                                                                     é  x   x   ˆ<                ªª    E  T 	  ?  
+                                                                     é  x   x   ˆ<                ªª    E  T   ?  
 
-                                                                     î  x   x   ˆ<                ªª    E  T 	  ?  
+                                                                     î  x   x   ˆ<                ªª    E  T   ?  
 
-                                                                     ¦!  x   x   ˆ<                ªª    E  T 	  ?  
+                                                                     ¦!  x   x   ˆ<                ªª    E  T   ?  
 
-                                                                     �*  x   x   ˆ<                ªª    E  T 	  ?  
+                                                                     �*  x   x   ˆ<                ªª    E  T   ?  
 
                                                                      Ö+  T   T   €  ÿÿÿÿÿÿ           ªª    E  0     
 
@@ -98,12 +99,11 @@
 
 ŽŽ     
     
-           ËF        Ô€               	 T   T   €  ÿÿÿÿÿÿ          À ªª    E  0 
-    
+           ËF        Ô€               	 T   T   €  ÿÿÿÿÿÿ          À ªª    E  0     
 
 ÿŽŽ      
    
-  Ð       ˆ  X   X   €  ÿÿÿÿÿÿ          Ð ªª    E  4     
+  Ð       ˆ  X   X   €  ÿÿÿÿÿÿ          Ð ªª    E  4     
 
 ÿŽŽ          
     
@@ -115,7 +115,7 @@
 
 ÿŽŽ         
     
-          (#  T   T   €  ÿÿÿÿÿÿ          à ªª    E  0     
+          (#  T   T   €  ÿÿÿÿÿÿ          à ªª    E  0     
 
 ÿŽŽ      
    
@@ -123,7 +123,7 @@
 
 ÿŽŽ      
     
-  Ð       Ð  T   T   €  ÿÿÿÿÿÿ          ð ªª    E  0     
+  Ð       Ð  T   T   €  ÿÿÿÿÿÿ          ð ªª    E  0     
 
 ÿŽŽ      
    
@@ -132,7 +132,7 @@
 
 ÿŽŽ      
     
-  Ð       'X X   X   €  ÿÿÿÿÿÿ           ªª    E  4     
+  Ð       'X X   X   €  ÿÿÿÿÿÿ           ªª    E  4 	    
 
 ÿŽŽ          
     
@@ -140,7 +140,8 @@
 
 ÿŽŽ         
     
-          ·@ T   T   €  ÿÿÿÿÿÿ          ªª    E  0     
+          ·@ T   T   €  ÿÿÿÿÿÿ          ªª    E  0 
+    
 
 ÿŽŽ      
    
@@ -148,7 +149,7 @@
 
 ÿŽŽ      
     
-  Ð    	   Ï< T   T   €  ÿÿÿÿÿÿ           ªª    E  0     
+  Ð    	   Ï< T   T   €  ÿÿÿÿÿÿ           ªª    E  0     
 
 ÿŽŽ      
    
diff -Naur ns-3.19/src/aodv/test/aodv-chain-regression-test-1-0.pcap ns-3.20/src/aodv/test/aodv-chain-regression-test-1-0.pcap
--- ns-3.19/src/aodv/test/aodv-chain-regression-test-1-0.pcap	2014-06-17 10:34:00.443636623 -0700
+++ ns-3.20/src/aodv/test/aodv-chain-regression-test-1-0.pcap	2014-06-17 10:33:13.773996888 -0700
@@ -1,4 +1,4 @@
-ÔÃ²¡          ÿÿ  i       `  X   X   €  ÿÿÿÿÿÿ            ªª    E  4     
+ÔÃ²¡          ÿÿ  i       `  X   X   €  ÿÿÿÿÿÿ            ªª    E  4      
 
 ÿŽŽ    (     
     
@@ -22,9 +22,9 @@
     
   +¿        ¯‘        Ô€               ?¡  @   @   €  ÿÿÿÿÿÿ            ªª           
 ÿÿÿÿÿÿ
-        A¢  @   @   €<                 ªª           
+        B¢  @   @   €<                 ªª           
      
-        Q¢        Ô€               Õ¢  T   T   €<                0 ªª    E  0     
+        R¢        Ô€               Ö¢  T   T   €<                0 ªª    E  0     
 
 ŽŽ     
     
@@ -40,21 +40,21 @@
      
         ¬Ù        Ô€               TÚ  x   x   €<                ` ªª    E  T    ?  
 
-                                                                       IÛ        Ô€               Óï        Ô€               "ñ  x   x   €<                ` ªª    E  T    >  
+                                                                       IÛ        Ô€               Ôï        Ô€               #ñ  x   x   €<                ` ªª    E  T    >  
 
-                                                                       äö        Ô€               ¾÷  x   x   €<                p ªª    E  T   >  
+                                                                       äö        Ô€               ¾÷  x   x   €<                p ªª    E  T    >  
 
-                                                                        Î÷        Ô€               ø  x   x   €<                p ªª    E  T   =  
+                                                                        Î÷        Ô€               ø  x   x   €<                p ªª    E  T    =  
 
-                                                                        ù        Ô€              ¸   x   x   €<                P ªª    E  T   @  
+                                                                        ù        Ô€              ¸   x   x   €<                P ªª    E  T   @  
 
-                                                                     È         Ô€                x   x   €<                € ªª    E  T   ?  
+                                                                     È         Ô€                x   x   €<                € ªª    E  T   ?  
 
-                                                                             Ô€              å  x   x   €<                € ªª    E  T   >  
+                                                                             Ô€              å  x   x   €<                € ªª    E  T   >  
 
-                                                                             Ô€              Y  x   x   €<                � ªª    E  T   >  
+                                                                             Ô€              Y  x   x   €<                � ªª    E  T   >  
 
-                                                                      i        Ô€              ·  x   x   €<                � ªª    E  T   =  
+                                                                      i        Ô€              ·  x   x   €<                � ªª    E  T   =  
 
                                                                       ¬        Ô€               '  T   T   €  ÿÿÿÿÿÿ            ªª    E  0     
 
@@ -64,19 +64,19 @@
 
 ÿŽŽ      
     
-  Ð       @ T   T   €  ÿÿÿÿÿÿ          ` ªª    E  0     
+  Ð       @ T   T   €  ÿÿÿÿÿÿ          ` ªª    E  0     
 
 ÿŽŽ      
    
-  Ð       ¸   x   x   €<                p ªª    E  T   @  
+  Ð       ¸   x   x   €<                p ªª    E  T   @  
 
-                                                                     È         Ô€                x   x   €<                ° ªª    E  T   ?  
+                                                                     È         Ô€                x   x   €<                ° ªª    E  T   ?  
 
-                                                                             Ô€              å  x   x   €<                ° ªª    E  T   >  
+                                                                             Ô€              å  x   x   €<                ° ªª    E  T   >  
 
-                                                                             Ô€              Y  x   x   €<                À ªª    E  T   >  
+                                                                             Ô€              Y  x   x   €<                À ªª    E  T   >  
 
-                                                                      i        Ô€              ·  x   x   €<                À ªª    E  T   =  
+                                                                      i        Ô€              ·  x   x   €<                À ªª    E  T   =  
 
                                                                       ¬        Ô€                T   T   €  ÿÿÿÿÿÿ          Ð ªª    E  0     
 
@@ -87,19 +87,19 @@
 ÿŽŽ      
     
   Ð       (
- T   T   €  ÿÿÿÿÿÿ          € ªª    E  0     
+ T   T   €  ÿÿÿÿÿÿ          € ªª    E  0     
 
 ÿŽŽ      
    
-  Ð       ¸   x   x   €<                � ªª    E  T   @  
+  Ð       ¸   x   x   €<                � ªª    E  T   @  
 
-                                                                     È         Ô€                x   x   €<                à ªª    E  T   ?  
+                                                                     È         Ô€                x   x   €<                à ªª    E  T   ?  
 
-                                                                             Ô€              å  x   x   €<                à ªª    E  T   >  
+                                                                             Ô€              å  x   x   €<                à ªª    E  T   >  
 
-                                                                     Ù        Ô€              ³  x   x   €<                ð ªª    E  T   >  
+                                                                     Ù        Ô€              ³  x   x   €<                ð ªª    E  T   >  
 
-                                                                      Ã        Ô€                x   x   €<                ð ªª    E  T   =  
+                                                                      Ã        Ô€                x   x   €<                ð ªª    E  T   =  
 
                                                                       	        Ô€                T   T   €  ÿÿÿÿÿÿ           ªª    E  0     
 
@@ -109,25 +109,25 @@
 
 ÿŽŽ      
     
-  Ð        ö  T   T   €  ÿÿÿÿÿÿ            ªª    E  0     
+  Ð        ö  T   T   €  ÿÿÿÿÿÿ            ªª    E  0     
 
 ÿŽŽ      
    
-  Ð       ¸   x   x   €<                ° ªª    E  T 	  @  
+  Ð       ¸   x   x   €<                ° ªª    E  T   @  
 
-                                                                     È         Ô€                x   x   €<                ªª    E  T 	  ?  
+                                                                     È         Ô€                x   x   €<                ªª    E  T   ?  
 
-                                                                     V  x   x   ˆ<                ªª    E  T 	  ?  
+                                                                     V  x   x   ˆ<                ªª    E  T   ?  
 
-                                                                     ¨  x   x   ˆ<                ªª    E  T 	  ?  
+                                                                     ¨  x   x   ˆ<                ªª    E  T   ?  
 
-                                                                     1  x   x   ˆ<                ªª    E  T 	  ?  
+                                                                     1  x   x   ˆ<                ªª    E  T   ?  
 
-                                                                     6  x   x   ˆ<                ªª    E  T 	  ?  
+                                                                     6  x   x   ˆ<                ªª    E  T   ?  
 
-                                                                     î   x   x   ˆ<                ªª    E  T 	  ?  
+                                                                     î   x   x   ˆ<                ªª    E  T   ?  
 
-                                                                     Ø)  x   x   ˆ<                ªª    E  T 	  ?  
+                                                                     Ø)  x   x   ˆ<                ªª    E  T   ?  
 
                                                                      N+  T   T   €  ÿÿÿÿÿÿ           ªª    E  0     
 
@@ -138,12 +138,11 @@
 ŽŽ     
     
            øF        Ô€              (
- T   T   €  ÿÿÿÿÿÿ          À ªª    E  0 
-    
+ T   T   €  ÿÿÿÿÿÿ          À ªª    E  0     
 
 ÿŽŽ      
    
-  Ð         X   X   €  ÿÿÿÿÿÿ          Ð ªª    E  4     
+  Ð         X   X   €  ÿÿÿÿÿÿ          Ð ªª    E  4     
 
 ÿŽŽ          
     
@@ -155,7 +154,7 @@
 
 ÿŽŽ         
     
-          °#  T   T   €  ÿÿÿÿÿÿ          à ªª    E  0     
+          °#  T   T   €  ÿÿÿÿÿÿ          à ªª    E  0     
 
 ÿŽŽ      
    
@@ -163,7 +162,7 @@
 
 ÿŽŽ      
     
-  Ð       X  T   T   €  ÿÿÿÿÿÿ          ð ªª    E  0     
+  Ð       X  T   T   €  ÿÿÿÿÿÿ          ð ªª    E  0     
 
 ÿŽŽ      
    
@@ -172,7 +171,7 @@
 
 ÿŽŽ      
     
-  Ð       ¸X X   X   €  ÿÿÿÿÿÿ           ªª    E  4     
+  Ð       ¸X X   X   €  ÿÿÿÿÿÿ           ªª    E  4 	    
 
 ÿŽŽ          
     
@@ -180,7 +179,8 @@
 
 ÿŽŽ         
     
-          @A T   T   €  ÿÿÿÿÿÿ          ªª    E  0     
+          @A T   T   €  ÿÿÿÿÿÿ          ªª    E  0 
+    
 
 ÿŽŽ      
    
@@ -188,7 +188,7 @@
 
 ÿŽŽ      
     
-  Ð    	   X= T   T   €  ÿÿÿÿÿÿ           ªª    E  0     
+  Ð    	   X= T   T   €  ÿÿÿÿÿÿ           ªª    E  0     
 
 ÿŽŽ      
    
diff -Naur ns-3.19/src/aodv/test/aodv-chain-regression-test-2-0.pcap ns-3.20/src/aodv/test/aodv-chain-regression-test-2-0.pcap
--- ns-3.19/src/aodv/test/aodv-chain-regression-test-2-0.pcap	2014-06-17 10:34:00.443636623 -0700
+++ ns-3.20/src/aodv/test/aodv-chain-regression-test-2-0.pcap	2014-06-17 10:33:13.773996888 -0700
@@ -20,11 +20,11 @@
 ÿÿÿÿÿÿ
         Þ‰  @   @   €<                 ªª           
      
-        ŠŠ        Ô€               a‹  T   T   €<                @ ªª    E  0     
+        ‹Š        Ô€               b‹  T   T   €<                @ ªª    E  0     
 
 ŽŽ     
     
-  +¿        q‹        Ô€               I�  @   @   €  ÿÿÿÿÿÿ            ªª           
+  +¿        r‹        Ô€               J�  @   @   €  ÿÿÿÿÿÿ            ªª           
 ÿÿÿÿÿÿ
         L�  @   @   €<                 ªª           
      
@@ -40,9 +40,10 @@
     
   +¿        ‰Ç  @   @   €<                @ ªª           
      
-        5É        Ô€               	Ù  @   @   €  ÿÿÿÿÿÿ          P ªª           
+        6É        Ô€               
+Ù  @   @   €  ÿÿÿÿÿÿ          P ªª           
 ÿÿÿÿÿÿ
-        +Ù  @   @   €<                @ ªª           
+        ,Ù  @   @   €<                @ ªª           
      
         ØÙ        Ô€               Û  x   x   €<                ` ªª    E  T    ?  
 
@@ -56,23 +57,23 @@
 ÿÿÿÿÿÿ
         Àò        Ô€               ýó  x   x   €<                p ªª    E  T    =  
 
-                                                                       Oõ        Ô€               §ö  x   x   €<                € ªª    E  T   ?  
+                                                                       Põ        Ô€               ¨ö  x   x   €<                € ªª    E  T    ?  
 
-                                                                        ·ö        Ô€               ÷  x   x   €<                p ªª    E  T   >  
+                                                                        ¸ö        Ô€               ÷  x   x   €<                p ªª    E  T    >  
 
-                                                                        ú÷        Ô€               Ôø  x   x   €<                p ªª    E  T   =  
+                                                                        ú÷        Ô€               Ôø  x   x   €<                p ªª    E  T    =  
 
-                                                                       ô         Ô€              Î  x   x   €<                € ªª    E  T   ?  
+                                                                       ô         Ô€              Î  x   x   €<                € ªª    E  T   ?  
 
-                                                                     Þ        Ô€              ,  x   x   €<                € ªª    E  T   >  
+                                                                     Þ        Ô€              ,  x   x   €<                € ªª    E  T   >  
 
-                                                                     !        Ô€              û  x   x   €<                � ªª    E  T   =  
+                                                                     !        Ô€              û  x   x   €<                � ªª    E  T   =  
 
-                                                                     N        Ô€              C  x   x   €<                  ªª    E  T   ?  
+                                                                     N        Ô€              C  x   x   €<                  ªª    E  T   ?  
 
-                                                                      S        Ô€              ¡  x   x   €<                � ªª    E  T   >  
+                                                                      S        Ô€              ¡  x   x   €<                � ªª    E  T   >  
 
-                                                                      –        Ô€              p  x   x   €<                � ªª    E  T   =  
+                                                                      –        Ô€              p  x   x   €<                � ªª    E  T   =  
 
                                                                       ((  T   T   €  ÿÿÿÿÿÿ            ªª    E  0     
 
@@ -86,17 +87,17 @@
 
 ÿŽŽ      
     
-  Ð       ô         Ô€              Î  x   x   €<                ° ªª    E  T   ?  
+  Ð       ô         Ô€              Î  x   x   €<                ° ªª    E  T   ?  
 
-                                                                     Þ        Ô€              ,  x   x   €<                ° ªª    E  T   >  
+                                                                     Þ        Ô€              ,  x   x   €<                ° ªª    E  T   >  
 
-                                                                     !        Ô€              û  x   x   €<                À ªª    E  T   =  
+                                                                     !        Ô€              û  x   x   €<                À ªª    E  T   =  
 
-                                                                     N        Ô€              C  x   x   €<                Ð ªª    E  T   ?  
+                                                                     N        Ô€              C  x   x   €<                Ð ªª    E  T   ?  
 
-                                                                      S        Ô€              ¡  x   x   €<                À ªª    E  T   >  
+                                                                      S        Ô€              ¡  x   x   €<                À ªª    E  T   >  
 
-                                                                      –        Ô€              p  x   x   €<                À ªª    E  T   =  
+                                                                      –        Ô€              p  x   x   €<                À ªª    E  T   =  
 
                                                                          T   T   €  ÿÿÿÿÿÿ          Ð ªª    E  0     
 
@@ -110,17 +111,17 @@
 
 ÿŽŽ      
     
-  Ð       ô         Ô€              Î  x   x   €<                à ªª    E  T   ?  
+  Ð       ô         Ô€              Î  x   x   €<                à ªª    E  T   ?  
 
-                                                                     Þ        Ô€              ,  x   x   €<                à ªª    E  T   >  
+                                                                     Þ        Ô€              ,  x   x   €<                à ªª    E  T   >  
 
-                                                                     !        Ô€              û  x   x   €<                ð ªª    E  T   =  
+                                                                     !        Ô€              û  x   x   €<                ð ªª    E  T   =  
 
-                                                                     N        Ô€              �  x   x   €<                 ªª    E  T   ?  
+                                                                     N        Ô€              �  x   x   €<                 ªª    E  T   ?  
 
-                                                                      ­        Ô€              û  x   x   €<                ð ªª    E  T   >  
+                                                                      ­        Ô€              û  x   x   €<                ð ªª    E  T   >  
 
-                                                                      ð        Ô€              Ê  x   x   €<                ð ªª    E  T   =  
+                                                                      ð        Ô€              Ê  x   x   €<                ð ªª    E  T   =  
 
                                                                          T   T   €  ÿÿÿÿÿÿ           ªª    E  0     
 
diff -Naur ns-3.19/src/aodv/test/aodv-chain-regression-test-3-0.pcap ns-3.20/src/aodv/test/aodv-chain-regression-test-3-0.pcap
--- ns-3.19/src/aodv/test/aodv-chain-regression-test-3-0.pcap	2014-06-17 10:34:00.444636615 -0700
+++ ns-3.20/src/aodv/test/aodv-chain-regression-test-3-0.pcap	2014-06-17 10:33:13.774996880 -0700
@@ -10,9 +10,9 @@
 
 ÿŽŽ      
     
-  Ð        ùs  @   @   €  ÿÿÿÿÿÿ            ªª           
+  Ð        ús  @   @   €  ÿÿÿÿÿÿ            ªª           
 ÿÿÿÿÿÿ
-        t  @   @   €<                  ªª           
+        t  @   @   €<                  ªª           
      
         Èt        Ô€               Ãu  T   T   €<                 ªª    E  0      
 
@@ -38,33 +38,33 @@
 ÿÿÿÿÿÿ
         'ï  @   @   €<                P ªª           
      
-        Óï        Ô€               "ñ  x   x   €<                ` ªª    E  T    >  
+        Ôï        Ô€               #ñ  x   x   €<                ` ªª    E  T    >  
 
-                                                                       2ñ        Ô€               €ñ  @   @   €  ÿÿÿÿÿÿ          ` ªª           
+                                                                       3ñ        Ô€               �ñ  @   @   €  ÿÿÿÿÿÿ          ` ªª           
 ÿÿÿÿÿÿ
         ƒò  @   @   €<                  ªª           
      
         “ò        Ô€               Dó  x   x   €<                p ªª    E  T    =  
 
-                                                                       9ô        Ô€               õ  x   x   €<                0 ªª    E  T   @  
+                                                                       9ô        Ô€               õ  x   x   €<                0 ªª    E  T    @  
 
-                                                                        #õ        Ô€               ïõ  x   x   €<                € ªª    E  T   ?  
+                                                                        #õ        Ô€               ïõ  x   x   €<                € ªª    E  T    ?  
 
-                                                                        äö        Ô€               ¾÷  x   x   €<                p ªª    E  T   >  
+                                                                        äö        Ô€               ¾÷  x   x   €<                p ªª    E  T    >  
 
-                                                                        à T   T   €  ÿÿÿÿÿÿ          @ ªª    E  0     
+                                                                        à T   T   €  ÿÿÿÿÿÿ          @ ªª    E  0     
 
 ÿŽŽ      
     
-  Ð               Ô€              å  x   x   €<                € ªª    E  T   >  
+  Ð               Ô€              å  x   x   €<                € ªª    E  T   >  
 
-                                                                     õ        Ô€              C  x   x   €<                � ªª    E  T   =  
+                                                                     õ        Ô€              C  x   x   €<                � ªª    E  T   =  
 
-                                                                     7        Ô€                x   x   €<                P ªª    E  T   @  
+                                                                     8        Ô€                x   x   €<                P ªª    E  T   @  
 
-                                                                      !        Ô€              Š  x   x   €<                  ªª    E  T   ?  
+                                                                      "        Ô€              ‹  x   x   €<                  ªª    E  T   ?  
 
-                                                                              Ô€              Y  x   x   €<                � ªª    E  T   >  
+                                                                              Ô€              Y  x   x   €<                � ªª    E  T   >  
 
                                                                       ‰0  T   T   €  ÿÿÿÿÿÿ            ªª    E  0     
 
@@ -74,19 +74,19 @@
 
 ÿŽŽ      
     
-  Ð       X T   T   €  ÿÿÿÿÿÿ          ` ªª    E  0     
+  Ð       X T   T   €  ÿÿÿÿÿÿ          ` ªª    E  0     
 
 ÿŽŽ      
     
-  Ð               Ô€              å  x   x   €<                ° ªª    E  T   >  
+  Ð               Ô€              å  x   x   €<                ° ªª    E  T   >  
 
-                                                                     õ        Ô€              C  x   x   €<                À ªª    E  T   =  
+                                                                     õ        Ô€              C  x   x   €<                À ªª    E  T   =  
 
-                                                                     7        Ô€                x   x   €<                p ªª    E  T   @  
+                                                                     8        Ô€                x   x   €<                p ªª    E  T   @  
 
-                                                                      !        Ô€              Š  x   x   €<                Ð ªª    E  T   ?  
+                                                                      "        Ô€              ‹  x   x   €<                Ð ªª    E  T   ?  
 
-                                                                              Ô€              Y  x   x   €<                À ªª    E  T   >  
+                                                                              Ô€              Y  x   x   €<                À ªª    E  T   >  
 
                                                                       é   T   T   €  ÿÿÿÿÿÿ          Ð ªª    E  0     
 
@@ -96,19 +96,19 @@
 
 ÿŽŽ      
     
-  Ð        ö  T   T   €  ÿÿÿÿÿÿ          € ªª    E  0     
+  Ð        ö  T   T   €  ÿÿÿÿÿÿ          € ªª    E  0     
 
 ÿŽŽ      
     
-  Ð               Ô€              å  x   x   €<                à ªª    E  T   >  
+  Ð               Ô€              å  x   x   €<                à ªª    E  T   >  
 
-                                                                     õ        Ô€              C  x   x   €<                ð ªª    E  T   =  
+                                                                     õ        Ô€              C  x   x   €<                ð ªª    E  T   =  
 
-                                                                     7        Ô€                x   x   €<                � ªª    E  T   @  
+                                                                     8        Ô€                x   x   €<                � ªª    E  T   @  
 
-                                                                      !        Ô€              ä  x   x   €<                 ªª    E  T   ?  
+                                                                      "        Ô€              å  x   x   €<                 ªª    E  T   ?  
 
-                                                                      Ù        Ô€              ³  x   x   €<                ð ªª    E  T   >  
+                                                                      Ù        Ô€              ³  x   x   €<                ð ªª    E  T   >  
 
                                                                       D  T   T   €  ÿÿÿÿÿÿ           ªª    E  0     
 
@@ -118,7 +118,7 @@
 
 ÿŽŽ      
     
-  Ð        T   T   €  ÿÿÿÿÿÿ            ªª    E  0     
+  Ð        T   T   €  ÿÿÿÿÿÿ            ªª    E  0     
 
 ÿŽŽ      
     
@@ -126,7 +126,7 @@
 
 ÿŽŽ      
     
-  Ð        T   T   €  ÿÿÿÿÿÿ          ° ªª    E  0 	    
+  Ð        T   T   €  ÿÿÿÿÿÿ          ° ªª    E  0     
 
 ÿŽŽ      
     
@@ -134,8 +134,7 @@
 
 ÿŽŽ      
     
-  Ð       ˆú  T   T   €  ÿÿÿÿÿÿ          À ªª    E  0 
-    
+  Ð       ˆú  T   T   €  ÿÿÿÿÿÿ          À ªª    E  0     
 
 ÿŽŽ      
     
@@ -143,11 +142,11 @@
 
 ÿŽŽ      
     
-  Ð       z T   T   €<                Pªª    E  0 	    
+  Ð       { T   T   €<                Pªª    E  0 	    
 
 ŽŽ     
    
-           ?       Ô€              È T   T   €  ÿÿÿÿÿÿ          Ð ªª    E  0     
+           ?       Ô€              È T   T   €  ÿÿÿÿÿÿ          Ð ªª    E  0     
 
 ÿŽŽ      
     
@@ -156,7 +155,7 @@
 
 ÿŽŽ      
     
-  Ð       à T   T   €  ÿÿÿÿÿÿ          à ªª    E  0     
+  Ð       à T   T   €  ÿÿÿÿÿÿ          à ªª    E  0     
 
 ÿŽŽ      
     
@@ -164,7 +163,7 @@
 
 ÿŽŽ      
     
-  Ð       ˆú  T   T   €  ÿÿÿÿÿÿ          ð ªª    E  0     
+  Ð       ˆú  T   T   €  ÿÿÿÿÿÿ          ð ªª    E  0 	    
 
 ÿŽŽ      
     
@@ -172,7 +171,8 @@
 
 ÿŽŽ      
     
-  Ð    	   X T   T   €  ÿÿÿÿÿÿ           ªª    E  0     
+  Ð    	   X T   T   €  ÿÿÿÿÿÿ           ªª    E  0 
+    
 
 ÿŽŽ      
     
diff -Naur ns-3.19/src/aodv/test/aodv-chain-regression-test-4-0.pcap ns-3.20/src/aodv/test/aodv-chain-regression-test-4-0.pcap
--- ns-3.19/src/aodv/test/aodv-chain-regression-test-4-0.pcap	2014-06-17 10:34:00.444636615 -0700
+++ ns-3.20/src/aodv/test/aodv-chain-regression-test-4-0.pcap	2014-06-17 10:33:13.774996880 -0700
@@ -16,7 +16,7 @@
     
   +¿         v        Ô€               ¼‰  @   @   €  ÿÿÿÿÿÿ          0 ªª           
 ÿÿÿÿÿÿ
-        ŠŠ        Ô€               a‹  T   T   €<                @ ªª    E  0     
+        ‹Š        Ô€               b‹  T   T   €<                @ ªª    E  0     
 
 ŽŽ     
     
@@ -28,53 +28,53 @@
      
         Àò        Ô€               ýó  x   x   €<                p ªª    E  T    =  
 
-                                                                       ô        Ô€               [ô  x   x   €<                0 ªª    E  T   @  
+                                                                       ô        Ô€               [ô  x   x   €<                0 ªª    E  T    @  
 
-                                                                        Oõ        Ô€               §ö  x   x   €<                € ªª    E  T   ?  
+                                                                        Põ        Ô€               ¨ö  x   x   €<                € ªª    E  T    ?  
 
-                                                                        X T   T   €  ÿÿÿÿÿÿ          @ ªª    E  0     
+                                                                        X T   T   €  ÿÿÿÿÿÿ          @ ªª    E  0     
 
 ÿŽŽ      
     
-  Ð       !        Ô€              û  x   x   €<                � ªª    E  T   =  
+  Ð       !        Ô€              û  x   x   €<                � ªª    E  T   =  
 
-                                                                             Ô€              Y  x   x   €<                P ªª    E  T   @  
+                                                                             Ô€              Y  x   x   €<                P ªª    E  T   @  
 
-                                                                      N        Ô€              C  x   x   €<                  ªª    E  T   ?  
+                                                                      N        Ô€              C  x   x   €<                  ªª    E  T   ?  
 
                                                                       ¹@  T   T   €  ÿÿÿÿÿÿ          ° ªª    E  0     
 
 ÿŽŽ      
     
-  Ð       Ð T   T   €  ÿÿÿÿÿÿ          ` ªª    E  0     
+  Ð       Ð T   T   €  ÿÿÿÿÿÿ          ` ªª    E  0     
 
 ÿŽŽ      
     
-  Ð       !        Ô€              û  x   x   €<                À ªª    E  T   =  
+  Ð       !        Ô€              û  x   x   €<                À ªª    E  T   =  
 
-                                                                             Ô€              Y  x   x   €<                p ªª    E  T   @  
+                                                                             Ô€              Y  x   x   €<                p ªª    E  T   @  
 
-                                                                      N        Ô€              C  x   x   €<                Ð ªª    E  T   ?  
+                                                                      N        Ô€              C  x   x   €<                Ð ªª    E  T   ?  
 
                                                                       ‰H  T   T   €  ÿÿÿÿÿÿ          à ªª    E  0     
 
 ÿŽŽ      
     
-  Ð       ö  T   T   €  ÿÿÿÿÿÿ          € ªª    E  0     
+  Ð       ö  T   T   €  ÿÿÿÿÿÿ          € ªª    E  0     
 
 ÿŽŽ      
     
-  Ð       !        Ô€              û  x   x   €<                ð ªª    E  T   =  
+  Ð       !        Ô€              û  x   x   €<                ð ªª    E  T   =  
 
-                                                                             Ô€              Y  x   x   €<                � ªª    E  T   @  
+                                                                             Ô€              Y  x   x   €<                � ªª    E  T   @  
 
-                                                                      N        Ô€              �  x   x   €<                 ªª    E  T   ?  
+                                                                      N        Ô€              �  x   x   €<                 ªª    E  T   ?  
 
                                                                       AT  T   T   €  ÿÿÿÿÿÿ          ªª    E  0     
 
 ÿŽŽ      
     
-  Ð       ˆ T   T   €  ÿÿÿÿÿÿ            ªª    E  0     
+  Ð       ˆ T   T   €  ÿÿÿÿÿÿ            ªª    E  0     
 
 ÿŽŽ      
     
@@ -82,7 +82,7 @@
 
 ÿŽŽ      
     
-  Ð       ˆ T   T   €  ÿÿÿÿÿÿ          ° ªª    E  0 	    
+  Ð       ˆ T   T   €  ÿÿÿÿÿÿ          ° ªª    E  0     
 
 ÿŽŽ      
     
@@ -90,8 +90,7 @@
 
 ÿŽŽ      
     
-  Ð        ú  T   T   €  ÿÿÿÿÿÿ          À ªª    E  0 
-    
+  Ð        ú  T   T   €  ÿÿÿÿÿÿ          À ªª    E  0     
 
 ÿŽŽ      
     
@@ -103,7 +102,7 @@
 
 ŽŽ     
    
-                  Ô€              @ T   T   €  ÿÿÿÿÿÿ          Ð ªª    E  0     
+                  Ô€              @ T   T   €  ÿÿÿÿÿÿ          Ð ªª    E  0     
 
 ÿŽŽ      
     
@@ -112,7 +111,7 @@
 
 ÿŽŽ      
     
-  Ð       X T   T   €  ÿÿÿÿÿÿ          à ªª    E  0     
+  Ð       X T   T   €  ÿÿÿÿÿÿ          à ªª    E  0     
 
 ÿŽŽ      
     
@@ -120,7 +119,7 @@
 
 ÿŽŽ      
     
-  Ð        ú  T   T   €  ÿÿÿÿÿÿ          ð ªª    E  0     
+  Ð        ú  T   T   €  ÿÿÿÿÿÿ          ð ªª    E  0 	    
 
 ÿŽŽ      
     
@@ -128,7 +127,8 @@
 
 ÿŽŽ      
     
-  Ð    	   Ð T   T   €  ÿÿÿÿÿÿ           ªª    E  0     
+  Ð    	   Ð T   T   €  ÿÿÿÿÿÿ           ªª    E  0 
+    
 
 ÿŽŽ      
     
diff -Naur ns-3.19/src/aodv/test/aodv-regression.cc ns-3.20/src/aodv/test/aodv-regression.cc
--- ns-3.19/src/aodv/test/aodv-regression.cc	2014-06-17 10:34:00.445636607 -0700
+++ ns-3.20/src/aodv/test/aodv-regression.cc	2014-06-17 10:33:13.775996872 -0700
@@ -44,8 +44,8 @@
 #include "ns3/rng-seed-manager.h"
 #include <sstream>
 
-namespace ns3 {
-namespace aodv {
+using namespace ns3;
+using namespace aodv;
 //-----------------------------------------------------------------------------
 // Test suite
 //-----------------------------------------------------------------------------
@@ -192,6 +192,3 @@
       NS_PCAP_TEST_EXPECT_EQ (m_prefix << "-" << i << "-0.pcap");
     }
 }
-
-}
-}
diff -Naur ns-3.19/src/aodv/test/aodv-regression.h ns-3.20/src/aodv/test/aodv-regression.h
--- ns-3.19/src/aodv/test/aodv-regression.h	2014-06-17 10:34:00.445636607 -0700
+++ ns-3.20/src/aodv/test/aodv-regression.h	2014-06-17 10:33:13.776996865 -0700
@@ -25,8 +25,7 @@
 #include "ns3/nstime.h"
 #include "ns3/node-container.h"
 
-namespace ns3 {
-namespace aodv {
+using namespace ns3;
 
 /**
  * \ingroup aodv
@@ -189,7 +188,4 @@
   void DoRun ();
 };
 
-}
-}
-
 #endif /* AODV_REGRESSION_H */
diff -Naur ns-3.19/src/aodv/test/bug-606-test-0-0.pcap ns-3.20/src/aodv/test/bug-606-test-0-0.pcap
--- ns-3.19/src/aodv/test/bug-606-test-0-0.pcap	2014-06-17 10:34:00.447636592 -0700
+++ ns-3.20/src/aodv/test/bug-606-test-0-0.pcap	2014-06-17 10:33:13.777996857 -0700
@@ -1,4 +1,4 @@
-ÔÃ²¡          ÿÿ  i       Ð  X   X   €  ÿÿÿÿÿÿ            ªª    E  4     
+ÔÃ²¡          ÿÿ  i       Ð  X   X   €  ÿÿÿÿÿÿ            ªª    E  4      
 
 ÿŽŽ    (     
     
@@ -18,11 +18,11 @@
     
   +¿        ‰K        Ô€               1W  @   @   €  ÿÿÿÿÿÿ            ªª           
 ÿÿÿÿÿÿ
-        3X  @   @   €<                @ ªª           
+        4X  @   @   €<                @ ªª           
      
-        CX        Ô€               ëX  x   x   €<                0 ªª    E  T    @  
+        DX        Ô€               ìX  x   x   €<                0 ªª    E  T    @  
 
-                                                                       àY        Ô€               Hq  T   T   €  ÿÿÿÿÿÿ          @ ªª    E  0     
+                                                                       àY        Ô€               Hq  T   T   €  ÿÿÿÿÿÿ          @ ªª    E  0     
 
 ÿŽŽ      
    
@@ -30,19 +30,19 @@
 ÿÿÿÿÿÿ
         #z        Ô€               W{  x   x   €<                ` ªª    E  T    ?  
 
-                                                                       ¼|        Ô€               Þ}  x   x   €<                p ªª    E  T   ?  
+                                                                       ¼|        Ô€               Þ}  x   x   €<                p ªª    E  T    ?  
 
-                                                                        î}        Ô€                  x   x   €<                P ªª    E  T   @  
+                                                                        î}        Ô€                  x   x   €<                P ªª    E  T   @  
 
-                                                                     ô         Ô€              Î  x   x   €<                € ªª    E  T   ?  
+                                                                     ô         Ô€              Î  x   x   €<                € ªª    E  T   ?  
 
-                                                                     !        Ô€              1  x   x   €<                � ªª    E  T   ?  
+                                                                     !        Ô€              1  x   x   €<                � ªª    E  T   ?  
 
                                                                       A        Ô€              ¸  T   T   €  ÿÿÿÿÿÿ            ªª    E  0     
 
 ÿŽŽ      
     
-  Ð       Hq  T   T   €  ÿÿÿÿÿÿ          ` ªª    E  0     
+  Ð       Hq  T   T   €  ÿÿÿÿÿÿ          ` ªª    E  0     
 
 ÿŽŽ      
    
@@ -50,7 +50,7 @@
 ÿÿÿÿÿÿ
        *$  @   @   €<                ° ªª           
      
-       :$        Ô€              ý$  x   x   €<                € ªª    E  T   @  
+       :$        Ô€              ý$  x   x   €<                € ªª    E  T   @  
 
                                                                      ò%        Ô€              ø/  T   T   €  ÿÿÿÿÿÿ          À ªª    E  0     
 
@@ -58,68 +58,68 @@
     
   Ð       fE  @   @   €  ÿÿÿÿÿÿ          Ð ªª           
 ÿÿÿÿÿÿ
-       5F        Ô€              �G  x   x   €<                à ªª    E  T   ?  
+       5F        Ô€              �G  x   x   €<                à ªª    E  T   ?  
 
-                                                                     R  T   T   €  ÿÿÿÿÿÿ          � ªª    E  0     
+                                                                     R  T   T   €  ÿÿÿÿÿÿ          � ªª    E  0     
 
 ÿŽŽ      
    
   Ð       \  @   @   €<                ð ªª           
      
-       …]        Ô€              ù|  @   @   €  ÿÿÿÿÿÿ           ªª           
+       †]        Ô€              ú|  @   @   €  ÿÿÿÿÿÿ           ªª           
 ÿÿÿÿÿÿ
-       }  @   @   €<                  ªª           
+       }  @   @   €<                  ªª           
      
-       È}        Ô€              ê~  x   x   €<                ªª    E  T   ?  
+       È}        Ô€              ê~  x   x   €<                ªª    E  T   ?  
 
-                                                                      ú~        Ô€                  x   x   €<                ° ªª    E  T   @  
+                                                                      ú~        Ô€                  x   x   €<                ° ªª    E  T   @  
 
-                                                                     ô         Ô€              Î  x   x   €<                 ªª    E  T   ?  
+                                                                     ô         Ô€              Î  x   x   €<                 ªª    E  T   ?  
 
-                                                                     !        Ô€                x   x   €<                0ªª    E  T   ?  
+                                                                     !        Ô€                x   x   €<                0ªª    E  T   ?  
 
                                                                               Ô€              ¸  T   T   €  ÿÿÿÿÿÿ          @ªª    E  0     
 
 ÿŽŽ      
     
-  Ð       �e  T   T   €  ÿÿÿÿÿÿ          À ªª    E  0     
+  Ð       �e  T   T   €  ÿÿÿÿÿÿ          À ªª    E  0     
 
 ÿŽŽ      
    
   Ð       (#  @   @   €  ÿÿÿÿÿÿ          Ð ªª           
 ÿÿÿÿÿÿ
-       0u  T   T   €  ÿÿÿÿÿÿ          à ªª    E  0 
-    
+       0u  T   T   €  ÿÿÿÿÿÿ          à ªª    E  0     
 
 ÿŽŽ      
    
   Ð           @   @   €  ÿÿÿÿÿÿ          ð ªª           
 ÿÿÿÿÿÿ
-       ðU  T   T   €  ÿÿÿÿÿÿ           ªª    E  0     
+       ðU  T   T   €  ÿÿÿÿÿÿ           ªª    E  0     
 
 ÿŽŽ      
    
   Ð           @   @   €  ÿÿÿÿÿÿ          ªª           
 ÿÿÿÿÿÿ
-       Hq  T   T   €  ÿÿÿÿÿÿ           ªª    E  0     
+       Hq  T   T   €  ÿÿÿÿÿÿ           ªª    E  0     
 
 ÿŽŽ      
    
   Ð           @   @   €  ÿÿÿÿÿÿ          0ªª           
 ÿÿÿÿÿÿ
-       Ð  X   X   €  ÿÿÿÿÿÿ          @ªª    E  4     
+       Ð  X   X   €  ÿÿÿÿÿÿ          @ªª    E  4     
 
 ÿŽŽ          
     
-          '  T   T   €  ÿÿÿÿÿÿ          Pªª    E  0     
+          '  T   T   €  ÿÿÿÿÿÿ          Pªª    E  0 	    
 
 ÿŽŽ      
    
-  Ð    	   (#  T   T   €  ÿÿÿÿÿÿ          `ªª    E  0     
+  Ð    	   (#  T   T   €  ÿÿÿÿÿÿ          `ªª    E  0 
+    
 
 ÿŽŽ      
    
-  Ð    	   ·@ X   X   €  ÿÿÿÿÿÿ          pªª    E  4     
+  Ð    	   ·@ X   X   €  ÿÿÿÿÿÿ          pªª    E  4     
 
 ÿŽŽ          
     
diff -Naur ns-3.19/src/aodv/test/bug-606-test-1-0.pcap ns-3.20/src/aodv/test/bug-606-test-1-0.pcap
--- ns-3.19/src/aodv/test/bug-606-test-1-0.pcap	2014-06-17 10:34:00.447636592 -0700
+++ ns-3.20/src/aodv/test/bug-606-test-1-0.pcap	2014-06-17 10:33:13.778996849 -0700
@@ -1,4 +1,4 @@
-ÔÃ²¡          ÿÿ  i       `  X   X   €  ÿÿÿÿÿÿ            ªª    E  4     
+ÔÃ²¡          ÿÿ  i       `  X   X   €  ÿÿÿÿÿÿ            ªª    E  4      
 
 ÿŽŽ    (     
     
@@ -10,11 +10,11 @@
 ÿÿÿÿÿÿ
         Ã(  @   @   €<                 ªª           
      
-        o)        Ô€               *  T   T   €<                 ªª    E  0      
+        p)        Ô€               *  T   T   €<                 ªª    E  0      
 
 ŽŽ      
     
-  +¿        )*        Ô€               YI  @   @   €  ÿÿÿÿÿÿ            ªª           
+  +¿        **        Ô€               ZI  @   @   €  ÿÿÿÿÿÿ            ªª           
 ÿÿÿÿÿÿ
         \J  @   @   €<                 ªª           
      
@@ -28,7 +28,7 @@
      
         pX        Ô€               ¤Y  x   x   €<                0 ªª    E  T    @  
 
-                                                                       ´Y        Ô€               Ðq  T   T   €  ÿÿÿÿÿÿ          @ ªª    E  0     
+                                                                       ´Y        Ô€               Ðq  T   T   €  ÿÿÿÿÿÿ          @ ªª    E  0     
 
 ÿŽŽ      
    
@@ -38,31 +38,31 @@
      
         ÷y        Ô€               Ÿz  x   x   €<                ` ªª    E  T    ?  
 
-                                                                       “{        Ô€               |  x   x   €<                0 ªª    E  T   @  
+                                                                       ”{        Ô€               €|  x   x   €<                0 ªª    E  T    @  
 
-                                                                        �|        Ô€               %}  x   x   €<                p ªª    E  T   ?  
+                                                                        �|        Ô€               &}  x   x   €<                p ªª    E  T    ?  
 
-                                                                        ~        Ô€               (�  T   T   €  ÿÿÿÿÿÿ          @ ªª    E  0     
+                                                                        ~        Ô€               (�  T   T   €  ÿÿÿÿÿÿ          @ ªª    E  0     
 
 ÿŽŽ      
     
-  Ð       ¸   x   x   €<                P ªª    E  T   @  
+  Ð       ¸   x   x   €<                P ªª    E  T   @  
 
-                                                                     È         Ô€                x   x   €<                € ªª    E  T   ?  
+                                                                     È         Ô€                x   x   €<                € ªª    E  T   ?  
 
-                                                                             Ô€              å  x   x   €<                P ªª    E  T   @  
+                                                                             Ô€              å  x   x   €<                P ªª    E  T   @  
 
-                                                                      õ        Ô€              y  x   x   €<                � ªª    E  T   ?  
+                                                                      õ        Ô€              y  x   x   €<                � ªª    E  T   ?  
 
-                                                                      m        Ô€              0  T   T   €  ÿÿÿÿÿÿ            ªª    E  0     
+                                                                      n        Ô€              0  T   T   €  ÿÿÿÿÿÿ            ªª    E  0     
 
 ÿŽŽ      
     
-  Ð       Ðq  T   T   €  ÿÿÿÿÿÿ          ` ªª    E  0     
+  Ð       Ðq  T   T   €  ÿÿÿÿÿÿ          ` ªª    E  0     
 
 ÿŽŽ      
    
-  Ð       8´  T   T   €  ÿÿÿÿÿÿ          ` ªª    E  0     
+  Ð       8´  T   T   €  ÿÿÿÿÿÿ          ` ªª    E  0     
 
 ÿŽŽ      
     
@@ -70,7 +70,7 @@
 ÿÿÿÿÿÿ
        º#  @   @   €<                ° ªª           
      
-       g$        Ô€              ¶%  x   x   €<                € ªª    E  T   @  
+       g$        Ô€              ¶%  x   x   €<                € ªª    E  T   @  
 
                                                                      Æ%        Ô€              p/  T   T   €  ÿÿÿÿÿÿ          À ªª    E  0     
 
@@ -78,11 +78,11 @@
     
   Ð       öD  @   @   €  ÿÿÿÿÿÿ          Ð ªª           
 ÿÿÿÿÿÿ
-       øE  @   @   €<                p ªª           
+       ùE  @   @   €<                p ªª           
      
-       F        Ô€              ÔF  x   x   €<                à ªª    E  T   ?  
+       	F        Ô€              ÕF  x   x   €<                à ªª    E  T   ?  
 
-                                                                     ÉG        Ô€              �R  T   T   €  ÿÿÿÿÿÿ          � ªª    E  0     
+                                                                     ÉG        Ô€              �R  T   T   €  ÿÿÿÿÿÿ          � ªª    E  0     
 
 ÿŽŽ      
    
@@ -90,35 +90,35 @@
 ÿÿÿÿÿÿ
        §[  @   @   €<                ð ªª           
      
-       T\        Ô€              I]  x   x   €<                � ªª    E  T   @  
+       T\        Ô€              I]  x   x   €<                � ªª    E  T   @  
 
                                                                       Y]        Ô€              ‰|  @   @   €  ÿÿÿÿÿÿ           ªª           
 ÿÿÿÿÿÿ
        Œ}  @   @   €<                  ªª           
      
-       œ}        Ô€              2~  x   x   €<                ªª    E  T   ?  
+       œ}        Ô€              2~  x   x   €<                ªª    E  T   ?  
 
-                                                                      '        Ô€              ‘  T   T   €  ÿÿÿÿÿÿ            ªª    E  0     
+                                                                      '        Ô€              ‘  T   T   €  ÿÿÿÿÿÿ            ªª    E  0     
 
 ÿŽŽ      
     
-  Ð       ¸   x   x   €<                ° ªª    E  T   @  
+  Ð       ¸   x   x   €<                ° ªª    E  T   @  
 
-                                                                     È         Ô€                x   x   €<                 ªª    E  T   ?  
+                                                                     È         Ô€                x   x   €<                 ªª    E  T   ?  
 
-                                                                             Ô€              å  x   x   €<                ° ªª    E  T   @  
+                                                                             Ô€              å  x   x   €<                ° ªª    E  T   @  
 
-                                                                      õ        Ô€              L  x   x   €<                0ªª    E  T   ?  
+                                                                      õ        Ô€              L  x   x   €<                0ªª    E  T   ?  
 
-                                                                      @        Ô€              0  T   T   €  ÿÿÿÿÿÿ          @ªª    E  0     
+                                                                      A        Ô€              0  T   T   €  ÿÿÿÿÿÿ          @ªª    E  0     
 
 ÿŽŽ      
     
-  Ð       f  T   T   €  ÿÿÿÿÿÿ          À ªª    E  0     
+  Ð       f  T   T   €  ÿÿÿÿÿÿ          À ªª    E  0     
 
 ÿŽŽ      
    
-  Ð       ø”  T   T   €  ÿÿÿÿÿÿ          À ªª    E  0     
+  Ð       ø”  T   T   €  ÿÿÿÿÿÿ          À ªª    E  0     
 
 ÿŽŽ      
     
diff -Naur ns-3.19/src/aodv/test/bug-606-test-2-0.pcap ns-3.20/src/aodv/test/bug-606-test-2-0.pcap
--- ns-3.19/src/aodv/test/bug-606-test-2-0.pcap	2014-06-17 10:34:00.448636584 -0700
+++ ns-3.20/src/aodv/test/bug-606-test-2-0.pcap	2014-06-17 10:33:13.778996849 -0700
@@ -16,7 +16,7 @@
 
 ŽŽ     
     
-  +¿        3X  @   @   €<                @ ªª           
+  +¿        4X  @   @   €<                @ ªª           
      
         àY        Ô€               Ty  @   @   €  ÿÿÿÿÿÿ          P ªª           
 ÿÿÿÿÿÿ
@@ -24,25 +24,25 @@
      
         #z        Ô€               W{  x   x   €<                ` ªª    E  T    ?  
 
-                                                                       g{        Ô€               Ç{  x   x   €<                0 ªª    E  T   @  
+                                                                       g{        Ô€               Ç{  x   x   €<                0 ªª    E  T    @  
 
-                                                                        ¼|        Ô€               Þ}  x   x   €<                p ªª    E  T   ?  
+                                                                        ¼|        Ô€               Þ}  x   x   €<                p ªª    E  T    ?  
 
-                                                                         Œ  T   T   €  ÿÿÿÿÿÿ          @ ªª    E  0     
+                                                                         Œ  T   T   €  ÿÿÿÿÿÿ          @ ªª    E  0     
 
 ÿŽŽ      
     
-  Ð       ô         Ô€              Î  x   x   €<                € ªª    E  T   ?  
+  Ð       ô         Ô€              Î  x   x   €<                € ªª    E  T   ?  
 
-                                                                     Þ        Ô€              ,  x   x   €<                P ªª    E  T   @  
+                                                                     Þ        Ô€              ,  x   x   €<                P ªª    E  T   @  
 
-                                                                      !        Ô€              1  x   x   €<                � ªª    E  T   ?  
+                                                                      !        Ô€              1  x   x   €<                � ªª    E  T   ?  
 
                                                                       ¸  T   T   €  ÿÿÿÿÿÿ            ªª    E  0     
 
 ÿŽŽ      
     
-  Ð       °³  T   T   €  ÿÿÿÿÿÿ          ` ªª    E  0     
+  Ð       °³  T   T   €  ÿÿÿÿÿÿ          ` ªª    E  0     
 
 ÿŽŽ      
     
@@ -56,58 +56,58 @@
 ÿÿÿÿÿÿ
        ˆE  @   @   €<                p ªª           
      
-       5F        Ô€              �G  x   x   €<                à ªª    E  T   ?  
+       5F        Ô€              �G  x   x   €<                à ªª    E  T   ?  
 
                                                                      �G        Ô€              [  @   @   €  ÿÿÿÿÿÿ          € ªª           
 ÿÿÿÿÿÿ
        \  @   @   €<                ð ªª           
      
-       (\        Ô€              ‘\  x   x   €<                � ªª    E  T   @  
+       (\        Ô€              ‘\  x   x   €<                � ªª    E  T   @  
 
-                                                                      …]        Ô€              ù|  @   @   €  ÿÿÿÿÿÿ           ªª           
+                                                                      †]        Ô€              ú|  @   @   €  ÿÿÿÿÿÿ           ªª           
 ÿÿÿÿÿÿ
-       È}        Ô€              ê~  x   x   €<                ªª    E  T   ?  
+       È}        Ô€              ê~  x   x   €<                ªª    E  T   ?  
 
-                                                                      ˆ�  T   T   €  ÿÿÿÿÿÿ            ªª    E  0     
+                                                                      ˆ�  T   T   €  ÿÿÿÿÿÿ            ªª    E  0     
 
 ÿŽŽ      
     
-  Ð       ô         Ô€              Î  x   x   €<                 ªª    E  T   ?  
+  Ð       ô         Ô€              Î  x   x   €<                 ªª    E  T   ?  
 
-                                                                     Þ        Ô€              ,  x   x   €<                ° ªª    E  T   @  
+                                                                     Þ        Ô€              ,  x   x   €<                ° ªª    E  T   @  
 
-                                                                      !        Ô€                x   x   €<                0ªª    E  T   ?  
+                                                                      !        Ô€                x   x   €<                0ªª    E  T   ?  
 
                                                                       ¸  T   T   €  ÿÿÿÿÿÿ          @ªª    E  0     
 
 ÿŽŽ      
     
-  Ð       p”  T   T   €  ÿÿÿÿÿÿ          À ªª    E  0     
+  Ð       p”  T   T   €  ÿÿÿÿÿÿ          À ªª    E  0     
 
 ÿŽŽ      
     
-  Ð       È¯  T   T   €  ÿÿÿÿÿÿ          Ð ªª    E  0 	    
+  Ð       È¯  T   T   €  ÿÿÿÿÿÿ          Ð ªª    E  0     
 
 ÿŽŽ      
     
-  Ð       @œ  T   T   €  ÿÿÿÿÿÿ          à ªª    E  0 
-    
+  Ð       @œ  T   T   €  ÿÿÿÿÿÿ          à ªª    E  0     
 
 ÿŽŽ      
     
-  Ð        Œ  T   T   €  ÿÿÿÿÿÿ          ð ªª    E  0     
+  Ð        Œ  T   T   €  ÿÿÿÿÿÿ          ð ªª    E  0     
 
 ÿŽŽ      
     
-  Ð       °³  T   T   €  ÿÿÿÿÿÿ           ªª    E  0     
+  Ð       °³  T   T   €  ÿÿÿÿÿÿ           ªª    E  0     
 
 ÿŽŽ      
     
-  Ð       X˜  T   T   €  ÿÿÿÿÿÿ          ªª    E  0     
+  Ð       X˜  T   T   €  ÿÿÿÿÿÿ          ªª    E  0 	    
 
 ÿŽŽ      
     
-  Ð    	   @œ  T   T   €  ÿÿÿÿÿÿ           ªª    E  0     
+  Ð    	   @œ  T   T   €  ÿÿÿÿÿÿ           ªª    E  0 
+    
 
 ÿŽŽ      
     
diff -Naur ns-3.19/src/aodv/test/bug-772.cc ns-3.20/src/aodv/test/bug-772.cc
--- ns-3.19/src/aodv/test/bug-772.cc	2014-06-17 10:34:00.448636584 -0700
+++ ns-3.20/src/aodv/test/bug-772.cc	2014-06-17 10:33:13.779996841 -0700
@@ -48,8 +48,7 @@
 #include "ns3/pcap-test.h"
 #include <sstream>
 
-namespace ns3 {
-namespace aodv {
+using namespace ns3;
 
 //-----------------------------------------------------------------------------
 // UdpChainTest
@@ -146,7 +145,7 @@
   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 (1200));
+  onoff.SetAttribute ("PacketSize", UintegerValue (1000));
   ApplicationContainer app = onoff.Install (m_nodes->Get (0));
   app.Start (Seconds (1.0));
   app.Stop (m_time);
@@ -167,6 +166,3 @@
       NS_PCAP_TEST_EXPECT_EQ(m_prefix << "-" << i << "-0.pcap");
     }
 }
-
-}
-}
diff -Naur ns-3.19/src/aodv/test/bug-772.h ns-3.20/src/aodv/test/bug-772.h
--- ns-3.19/src/aodv/test/bug-772.h	2014-06-17 10:34:00.449636577 -0700
+++ ns-3.20/src/aodv/test/bug-772.h	2014-06-17 10:33:13.779996841 -0700
@@ -25,8 +25,7 @@
 #include "ns3/nstime.h"
 #include "ns3/node-container.h"
 
-namespace ns3 {
-namespace aodv {
+using namespace ns3;
 
 /**
  * \ingroup aodv
@@ -74,7 +73,4 @@
   void DoRun ();
 };
 
-}
-}
-
 #endif /* BUG_772_H */
diff -Naur ns-3.19/src/aodv/test/tcp-chain-test-0-0.pcap ns-3.20/src/aodv/test/tcp-chain-test-0-0.pcap
--- ns-3.19/src/aodv/test/tcp-chain-test-0-0.pcap	2014-06-17 10:34:00.451636561 -0700
+++ ns-3.20/src/aodv/test/tcp-chain-test-0-0.pcap	2014-06-17 10:33:13.782996818 -0700
@@ -6,7 +6,7 @@
 
 ÿŽŽ      
     
-  Ð       @  X   X   €  ÿÿÿÿÿÿ           ªª    E  4     
+  Ð       @  X   X   €  ÿÿÿÿÿÿ           ªª    E  4     
 
 ÿŽŽ    (     
 
@@ -18,9 +18,9 @@
     
           G( @   @   €<                  ªª           
      
-       ±)       Ô€              Í- @   @   €  ÿÿÿÿÿÿ          0 ªª           
+       ²)       Ô€              Î- @   @   €  ÿÿÿÿÿÿ          0 ªª           
 ÿÿÿÿÿÿ
-       ï- @   @   €<                  ªª           
+       ð- @   @   €<                  ªª           
      
        œ.       Ô€              Í/ T   T   €<                @ ªª    E  0     
 
@@ -31,270 +31,307 @@
 ÿÿÿÿÿÿ
        øS @   @   €<                P ªª           
      
-       T       Ô€              VT L   L   €<                @ ªª    E  (   @  
+       T       Ô€              VT L   L   €<                @ ªª    E  (    @  
 
 
 À 	        Pÿÿ           U       Ô€              /Y @   @   €  ÿÿÿÿÿÿ          ` ªª           
 ÿÿÿÿÿÿ
-       þY       Ô€              úZ L   L   €<                p ªª    E  (   ?  
+       þY       Ô€              úZ L   L   €<                p ªª    E  (    ?  
 
 
-À 	        Pÿÿ           ‰Ù       Ô€              +Ú L   L   €<                € ªª    E  (   8  
+À 	        Pÿÿ           ‰Ù       Ô€              +Ú L   L   €<                € ªª    E  (    8  
 
 
- 	À       Pÿÿ           ;Ú       Ô€              ‰Ú L   L   €<                P ªª    E  (   @  
+ 	À       Pÿÿ           ;Ú       Ô€              ‰Ú L   L   €<                P ªª    E  (   @  
 
 
-À 	      Pÿÿ           FÛ       Ô€              Ü L   L   €<                � ªª    E  (   ?  
+À 	      Pÿÿ           FÛ       Ô€              Ü L   L   €<                � ªª    E  (   ?  
 
 
-À 	      Pÿÿ           ïI d  d  €<                ` ªª    E @   @  
+À 	      Pÿÿ           Hè d  d  €<                ` ªª    E @   @  
 
 
-À 	      Pÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   tM       Ô€              ÞP d  d  €<                  ªª    E @   ?  
+À 	      Pÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   Ìë       Ô€              6ï d  d  €<                  ªª    E @   ?  
 
 
-À 	      Pÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   ¿q       Ô€              ar L   L   €<                ° ªª    E  (   8  
+À 	      Pÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Ô€              ¹ L   L   €<                ° ªª    E  (   8  
 
 
- 	À     Pÿÿ           qr       Ô€              ¿r d  d  €<                p ªª    E @   @  
+ 	À     Pÿÿ           É       Ô€                   €<                p ªª    E ø   @  
 
 
-À 	     Pÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   Cv       Ô€              Ñy d  d  €<                À ªª    E @   ?  
+À 	     Pÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           <       Ô€              j     €<                À ªª    E ø   ?  
 
 
-À 	     Pÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   €z Ì   Ì   €<                € ªª    E  ¨   @  
+À 	     Pÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           �Ð d  d  €<                € ªª    E @   @  
 
 
-À 	  1   Pÿÿ                                                                                                                                           Û| Ì   Ì   ˆ<                € ªª    E  ¨   @  
+À 	  é   Pÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   Ô       Ô€              ~× d  d  €<                Ð ªª    E @   ?  
 
 
-À 	  1   Pÿÿ                                                                                                                                           ž€ Ì   Ì   ˆ<                € ªª    E  ¨   @  
+À 	  é   Pÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   ƒø       Ô€              %ù L   L   €<                à ªª    E  (   8  
+
+
+ 	À     Pÿÿ           5ù       Ô€              ƒù     €<                � ªª    E ø   @  
 
 
-À 	  1   Pÿÿ                                                                                                                                           ‚       Ô€              Mƒ Ì   Ì   €<                Ð ªª    E  ¨   ?  
+À 	     Pÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           ¨ü       Ô€              Íÿ     €<                ð ªª    E ø   ?  
 
 
-À 	  1   Pÿÿ                                                                                                                                           X        Ô€              ú  L   L   €<                à ªª    E  (   8  
+À 	     Pÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           Ø¸ d  d  €<                  ªª    E @   @  
+
 
-
- 	À     ±Pÿÿ           
-¡       Ô€              ß“ d  d  €<                � ªª    E @   @  
+À 	  Ñ   Pÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   \¼       Ô€              ~¼     €<                ° ªª    E ø   @  
 
 
-À 	  ±   Pÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   d—       Ô€              Îš d  d  €<                ð ªª    E @   ?  
+À 	  	é   Pÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           BÀ     ˆ<                ° ªª    E ø   @  
 
 
-À 	  ±   Pÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   Y› d  d  €<                  ªª    E @   @  
+À 	  	é   Pÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           BÄ     ˆ<                ° ªª    E ø   @  
 
 
-À 	  É   Pÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   _Ÿ d  d  ˆ<                  ªª    E @   @  
+À 	  	é   Pÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           gÇ       Ô€              qÊ     €<                ªª    E ø   ?  
 
 
-À 	  É   Pÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   ä¢       Ô€              N¦ d  d  €<                 ªª    E @   ?  
+À 	  	é   Pÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           
+ü       Ô€              ¬ü L   L   €<                 ªª    E  (   8  
+
+
+ 	À     	éPÿÿ           ¼ü       Ô€               ¡ d  d  €<                À ªª    E @   @  
 
 
-À 	  É   Pÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   Ç¦ Ì   Ì   €<                ° ªª    E  ¨ 	  @  
+À 	  ¹   Pÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   ¤¤       Ô€              ¨ d  d  €<                0ªª    E @   ?  
 
 
-À 	  á   Pÿÿ                                                                                                                                           ,¨       Ô€              £© Ì   Ì   €<                ªª    E  ¨ 	  ?  
+À 	  ¹   Pÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   ~¨     €<                Ð ªª    E ø 	  @  
 
 
-À 	  á   Pÿÿ                                                                                                                                           QÐ       Ô€              óÐ L   L   €<                 ªª    E  (   8  
+À 	  Ñ   Pÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           ´¬     ˆ<                Ð ªª    E ø 	  @  
+
+
+À 	  Ñ   Pÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           Ù¯       Ô€              ã²     €<                @ªª    E ø 	  ?  
+
+
+À 	  Ñ   Pÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           Ò       Ô€              ÁÒ L   L   €<                Pªª    E  (   8  
 
 
- 	À     áPÿÿ           Ñ       Ô€              ÏÝ d  d  €<                À ªª    E @ 
+ 	À     ÑPÿÿ           ÑÒ       Ô€              h‰	 d  d  €<                à ªª    E @ 
   @  
 
 
-À 	  	a   Pÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   Tá       Ô€              ¾ä d  d  €<                0ªª    E @ 
+À 	  ¡   Pÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   ìŒ	       Ô€              V�	 d  d  €<                `ªª    E @ 
   ?  
 
 
-À 	  	a   Pÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   ˆå d  d  €<                Ð ªª    E @   @  
+À 	  ¡   Pÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   ‘	     €<                ð ªª    E ø   @  
 
 
-À 	  y   Pÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   aé d  d  ˆ<                Ð ªª    E @   @  
+À 	  ¹   Pÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           )•	     ˆ<                ð ªª    E ø   @  
 
 
-À 	  y   Pÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   æì       Ô€              Pð d  d  €<                @ªª    E @   ?  
+À 	  ¹   Pÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           N˜	       Ô€              X›	     €<                pªª    E ø   ?  
 
 
-À 	  y   Pÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   ñ Ì   Ì   €<                à ªª    E  ¨   @  
+À 	  ¹   Pÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           aº	       Ô€              »	 L   L   €<                €ªª    E  (   8  
+
+
+ 	À     ¹Pÿÿ           »	       Ô€              °q d  d  €<                 ªª    E @   @  
 
 
-À 	  ‘   Pÿÿ                                                                                                                                           có Ì   Ì   ˆ<                à ªª    E  ¨   @  
+À 	  ‰   Pÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   4u       Ô€              žx d  d  €<                �ªª    E @   ?  
 
 
-À 	  ‘   Pÿÿ                                                                                                                                           *ö Ì   Ì   ˆ<                à ªª    E  ¨   @  
+À 	  ‰   Pÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   )y     €<                ªª    E ø   @  
 
 
-À 	  ‘   Pÿÿ                                                                                                                                           �÷       Ô€              Ùø Ì   Ì   €<                Pªª    E  ¨   ?  
+À 	  ¡   Pÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           D}     ˆ<                ªª    E ø   @  
 
 
-À 	  ‘   Pÿÿ                                                                                                                                           aû Ì   Ì   ˆ<                Pªª    E  ¨   ?  
+À 	  ¡   Pÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           i€       Ô€              sƒ     €<                 ªª    E ø   ?  
 
 
-À 	  ‘   Pÿÿ                                                                                                                                                  Ô€              ¹ L   L   €<                `ªª    E  (   8  
+À 	  ¡   Pÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           -Ÿ       Ô€              ÏŸ L   L   €<                °ªª    E  (   8  
 
 
- 	À     yPÿÿ           É       Ô€              ¸%       Ô€              Z& L   L   €<                pªª    E  (   8  
-
-
- 	À     Pÿÿ           j&       Ô€              ¿'	 d  d  €<                ð ªª    E @   @  
+ 	À     ¡Pÿÿ           ßŸ       Ô€              øY d  d  €<                 ªª    E @   @  
 
 
-À 	     Pÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   D+	       Ô€              ®.	 d  d  €<                €ªª    E @   ?  
+À 	  q   Pÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |]       Ô€              æ` d  d  €<                Àªª    E @   ?  
 
 
-À 	     Pÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   o/	 d  d  €<                 ªª    E @   @  
+À 	  q   Pÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   ¹a     €<                0ªª    E ø   @  
 
 
-À 	  )   Pÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   24	 d  d  ˆ<                 ªª    E @   @  
+À 	  ‰   Pÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           Ýe     ˆ<                0ªª    E ø   @  
 
 
-À 	  )   Pÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   ·7	       Ô€              !;	 d  d  €<                �ªª    E @   ?  
+À 	  ‰   Pÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           i       Ô€              l     €<                Ðªª    E ø   ?  
 
 
-À 	  )   Pÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   ô;	 Ì   Ì   €<                ªª    E  ¨   @  
+À 	  ‰   Pÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            œ       Ô€              B� L   L   €<                àªª    E  (   8  
+
+
+ 	À     ‰Pÿÿ           R�       Ô€                  d  d  €<                @ªª    E @   @  
 
 
-À 	  A   Pÿÿ                                                                                                                                           X>	 Ì   Ì   ˆ<                ªª    E  ¨   @  
+À 	  Y   Pÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   „        Ô€              ¦      €<                Pªª    E ø   @  
 
 
-À 	  A   Pÿÿ                                                                                                                                           Å@	 Ì   Ì   ˆ<                ªª    E  ¨   @  
+À 	  q   Pÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 ˆ<                Pªª    E ø   @  
 
 
-À 	  A   Pÿÿ                                                                                                                                           *B	       Ô€              tC	 Ì   Ì   €<                 ªª    E  ¨   ?  
+À 	  q   Pÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           Ú
+      ˆ<                Pªª    E ø   @  
 
 
-À 	  A   Pÿÿ                                                                                                                                           �E	 Ì   Ì   ˆ<                 ªª    E  ¨   ?  
+À 	  q   Pÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           ÿ        Ô€              H      €<                 ªª    E ø   ?  
 
 
-À 	  A   Pÿÿ                                                                                                                                           {	       Ô€              ª{	 L   L   €<                °ªª    E  (   8  
+À 	  q   Pÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           Ê  T   T   €  ÿÿÿÿÿÿ          `ªª    E  0     
+
+ÿŽŽ      
+   
+  Ð       ‘;        Ô€              3<  L   L   €<                ªª    E  (   8  
 
 
- 	À     APÿÿ           º{	       Ô€              ¯q d  d  €<                 ªª    E @   @  
+ 	À     qPÿÿ           C<        Ô€              ˜?  T   T   €  ÿÿÿÿÿÿ           ªª    E  0     
+
+ÿŽŽ      
+    
+  Ð        ô @   @   €  ÿÿÿÿÿÿ          pªª           
+ÿÿÿÿÿÿ
+       õ @   @   €<                0ªª           
+     
+       õ       Ô€              „õ d  d  €<                €ªª    E @   @  
 
 
-À 	  Á   Pÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   4u       Ô€              Vu d  d  €<                0ªª    E @   @  
+À 	  A   Pÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   	ù       Ô€              Žù     €<                �ªª    E ø   @  
 
 
-À 	  Ù   Pÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   Ay d  d  ˆ<                0ªª    E @   @  
+À 	  !Y   Pÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           ³ü       Ô€               @   @   €  ÿÿÿÿÿÿ          @ªª           
+ÿÿÿÿÿÿ
+       Ü       Ô€              O d  d  €<                Pªª    E @   ?  
 
 
-À 	  Ù   Pÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   �~ d  d  ˆ<                0ªª    E @   @  
+À 	  A   Pÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   	     €<                `ªª    E ø   ?  
 
 
-À 	  Ù   Pÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   "‚       Ô€              Œ… d  d  €<                Ðªª    E @   ?  
-
+À 	  !Y   Pÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           ¶ò @   @   €<                pªª           
+     
+       Eô       Ô€              aø @   @   €  ÿÿÿÿÿÿ          €ªª           
+ÿÿÿÿÿÿ
+       ƒø @   @   €<                 ªª           
+     
+       0ù       Ô€              Yú L   L   €<                �ªª    E  ( 	  8  
 
-À 	  Ù   Pÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   D† Ì   Ì   €<                @ªª    E  ¨   @  
+
+ 	À     !YPÿÿ           iú       Ô€              �Ð d  d  €<                °ªª    E @   @  
 
 
-À 	  ñ   Pÿÿ                                                                                                                                           ©‡       Ô€              Œ Ì   Ì   €<                àªª    E  ¨   ?  
+À 	  #)   Pÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   Ô       Ô€              ~× d  d  €<                 ªª    E @   ?  
 
 
-À 	  ñ   Pÿÿ                                                                                                                                           ‡Ž Ì   Ì   ˆ<                àªª    E  ¨   ?  
+À 	  #)   Pÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   -Ø     €<                Àªª    E ø   @  
 
 
-À 	  ñ   Pÿÿ                                                                                                                                           ±‘ Ì   Ì   ˆ<                àªª    E  ¨   ?  
+À 	  %A   Pÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           $Ü     ˆ<                Àªª    E ø   @  
 
 
-À 	  ñ   Pÿÿ                                                                                                                                           é²       Ô€              ‹³ L   L   €<                ðªª    E  ( 	  8  
+À 	  %A   Pÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           Iß       Ô€              Sâ     €<                °ªª    E ø   ?  
+
 
-
- 	À     ÙPÿÿ           ›³       Ô€              yÁ       Ô€              Â L   L   €<                 ªª    E  ( 
+À 	  %A   Pÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           ƒ       Ô€              % L   L   €<                Àªª    E  ( 
   8  
 
 
- 	À     qPÿÿ           +Â       Ô€              Ÿ» d  d  €<                Pªª    E @   @  
+ 	À     %APÿÿ           5       Ô€              Ø¸ d  d  €<                Ðªª    E @   @  
 
 
-À 	  q   Pÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   $¿       Ô€              ŽÂ d  d  €<                ªª    E @   ?  
+À 	  '   Pÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   \¼       Ô€              Æ¿ d  d  €<                Ðªª    E @   ?  
 
 
-À 	  q   Pÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   OÃ d  d  €<                `ªª    E @   @  
+À 	  '   Pÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   HÀ     €<                àªª    E ø   @  
 
 
-À 	  ‰   Pÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   ÁÇ d  d  ˆ<                `ªª    E @   @  
+À 	  ))   Pÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           ™Ä     ˆ<                àªª    E ø   @  
 
 
-À 	  ‰   Pÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   FË       Ô€              °Î d  d  €<                 ªª    E @   ?  
+À 	  ))   Pÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           ¾Ç       Ô€              ÈÊ     €<                àªª    E ø   ?  
 
 
-À 	  ‰   Pÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   •Ï Ì   Ì   €<                pªª    E  ¨   @  
+À 	  ))   Pÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           wé       Ô€              ê L   L   €<                ðªª    E  (   8  
+
+
+ 	À     ))Pÿÿ           )ê       Ô€               ¡ d  d  €<                ðªª    E @   @  
 
 
-À 	  ¡   Pÿÿ                                                                                                                                           ÕÑ Ì   Ì   ˆ<                pªª    E  ¨   @  
+À 	  *ù   Pÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   ¤¤       Ô€              ¨ d  d  €<                 ªª    E @   ?  
 
 
-À 	  ¡   Pÿÿ                                                                                                                                           ®Ô Ì   Ì   ˆ<                pªª    E  ¨   @  
+À 	  *ù   Pÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   Ï¨     €<                 ªª    E ø   @  
 
 
-À 	  ¡   Pÿÿ                                                                                                                                           Ö       Ô€              ]× Ì   Ì   €<                0ªª    E  ¨   ?  
+À 	  -   Pÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           )­     ˆ<                 ªª    E ø   @  
 
 
-À 	  ¡   Pÿÿ                                                                                                                                           ÓÙ Ì   Ì   ˆ<                0ªª    E  ¨   ?  
+À 	  -   Pÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           N°       Ô€              X³     €<                ªª    E ø   ?  
 
 
-À 	  ¡   Pÿÿ                                                                                                                                           ¦õ       Ô€              Hö L   L   €<                @ªª    E  (   8  
+À 	  -   Pÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           ÏÛ       Ô€              qÜ L   L   €<                 ªª    E  (   8  
 
 
- 	À     ¡Pÿÿ           Xö       Ô€                 T   T   €  ÿÿÿÿÿÿ          €ªª    E  0     
+ 	À     -Pÿÿ           �Ü       Ô€              h‰	 d  d  €<                ªª    E @   @  
 
-ÿŽŽ      
-   
-  Ð       ˜?  T   T   €  ÿÿÿÿÿÿ          Pªª    E  0     
-
-ÿŽŽ      
-    
-  Ð       OÃ  d  d  €<                �ªª    E @   @  
+
+À 	  .á   Pÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   ìŒ	       Ô€              V�	 d  d  €<                0ªª    E @   ?  
 
 
-À 	  !   Pÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   ÔÆ        Ô€              >Ê  d  d  €<                `ªª    E @   ?  
+À 	  .á   Pÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   ê�	     €<                 ªª    E ø   @  
 
 
-À 	  !   Pÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   Ë  d  d  €<                 ªª    E @   @  
+À 	  0ù   Pÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           D•	     ˆ<                 ªª    E ø   @  
 
 
-À 	  9   Pÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   ÂÏ  d  d  ˆ<                 ªª    E @   @  
+À 	  0ù   Pÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           i˜	       Ô€              s›	     €<                @ªª    E ø   ?  
 
 
-À 	  9   Pÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   GÓ        Ô€              ±Ö  d  d  €<                pªª    E @   ?  
+À 	  0ù   Pÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           k¹	       Ô€              º	 L   L   €<                Pªª    E  (   8  
+
+
+ 	À     0ùPÿÿ           º	       Ô€              °q d  d  €<                0ªª    E @   @  
 
 
-À 	  9   Pÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   r×  Ì   Ì   €<                °ªª    E  ¨   @  
+À 	  2É   Pÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   4u       Ô€              žx d  d  €<                `ªª    E @   ?  
 
 
-À 	   Q   Pÿÿ                                                                                                                                           Ú  Ì   Ì   ˆ<                °ªª    E  ¨   @  
+À 	  2É   Pÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   )y     €<                @ªª    E ø   @  
 
 
-À 	   Q   Pÿÿ                                                                                                                                           yÜ  Ì   Ì   ˆ<                °ªª    E  ¨   @  
+À 	  4á   Pÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           q}     ˆ<                @ªª    E ø   @  
 
 
-À 	   Q   Pÿÿ                                                                                                                                           ÞÝ        Ô€              (ß  Ì   Ì   €<                €ªª    E  ¨   ?  
+À 	  4á   Pÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           –€       Ô€               ƒ     €<                pªª    E ø   ?  
 
 
-À 	   Q   Pÿÿ                                                                                                                                           ;á  Ì   Ì   ˆ<                €ªª    E  ¨   ?  
+À 	  4á   Pÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           "¨       Ô€              Ä¨ L   L   €<                €ªª    E  (   8  
+
+
+ 	À     4áPÿÿ           Ô¨       Ô€              øY d  d  €<                Pªª    E @   @  
 
 
-À 	   Q   Pÿÿ                                                                                                                                            Í @   @   €  ÿÿÿÿÿÿ          Àªª           
-ÿÿÿÿÿÿ
-       Î @   @   €<                �ªª           
-     
-       Î       Ô€              ßÎ d  d  €<                Ðªª    E @   @  
+À 	  6±   Pÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |]       Ô€              æ` d  d  €<                �ªª    E @   ?  
 
 
-À 	  ¡   Pÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   dÒ       Ô€              hÚ @   @   €  ÿÿÿÿÿÿ           ªª           
-ÿÿÿÿÿÿ
-       7Û       Ô€              ÅÞ d  d  €<                °ªª    E @   ?  
+À 	  6±   Pÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   §a     €<                `ªª    E ø   @  
 
 
-À 	  ¡   Pÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   ÈÛ d  d  €<                àªª    E @   @  
+À 	  8É   Pÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           ¹e     ˆ<                `ªª    E ø   @  
 
 
-À 	  ¡   Pÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   Mß       Ô€              ·â d  d  €<                Àªª    E @   ?  
+À 	  8É   Pÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           Þh       Ô€              èk     €<                 ªª    E ø   ?  
 
 
-À 	  ¡   Pÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
\ No newline at end of file
+À 	  8É   Pÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           ‰‰       Ô€              +Š L   L   €<                °ªª    E  (   8  
+
+
+ 	À     8ÉPÿÿ           ;Š       Ô€           
\ No newline at end of file
diff -Naur ns-3.19/src/aodv/test/tcp-chain-test-9-0.pcap ns-3.20/src/aodv/test/tcp-chain-test-9-0.pcap
--- ns-3.19/src/aodv/test/tcp-chain-test-9-0.pcap	2014-06-17 10:34:00.452636553 -0700
+++ ns-3.20/src/aodv/test/tcp-chain-test-9-0.pcap	2014-06-17 10:33:13.784996803 -0700
@@ -30,7 +30,7 @@
 
   _       H£        Ô€              !¨  @   @   €<                P ªª           
 	     
-       4©        Ô€              ÀD T   T   €  ÿÿÿÿÿÿ          ` ªª    E  0     
+       5©        Ô€              ÀD T   T   €  ÿÿÿÿÿÿ          ` ªª    E  0     
 	
 ÿŽŽ      
 	    
@@ -41,232 +41,330 @@
 
     
 
-  Ð       8µ       Ô€              Úµ L   L   €<                p ªª    E  (   8  
+  Ð       9µ       Ô€              Ûµ L   L   €<                p ªª    E  (    8  
 
 
-À 	        Pÿÿ           êµ       Ô€              2Ñ @   @   €  ÿÿÿÿÿÿ          0 ªª           
+À 	        Pÿÿ           ëµ       Ô€              3Ñ @   @   €  ÿÿÿÿÿÿ          0 ªª           
 
 ÿÿÿÿÿÿ
 	       5Ò @   @   €<                € ªª           
 	     
 
-       EÒ       Ô€              “Ò L   L   €<                @ ªª    E  (   @  
+       EÒ       Ô€              “Ò L   L   €<                @ ªª    E  (    @  
 
 
- 	À       Pÿÿ           PÓ       Ô€              Ô L   L   €<                � ªª    E  (   ?  
+ 	À       Pÿÿ           PÓ       Ô€              Ô L   L   €<                � ªª    E  (    ?  
 
 
- 	À       Pÿÿ           �á       Ô€              2â L   L   €<                  ªª    E  (   8  
+ 	À       Pÿÿ           ‘á       Ô€              3â L   L   €<                  ªª    E  (   8  
 
 
-À 	      Pÿÿ           Bâ       Ô€              g       Ô€              kj d  d  €<                ° ªª    E @   8  
+À 	      Pÿÿ           Câ       Ô€              Y       Ô€              Ã d  d  €<                ° ªª    E @   8  
 
 
-À 	      Pÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   {j       Ô€              Éj L   L   €<                P ªª    E  (   @  
+À 	      Pÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   Ó       Ô€              !	 L   L   €<                P ªª    E  (   @  
 
 
- 	À     Pÿÿ           †k       Ô€              Ll L   L   €<                À ªª    E  (   ?  
+ 	À     Pÿÿ           Þ	       Ô€              ¤
+ L   L   €<                À ªª    E  (   ?  
 
 
- 	À     Pÿÿ           ô�       Ô€              ^“ d  d  €<                Ð ªª    E @   8  
+ 	À     Pÿÿ           L+       Ô€              V.     €<                Ð ªª    E ø   8  
 
 
-À 	     Pÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   n“       Ô€              –—       Ô€              à˜ Ì   Ì   €<                à ªª    E  ¨   8  
+À 	     Pÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           f.       Ô€              ¡í       Ô€              ñ d  d  €<                à ªª    E @   8  
 
 
-À 	  1   Pÿÿ                                                                                                                                           ð˜       Ô€              >™ L   L   €<                ` ªª    E  (   @  
+À 	  é   Pÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   ñ       Ô€              iñ L   L   €<                ` ªª    E  (   @  
 
 
- 	À     ±Pÿÿ           û™       Ô€              åš L   L   €<                ð ªª    E  (   ?  
+ 	À     Pÿÿ           &ò       Ô€              ó L   L   €<                ð ªª    E  (   ?  
 
 
- 	À     ±Pÿÿ           ñ°       Ô€              [´ d  d  €<                 ªª    E @   8  
+ 	À     Pÿÿ           ¯       Ô€              ¹     €<                 ªª    E ø   8  
 
 
-À 	  ±   Pÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   k´       Ô€              ;À       Ô€              ¥Ã d  d  €<                ªª    E @   8  
+À 	     Pÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           É       Ô€              éÕ       Ô€              SÙ d  d  €<                ªª    E @   8  
 
 
-À 	  É   Pÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   µÃ       Ô€              Ä L   L   €<                p ªª    E  (   @  
+À 	  Ñ   Pÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   cÙ       Ô€              ±Ù L   L   €<                p ªª    E  (   @  
 
 
- 	À     áPÿÿ           ¿Ä       Ô€              ÄÅ L   L   €<                 ªª    E  (   ?  
+ 	À     	éPÿÿ           nÚ       Ô€              sÛ L   L   €<                 ªª    E  (   ?  
 
 
- 	À     áPÿÿ           Ç L   L   ˆ<                 ªª    E  (   ?  
+ 	À     	éPÿÿ           ÌÜ L   L   ˆ<                 ªª    E  (   ?  
 
 
- 	À     áPÿÿ           ðË       Ô€              :Í Ì   Ì   €<                0ªª    E  ¨ 	  8  
+ 	À     	éPÿÿ           ÙÞ L   L   ˆ<                 ªª    E  (   ?  
+
+
+ 	À     	éPÿÿ           °à L   L   ˆ<                 ªª    E  (   ?  
+
+
+ 	À     	éPÿÿ           Nå L   L   ˆ<                 ªª    E  (   ?  
+
+
+ 	À     	éPÿÿ           —ê L   L   ˆ<                 ªª    E  (   ?  
+
+
+ 	À     	éPÿÿ           ëó       Ô€              —ö L   L   ˆ<                 ªª    E  (   ?  
+
+
+ 	À     	éPÿÿ           òú     €<                0ªª    E ø   8  
 
 
-À 	  á   Pÿÿ                                                                                                                                           JÍ       Ô€              áú       Ô€              Kþ d  d  €<                @ªª    E @ 
-  8  
+À 	  	é   Pÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           û       Ô€              1¾       Ô€              ›Á d  d  €<                @ªª    E @   8  
 
 
-À 	  	a   Pÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   [þ       Ô€              ©þ L   L   €<                € ªª    E  (   @  
+À 	  ¹   Pÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   «Á       Ô€              ùÁ L   L   €<                € ªª    E  (   @  
 
 
- 	À     yPÿÿ           fÿ       Ô€              >  L   L   €<                Pªª    E  (   ?  
+ 	À     ÑPÿÿ           ¶Â       Ô€              |Ã L   L   €<                Pªª    E  (   ?  
 
 
- 	À     yPÿÿ           j L   L   ˆ<                Pªª    E  (   ?  
+ 	À     ÑPÿÿ           „Ä L   L   ˆ<                Pªª    E  (   ?  
 
 
- 	À     yPÿÿ           Ì L   L   ˆ<                Pªª    E  (   ?  
+ 	À     ÑPÿÿ           „Ç L   L   ˆ<                Pªª    E  (   ?  
 
 
- 	À     yPÿÿ           { L   L   ˆ<                Pªª    E  (   ?  
+ 	À     ÑPÿÿ           §Ë       Ô€              ¬Ì L   L   ˆ<                Pªª    E  (   ?  
 
 
- 	À     yPÿÿ           m L   L   ˆ<                Pªª    E  (   ?  
+ 	À     ÑPÿÿ           Ñ     €<                `ªª    E ø 	  8  
+
 
-
- 	À     yPÿÿ                  Ô€              = L   L   ˆ<                Pªª    E  (   ?  
+À 	  Ñ   Pÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           )Ñ       Ô€              y¦	       Ô€              ã©	 d  d  €<                pªª    E @ 
+  8  
+
+
+À 	  ¡   Pÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   ó©	       Ô€              Aª	 L   L   €<                � ªª    E  (   @  
 
 
- 	À     yPÿÿ           ­       Ô€              ¥ L   L   ˆ<                Pªª    E  (   ?  
+ 	À     ¹Pÿÿ           þª	       Ô€              ¬	 L   L   €<                €ªª    E  (   ?  
 
 
- 	À     yPÿÿ           § d  d  €<                `ªª    E @   8  
+ 	À     ¹Pÿÿ           	º	       Ô€              ½	     €<                �ªª    E ø   8  
 
 
-À 	  y   Pÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   ·       Ô€              @ Ì   Ì   €<                pªª    E  ¨   8  
+À 	  ¹   Pÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           #½	       Ô€              ÁŽ       Ô€              +’ d  d  €<                 ªª    E @   8  
 
 
-À 	  ‘   Pÿÿ                                                                                                                                           P       Ô€              ž L   L   €<                � ªª    E  (   @  
+À 	  ‰   Pÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   ;’       Ô€              ‰’ L   L   €<                  ªª    E  (   @  
+
+
+ 	À     ¡Pÿÿ           F“       Ô€              è“ L   L   €<                °ªª    E  (   ?  
 
 
- 	À     Pÿÿ           [       Ô€              E  L   L   €<                €ªª    E  (   ?  
+ 	À     ¡Pÿÿ           ì• L   L   ˆ<                °ªª    E  (   ?  
 
 
- 	À     Pÿÿ           ÑD	       Ô€              ;H	 d  d  €<                �ªª    E @   8  
+ 	À     ¡Pÿÿ           Ÿ       Ô€              ¢     €<                Àªª    E ø   8  
 
 
-À 	     Pÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   KH	       Ô€              IR	       Ô€              ³U	 d  d  €<                 ªª    E @   8  
+À 	  ¡   Pÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           .¢       Ô€              	w       Ô€              sz d  d  €<                Ðªª    E @   8  
 
 
-À 	  )   Pÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   ÃU	       Ô€              V	 L   L   €<                  ªª    E  (   @  
+À 	  q   Pÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   ƒz       Ô€              Ñz L   L   €<                ° ªª    E  (   @  
 
 
- 	À     APÿÿ           ÎV	       Ô€              ÜW	 L   L   €<                °ªª    E  (   ?  
+ 	À     ‰Pÿÿ           Ž{       Ô€              K| L   L   €<                àªª    E  (   ?  
 
 
- 	À     APÿÿ           Y	 L   L   ˆ<                °ªª    E  (   ?  
+ 	À     ‰Pÿÿ           8} L   L   ˆ<                àªª    E  (   ?  
 
 
- 	À     APÿÿ           Z	 L   L   ˆ<                °ªª    E  (   ?  
+ 	À     ‰Pÿÿ           â~ L   L   ˆ<                àªª    E  (   ?  
 
 
- 	À     APÿÿ           k_	 L   L   ˆ<                °ªª    E  (   ?  
+ 	À     ‰Pÿÿ           nƒ L   L   ˆ<                àªª    E  (   ?  
 
 
- 	À     APÿÿ            d	 L   L   ˆ<                °ªª    E  (   ?  
+ 	À     ‰Pÿÿ           “ˆ L   L   ˆ<                àªª    E  (   ?  
 
 
- 	À     APÿÿ           r	       Ô€              –u	 L   L   ˆ<                °ªª    E  (   ?  
+ 	À     ‰Pÿÿ           p–       Ô€              -— L   L   ˆ<                àªª    E  (   ?  
 
 
- 	À     APÿÿ           x	 Ì   Ì   €<                Àªª    E  ¨   8  
+ 	À     ‰Pÿÿ           Ç›     €<                ðªª    E ø   8  
 
 
-À 	  A   Pÿÿ                                                                                                                                           %x	       Ô€              ÁŽ       Ô€              +’ d  d  €<                Ðªª    E @   8  
+À 	  ‰   Pÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           ×›       Ô€                      Ô€              {   d  d  €<                 ªª    E @   8  
 
 
-À 	  Á   Pÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   ;’       Ô€              ‰’ L   L   €<                ° ªª    E  ( 	  @  
+À 	  Y   Pÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   ‹         Ô€              Ù   L   L   €<                À ªª    E  (   @  
+
+
+ 	À     qPÿÿ           –!        Ô€              A"  L   L   €<                ªª    E  (   ?  
+
+
+ 	À     qPÿÿ           @#  L   L   ˆ<                ªª    E  (   ?  
+
+
+ 	À     qPÿÿ           z%  L   L   ˆ<                ªª    E  (   ?  
+
+
+ 	À     qPÿÿ           ¨*  L   L   ˆ<                ªª    E  (   ?  
+
+
+ 	À     qPÿÿ           Ô+  L   L   ˆ<                ªª    E  (   ?  
+
+
+ 	À     qPÿÿ           /  L   L   ˆ<                ªª    E  (   ?  
 
 
- 	À     ÙPÿÿ           F“       Ô€              ” L   L   €<                àªª    E  ( 	  ?  
+ 	À     qPÿÿ           7        Ô€              :      €<                 ªª    E ø   8  
+
+
+À 	  q   Pÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           &:        Ô€              ` T   T   €  ÿÿÿÿÿÿ          0ªª    E  0     
+	
+ÿŽŽ      
+	    
+	  Ð       `g T   T   €  ÿÿÿÿÿÿ          Ð ªª    E  0     
 
 
- 	À     ÙPÿÿ           L³       Ô€              ¶¶ d  d  €<                ðªª    E @   8  
+ÿŽŽ      
+
+    
+
+  Ð       Æ— @   @   €<                @ªª           
+	     
+       ñ›       Ô€              ƒœ @   @   €  ÿÿÿÿÿÿ          Pªª           
+	ÿÿÿÿÿÿ
+
+       ¥œ @   @   €<                à ªª           
+
+     
+	       Q�       Ô€              Q£ d  d  €<                `ªª    E @   8  
+
+
+À 	  A   Pÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   a£       Ô€              ˆ§       Ô€              ’ª     €<                pªª    E ø   8  
 
 
-À 	  Ù   Pÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   Æ¶       Ô€              ‹¸       Ô€              º Ì   Ì   €<                 ªª    E  ¨   8  
+À 	  !Y   Pÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           ¢ª       Ô€              Áº @   @   €  ÿÿÿÿÿÿ          ð ªª           
+
+ÿÿÿÿÿÿ
+	       Ä» @   @   €<                €ªª           
+	     
+
+       Ô»       Ô€              O¼ L   L   €<                 ªª    E  ( 	  @  
+
+
+ 	À     !YPÿÿ           ½       Ô€              ï½ @   @   €  ÿÿÿÿÿÿ          �ªª           
+	ÿÿÿÿÿÿ
+       ¾¾       Ô€              º¿ L   L   €<                 ªª    E  ( 	  ?  
+
+
+ 	À     !YPÿÿ           ¡í       Ô€              ñ d  d  €<                °ªª    E @   8  
 
 
-À 	  ñ   Pÿÿ                                                                                                                                           º       Ô€              `º L   L   €<                À ªª    E  ( 
+À 	  #)   Pÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   ñ       Ô€              iñ L   L   €<                ªª    E  ( 
   @  
 
 
- 	À     qPÿÿ           »       Ô€              ¼ L   L   €<                ªª    E  ( 
+ 	À     %APÿÿ           &ò       Ô€              ìò L   L   €<                Àªª    E  ( 
+  ?  
+
+
+ 	À     %APÿÿ           ô L   L   ˆ<                Àªª    E  ( 
+  ?  
+
+
+ 	À     %APÿÿ           Ùö L   L   ˆ<                Àªª    E  ( 
+  ?  
+
+
+ 	À     %APÿÿ           Jû L   L   ˆ<                Àªª    E  ( 
+  ?  
+
+
+ 	À     %APÿÿ           &       Ô€              ã L   L   ˆ<                Àªª    E  ( 
   ?  
 
 
- 	À     qPÿÿ           ±Ø       Ô€              Ü d  d  €<                 ªª    E @   8  
+ 	À     %APÿÿ           G     €<                Ðªª    E ø   8  
 
 
-À 	  q   Pÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   +Ü       Ô€              Øå       Ô€              Bé d  d  €<                0ªª    E @   8  
+À 	  %A   Pÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           W       Ô€              éÕ       Ô€              SÙ d  d  €<                àªª    E @   8  
 
 
-À 	  ‰   Pÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   Ré       Ô€               é L   L   €<                Ð ªª    E  (   @  
+À 	  '   Pÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   cÙ       Ô€              ±Ù L   L   €<                 ªª    E  (   @  
 
 
- 	À     ¡Pÿÿ           ]ê       Ô€              ë L   L   €<                @ªª    E  (   ?  
+ 	À     ))Pÿÿ           nÚ       Ô€              |Û L   L   €<                ðªª    E  (   ?  
 
 
- 	À     ¡Pÿÿ           ì L   L   ˆ<                @ªª    E  (   ?  
+ 	À     ))Pÿÿ           ÕÜ L   L   ˆ<                ðªª    E  (   ?  
 
 
- 	À     ¡Pÿÿ           ôð       Ô€              >ò Ì   Ì   €<                Pªª    E  ¨   8  
+ 	À     ))Pÿÿ           àä       Ô€              êç     €<                 ªª    E ø   8  
 
 
-À 	  ¡   Pÿÿ                                                                                                                                           Nò       Ô€              ôê  @   @   €<                `ªª           
-	     
-       ï        Ô€              –ï  @   @   €  ÿÿÿÿÿÿ          pªª           
-	ÿÿÿÿÿÿ
+À 	  ))   Pÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           úç       Ô€              1¾       Ô€              ›Á d  d  €<                ªª    E @   8  
+
 
-       ¸ï  @   @   €<                à ªª           
+À 	  *ù   Pÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   «Á       Ô€              ùÁ L   L   €<                0ªª    E  (   @  
 
-     
-	       dð        Ô€              Äö  d  d  €<                €ªª    E @   8  
-
+
+ 	À     -Pÿÿ           ¶Â       Ô€              jÃ L   L   €<                 ªª    E  (   ?  
 
-À 	  !   Pÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   Ôö        Ô€              "÷  L   L   €<                ð ªª    E  (   @  
+
+ 	À     -Pÿÿ           çÄ L   L   ˆ<                 ªª    E  (   ?  
 
 
- 	À     9Pÿÿ           rø  L   L   ˆ<                ð ªª    E  (   @  
+ 	À     -Pÿÿ           EÇ L   L   ˆ<                 ªª    E  (   ?  
 
 
- 	À     9Pÿÿ           Ðú  L   L   ˆ<                ð ªª    E  (   @  
+ 	À     -Pÿÿ           çÊ L   L   ˆ<                 ªª    E  (   ?  
 
 
- 	À     9Pÿÿ           �û        Ô€              ^ü  @   @   €  ÿÿÿÿÿÿ          �ªª           
-	ÿÿÿÿÿÿ
-       Ù       Ô€              C d  d  €<                 ªª    E @   8  
+ 	À     -Pÿÿ           ×       Ô€              'Ú     €<                0ªª    E ø   8  
 
 
-À 	  9   Pÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   S       Ô€              L       Ô€              – Ì   Ì   €<                °ªª    E  ¨   8  
+À 	  -   Pÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           7Ú       Ô€              y¦	       Ô€              ã©	 d  d  €<                @ªª    E @   8  
 
 
-À 	   Q   Pÿÿ                                                                                                                                           ¦       Ô€              ô L   L   €<                 ªª    E  (   @  
+À 	  .á   Pÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   ó©	       Ô€              Aª	 L   L   €<                @ªª    E  (   @  
 
 
- 	À      ÑPÿÿ           °       Ô€              ` T   T   €  ÿÿÿÿÿÿ          Àªª    E  0     
-	
-ÿŽŽ      
-	    
-	  Ð       `g T   T   €  ÿÿÿÿÿÿ          ªª    E  0     
+ 	À     0ùPÿÿ           þª	       Ô€              Ö«	 L   L   €<                Pªª    E  (   ?  
 
 
-ÿŽŽ      
-
-    
+ 	À     0ùPÿÿ           Ý´	       Ô€              ç·	     €<                `ªª    E ø   8  
+
 
-  Ð       üh       Ô€              fl d  d  €<                Ðªª    E @   8  
+À 	  0ù   Pÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           ÷·	       Ô€              ÁŽ       Ô€              +’ d  d  €<                pªª    E @   8  
 
 
-À 	  ¡   Pÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   vl       Ô€              Öƒ @   @   €  ÿÿÿÿÿÿ           ªª           
+À 	  2É   Pÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   ;’       Ô€              ‰’ L   L   €<                Pªª    E  (   @  
 
-ÿÿÿÿÿÿ
-	       Ù„ @   @   €<                àªª           
-	     
+
+ 	À     4áPÿÿ           F“       Ô€              '” L   L   €<                €ªª    E  (   ?  
+
+
+ 	À     4áPÿÿ           ­• L   L   ˆ<                €ªª    E  (   ?  
 
-       é„       Ô€              v… L   L   €<                0ªª    E  (   @  
+
+ 	À     4áPÿÿ           ù— L   L   ˆ<                €ªª    E  (   ?  
+
+
+ 	À     4áPÿÿ           A› L   L   ˆ<                €ªª    E  (   ?  
 
 
- 	À      ÑPÿÿ           3†       Ô€              Úø       Ô€              Dü d  d  €<                ðªª    E @   8  
+ 	À     4áPÿÿ           C£       Ô€              M¦     €<                �ªª    E ø   8  
 
 
-À 	  ¡   Pÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   Tü       Ô€              ¢ü L   L   €<                @ªª    E  (   @  
+À 	  4á   Pÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           ]¦       Ô€              	w       Ô€              sz d  d  €<                 ªª    E @   8  
+
+
+À 	  6±   Pÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   ƒz       Ô€              Ñz L   L   €<                `ªª    E  (   @  
+
+
+ 	À     8ÉPÿÿ           Ž{       Ô€              “| L   L   €<                °ªª    E  (   ?  
 
 
- 	À      ÑPÿÿ           _ý       Ô€           
\ No newline at end of file
+ 	À     8ÉPÿÿ           ¼„       Ô€              Æ‡     €<                Àªª    E ø   8  
+
+
+À 	  8É   Pÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           Ö‡       Ô€           
\ No newline at end of file
diff -Naur ns-3.19/src/aodv/test/udp-chain-test-0-0.pcap ns-3.20/src/aodv/test/udp-chain-test-0-0.pcap
--- ns-3.19/src/aodv/test/udp-chain-test-0-0.pcap	2014-06-17 10:34:00.453636546 -0700
+++ ns-3.20/src/aodv/test/udp-chain-test-0-0.pcap	2014-06-17 10:33:13.785996795 -0700
@@ -18,192 +18,211 @@
 
 ÿŽŽ      
     
-  Ð       �Y X   X   €  ÿÿÿÿÿÿ     	     	  ªª    E  4     
+  Ð       è÷ X   X   €  ÿÿÿÿÿÿ     	     	  ªª    E  4     
 
 ÿŽŽ    (     
 
     
-          ðy X   X   €  ÿÿÿÿÿÿ     
+          H X   X   €  ÿÿÿÿÿÿ     
      
   ªª    E  4     
 
 ÿŽŽ    (    
 
     
-          £ @   @   €<           
+          eA @   @   €<           
      
 0 ªª           
 
      
-       x¤       Ô€              |¬ @   @   €  ÿÿÿÿÿÿ     
+       ÐB       Ô€              ÔJ @   @   €  ÿÿÿÿÿÿ     
      
 @ ªª           
 
 ÿÿÿÿÿÿ
-       ž¬ @   @   €<      
+       öJ @   @   €<      
      	     	0 ªª           	
      
 
-       K­       Ô€       	       =® T   T   €<      	     
+       £K       Ô€       	       •L T   T   €<      	     
      
 P ªª    E  0     
 
 ŽŽ     
 
     
-  E       M®       Ô€       
-       ¶ @   @   €  ÿÿÿÿÿÿ     	     	@ ªª           	
+  ^       ¥L       Ô€       
+       eT @   @   €  ÿÿÿÿÿÿ     	     	@ ªª           	
 ÿÿÿÿÿÿ
-       · @   @   €<      	     
+       hU @   @   €<      	     
      
 ` ªª           
 
      	
-        ·       Ô€       
-       w· ð  ð  €<      
-     	     	P ªª    E Ì   @  
+       xU       Ô€       
+       ÏU (  (  €<      
+     	     	P ªª    E    @  
 
 
-À 	¸                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         c¾       Ô€       	       Â @   @   €  ÿÿÿÿÿÿ     
+À 	ð                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 °[       Ô€       	       Ì_ @   @   €  ÿÿÿÿÿÿ     
      
 p ªª           
 
 ÿÿÿÿÿÿ
-       NÃ       Ô€              2Ê ð  ð  €<           
+       š`       Ô€              rf (  (  €<           
      
-€ ªª    E Ì   ?  
+€ ªª    E    ?  
 
 
-À 	¸                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         ß“ ð  ð  €<      
-     	     	` ªª    E Ì   @  
+À 	ð                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 �Ð (  (  €<      
+     	     	` ªª    E    @  
 
 
-À 	¸                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         Ìš       Ô€       	       ž¡ ð  ð  €<           
+À 	ð                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 pÖ       Ô€       	       6Ü (  (  €<           
      
-� ªª    E Ì   ?  
+� ªª    E    ?  
 
 
-À 	¸                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         ÏÝ ð  ð  €<      
-     	     	p ªª    E Ì   @  
+À 	ð                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 Ø¸ (  (  €<      
+     	     	p ªª    E    @  
 
 
-À 	¸                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         ¼ä       Ô€       	       Žë ð  ð  €<           
+À 	ð                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 ¸¾       Ô€       	       ~Ä (  (  €<           
      
-  ªª    E Ì   ?  
+  ªª    E    ?  
 
 
-À 	¸                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         ¿'	 ð  ð  €<      
-     	     	€ ªª    E Ì   @  
+À 	ð                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  ¡ (  (  €<      
+     	     	€ ªª    E    @  
 
 
-À 	¸                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         ¬.	       Ô€       	       ~5	 ð  ð  €<           
+À 	ð                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  §       Ô€       	       Æ¬ (  (  €<           
      
-° ªª    E Ì   ?  
+° ªª    E    ?  
 
 
-À 	¸                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         ¯q ð  ð  €<      
-     	     	� ªª    E Ì   @  
+À 	ð                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 h‰	 (  (  €<      
+     	     	� ªª    E    @  
 
 
-À 	¸                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         œx       Ô€       	       n ð  ð  €<           
+À 	ð                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 H�	       Ô€       	       •	 (  (  €<           
      
-À ªª    E Ì   ?  
+À ªª    E    ?  
 
 
-À 	¸                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         Ÿ» ð  ð  €<      
-     	     	  ªª    E Ì   @  
+À 	ð                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 °q (  (  €<      
+     	     	  ªª    E    @  
 
 
-À 	¸                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         ŒÂ       Ô€       	       ^É ð  ð  €<           
+À 	ð                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 �w       Ô€       	       V} (  (  €<           
      
-Ð ªª    E Ì   ?  
+Ð ªª    E    ?  
 
 
-À 	¸                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         OÃ  ð  ð  €<      
-     	     	° ªª    E Ì 	  @  
+À 	ð                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 øY (  (  €<      
+     	     	° ªª    E  	  @  
 
 
-À 	¸                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         <Ê        Ô€       	       Ñ  ð  ð  €<           
+À 	ð                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 Ø_       Ô€       	       že (  (  €<           
      
-à ªª    E Ì 	  ?  
+à ªª    E  	  ?  
 
 
-À 	¸                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         �Y T   T   €  ÿÿÿÿÿÿ     	     	À ªª    E  0 
-    
+À 	ð                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     (  (  €<      
+     	     	À ªª    E  
+  @  
 
-ÿŽŽ      
-   
-  Ð       �^ T   T   €  ÿÿÿÿÿÿ     
+
+À 	ð                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 à        Ô€       	       ¦  (  (  €<           
      
-ð ªª    E  0     
-
-ÿŽŽ      
-    
-  Ð       ? ð  ð  €<      
-     	     	Ð ªª    E Ì   @  
+ð ªª    E  
+  ?  
+
+
+À 	ð                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 Hè (  (  €<      
+     	     	Ð ªª    E    @  
 
 
-À 	¸                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         ,       Ô€       	       þ ð  ð  €<           
+À 	ð                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 (î       Ô€       	       îó (  (  €<           
      
- ªª    E Ì   ?  
+ ªª    E    ?  
 
 
-À 	¸                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         [ @   @   €  ÿÿÿÿÿÿ     	     	à ªª           	
+À 	ð                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 è÷ T   T   €  ÿÿÿÿÿÿ     	     	à ªª    E  0     
+
+ÿŽŽ      
+   
+  Ð       èü T   T   €  ÿÿÿÿÿÿ     
+     
+ªª    E  0     
+
+ÿŽŽ      
+    
+  Ð       xÔ @   @   €  ÿÿÿÿÿÿ     	     	ð ªª           	
 ÿÿÿÿÿÿ
-       \ @   @   €<      	     
+       zÕ @   @   €<      	     
      
-ªª           
+ ªª           
 
      	
-       *\       Ô€       
-       Š\ ð  ð  €<      
-     	     	ð ªª    E Ì   @  
+       ŠÕ       Ô€       
+       DÖ (  (  €<      
+     	     	 ªª    E    @  
 
 
-À 	¸                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         wc       Ô€       	        @   @   €  ÿÿÿÿÿÿ     
+À 	ð                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 %Ü       Ô€       	       ±÷ @   @   €  ÿÿÿÿÿÿ     
      
- ªª           
+0ªª           
 
 ÿÿÿÿÿÿ
-       Ò       Ô€              ­† ð  ð  €<           
+       €ø       Ô€              Žþ (  (  €<           
+     
+@ªª    E    ?  
+
+
+À 	ð                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 Ø¸ (  (  €<      
+     	     	ªª    E    @  
+
+
+À 	ð                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 ¸¾       Ô€       	       ~Ä (  (  €<           
      
-0ªª    E Ì   ?  
+Pªª    E    ?  
 
 
-À 	¸                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         ¡ ð  ð  €<      
-     	     	 ªª    E Ì   @  
+À 	ð                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  ¡ (  (  €<      
+     	     	 ªª    E    @  
 
 
-À 	¸                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         ¨       Ô€       	       Þ® ð  ð  €<           
+À 	ð                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  §       Ô€       	       Æ¬ (  (  €<           
      
-@ªª    E Ì   ?  
+`ªª    E    ?  
 
 
-À 	¸                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         ë	 ð  ð  €<      
-     	     	ªª    E Ì   @  
+À 	ð                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 h‰	 (  (  €<      
+     	     	0ªª    E    @  
 
 
-À 	¸                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         üñ	       Ô€       	       Îø	 ð  ð  €<           
+À 	ð                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 H�	       Ô€       	       •	 (  (  €<           
      
-Pªª    E Ì   ?  
+pªª    E    ?  
 
 
-À 	¸                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         ÿ4 ð  ð  €<      
-     	     	 ªª    E Ì   @  
+À 	ð                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 °q (  (  €<      
+     	     	@ªª    E    @  
 
 
-À 	¸                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         ì;       Ô€       	       ¾B ð  ð  €<           
+À 	ð                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 �w       Ô€       	       V} (  (  €<           
      
-`ªª    E Ì   ?  
+€ªª    E    ?  
 
 
-À 	¸                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         ï~ ð  ð  €<      
-     	     	0ªª    E Ì   @  
+À 	ð                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 øY (  (  €<      
+     	     	Pªª    E    @  
 
 
-À 	¸                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         Ü…       Ô€       	       ®Œ ð  ð  €<           
+À 	ð                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 Ø_       Ô€       	       že (  (  €<           
      
-pªª    E Ì   ?  
+�ªª    E    ?  
 
 
-À 	¸                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      
\ No newline at end of file
+À 	ð                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              
\ No newline at end of file
diff -Naur ns-3.19/src/aodv/test/udp-chain-test-9-0.pcap ns-3.20/src/aodv/test/udp-chain-test-9-0.pcap
--- ns-3.19/src/aodv/test/udp-chain-test-9-0.pcap	2014-06-17 10:34:00.454636538 -0700
+++ ns-3.20/src/aodv/test/udp-chain-test-9-0.pcap	2014-06-17 10:33:13.786996787 -0700
@@ -20,88 +20,90 @@
 
     
 
-  Ð       c
- @   @   €  ÿÿÿÿÿÿ            ªª           
+  Ð       »¨ @   @   €  ÿÿÿÿÿÿ            ªª           
 	ÿÿÿÿÿÿ
 
-       …
- @   @   €<                  ªª           
+       Ý¨ @   @   €<                  ªª           
 
      
-	       2       Ô€              6 T   T   €<                0 ªª    E  0     
+	       Š©       Ô€              Žª T   T   €<                0 ªª    E  0     
 	
 
 ŽŽ     
    
 
-  _       F       Ô€               @   @   €  ÿÿÿÿÿÿ          @ ªª           
+  _       žª       Ô€              [¸ @   @   €  ÿÿÿÿÿÿ          @ ªª           
 	ÿÿÿÿÿÿ
-       Ò       Ô€              Ž T   T   €<                P ªª    E  0     
+       *¹       Ô€              æ¹ T   T   €<                P ªª    E  0     
 	
 ŽŽ   @ 
 
     
-  E       4 @   @   €<                ` ªª           
+  ^       YÒ @   @   €<                ` ªª           
 	     
-       ´6       Ô€              |i       Ô€              Np ð  ð  €<                p ªª    E Ì   8  
+       Õ       Ô€              ç       Ô€              ­ (  (  €<                p ªª    E    8  
 
 
-À 	¸                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         ^p       Ô€              1Ì       Ô€              Ó ð  ð  €<                € ªª    E Ì   8  
+À 	ð                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 ½       Ô€                     Ô€              È (  (  €<                € ªª    E    8  
 
 
-À 	¸                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         Ó       Ô€              !       Ô€              ó ð  ð  €<                � ªª    E Ì   8  
+À 	ð                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 Ø       Ô€              Éè       Ô€              �î (  (  €<                � ªª    E    8  
 
 
-À 	¸                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Ô€              `	       Ô€              ãf	 ð  ð  €<                  ªª    E Ì   8  
+À 	ð                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 Ÿî       Ô€              Ñ       Ô€              ×Ö (  (  €<                  ªª    E    8  
 
 
-À 	¸                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         óf	       Ô€              ª       Ô€              Ó° ð  ð  €<                ° ªª    E Ì   8  
+À 	ð                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 çÖ       Ô€              Y¹	       Ô€              ¿	 (  (  €<                ° ªª    E    8  
 
 
-À 	¸                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         ã°       Ô€              ñó       Ô€              Ãú ð  ð  €<                À ªª    E Ì   8  
+À 	ð                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 /¿	       Ô€              ¡¡       Ô€              g§ (  (  €<                À ªª    E    8  
 
 
-À 	¸                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         Óú       Ô€              ¸u  T   T   €  ÿÿÿÿÿÿ          Ð ªª    E  0     
+À 	ð                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 w§       Ô€              é‰       Ô€              ¯� (  (  €<                Ð ªª    E  	  8  
+
+
+À 	ð                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 ¿�       Ô€              ñ/        Ô€              ·5  (  (  €<                à ªª    E  
+  8  
+
+
+À 	ð                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 Ç5        Ô€              ¸u  T   T   €  ÿÿÿÿÿÿ          ð ªª    E  0     
 	
 ÿŽŽ      
 	    
-	  Ð       ¡û        Ô€              s ð  ð  €<                à ªª    E Ì 	  8  
-
-
-À 	¸                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         ƒ       Ô€              €8 T   T   €  ÿÿÿÿÿÿ          0 ªª    E  0     
+	  Ð       €8 T   T   €  ÿÿÿÿÿÿ          0 ªª    E  0     
 
 
 ÿŽŽ      
 
     
 
-  Ð       ¹V @   @   €<                ð ªª           
+  Ð       9       Ô€              ÿ (  (  €<                 ªª    E    8  
+
+
+À 	ð                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Ô€              ¥ @   @   €<                ªª           
 	     
-       ^^       Ô€              Ò} @   @   €  ÿÿÿÿÿÿ           ªª           
+       g«       Ô€              ÛÊ @   @   €  ÿÿÿÿÿÿ           ªª           
 	ÿÿÿÿÿÿ
 
-       ô} @   @   €<                @ ªª           
+       ýÊ @   @   €<                @ ªª           
 
      
-	       ¡~       Ô€              Í… ð  ð  €<                ªª    E Ì   8  
+	       ©Ë       Ô€              ¥Ñ (  (  €<                0ªª    E    8  
 
 
-À 	¸                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         Ý…       Ô€              %!       Ô€              ÷' ð  ð  €<                 ªª    E Ì   8  
+À 	ð                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 µÑ       Ô€              Éè       Ô€              �î (  (  €<                @ªª    E    8  
 
 
-À 	¸                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         (       Ô€              qÙ       Ô€              Cà ð  ð  €<                0ªª    E Ì   8  
+À 	ð                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 Ÿî       Ô€              Ñ       Ô€              ×Ö (  (  €<                Pªª    E    8  
 
 
-À 	¸                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         Sà       Ô€              a#
-       Ô€              3*
- ð  ð  €<                @ªª    E Ì   8  
+À 	ð                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 çÖ       Ô€              Y¹	       Ô€              ¿	 (  (  €<                `ªª    E    8  
 
 
-À 	¸                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         C*
-       Ô€              Qm       Ô€              #t ð  ð  €<                Pªª    E Ì   8  
+À 	ð                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 /¿	       Ô€              ¡¡       Ô€              g§ (  (  €<                pªª    E    8  
 
 
-À 	¸                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         3t       Ô€              A·       Ô€              ¾ ð  ð  €<                `ªª    E Ì   8  
+À 	ð                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 w§       Ô€              é‰       Ô€              ¯� (  (  €<                €ªª    E    8  
 
 
-À 	¸                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         #¾       Ô€           
\ No newline at end of file
+À 	ð                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 ¿�       Ô€           
\ No newline at end of file
diff -Naur ns-3.19/src/aodv/waf ns-3.20/src/aodv/waf
--- ns-3.19/src/aodv/waf	2014-06-17 10:34:00.454636538 -0700
+++ ns-3.20/src/aodv/waf	1969-12-31 16:00:00.000000000 -0800
@@ -1 +0,0 @@
-exec "`dirname "$0"`"/../../../../waf "$@"
diff -Naur ns-3.19/src/applications/bindings/modulegen__gcc_ILP32.py ns-3.20/src/applications/bindings/modulegen__gcc_ILP32.py
--- ns-3.19/src/applications/bindings/modulegen__gcc_ILP32.py	2014-06-17 10:34:00.461636484 -0700
+++ ns-3.20/src/applications/bindings/modulegen__gcc_ILP32.py	2014-06-17 10:33:13.793996733 -0700
@@ -155,7 +155,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'], 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_PRISM_HEADER', 'DLT_IEEE802_11_RADIO', 'DLT_IEEE802_15_4'], 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]
@@ -174,6 +174,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]
@@ -198,6 +200,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'])
     ## packet-socket.h (module 'network'): ns3::DeviceNameTag [class]
@@ -514,32 +518,35 @@
     module.add_class('PacketProbe', import_from_module='ns.network', parent=root_module['ns3::Probe'])
     ## packetbb.h (module 'network'): ns3::PbbAddressTlv [class]
     module.add_class('PbbAddressTlv', import_from_module='ns.network', parent=root_module['ns3::PbbTlv'])
-    module.add_container('std::vector< ns3::Ipv6Address >', 'ns3::Ipv6Address', container_type='vector')
-    module.add_container('std::list< ns3::Ptr< ns3::Packet > >', 'ns3::Ptr< ns3::Packet >', container_type='list')
-    module.add_container('std::list< unsigned int >', 'unsigned int', container_type='list')
-    module.add_container('std::list< ns3::Ptr< ns3::Socket > >', 'ns3::Ptr< ns3::Socket >', container_type='list')
-    module.add_container('std::list< ns3::Ptr< ns3::RadvdPrefix > >', 'ns3::Ptr< ns3::RadvdPrefix >', container_type='list')
-    typehandlers.add_type_alias('ns3::Callback< void, ns3::Ptr< ns3::Packet const >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'ns3::GenericPhyTxEndCallback')
-    typehandlers.add_type_alias('ns3::Callback< void, ns3::Ptr< ns3::Packet const >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >*', 'ns3::GenericPhyTxEndCallback*')
-    typehandlers.add_type_alias('ns3::Callback< void, ns3::Ptr< ns3::Packet const >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >&', 'ns3::GenericPhyTxEndCallback&')
-    typehandlers.add_type_alias('ns3::SequenceNumber< short unsigned int, short int >', 'ns3::SequenceNumber16')
-    typehandlers.add_type_alias('ns3::SequenceNumber< short unsigned int, short int >*', 'ns3::SequenceNumber16*')
-    typehandlers.add_type_alias('ns3::SequenceNumber< short unsigned int, short int >&', 'ns3::SequenceNumber16&')
-    typehandlers.add_type_alias('ns3::SequenceNumber< unsigned int, int >', 'ns3::SequenceNumber32')
-    typehandlers.add_type_alias('ns3::SequenceNumber< unsigned int, int >*', 'ns3::SequenceNumber32*')
-    typehandlers.add_type_alias('ns3::SequenceNumber< unsigned int, int >&', 'ns3::SequenceNumber32&')
-    typehandlers.add_type_alias('ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'ns3::GenericPhyRxStartCallback')
-    typehandlers.add_type_alias('ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >*', 'ns3::GenericPhyRxStartCallback*')
-    typehandlers.add_type_alias('ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >&', 'ns3::GenericPhyRxStartCallback&')
-    typehandlers.add_type_alias('ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'ns3::GenericPhyRxEndErrorCallback')
-    typehandlers.add_type_alias('ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >*', 'ns3::GenericPhyRxEndErrorCallback*')
-    typehandlers.add_type_alias('ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >&', 'ns3::GenericPhyRxEndErrorCallback&')
-    typehandlers.add_type_alias('ns3::Callback< bool, ns3::Ptr< ns3::Packet >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'ns3::GenericPhyTxStartCallback')
-    typehandlers.add_type_alias('ns3::Callback< bool, ns3::Ptr< ns3::Packet >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >*', 'ns3::GenericPhyTxStartCallback*')
-    typehandlers.add_type_alias('ns3::Callback< bool, ns3::Ptr< ns3::Packet >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >&', 'ns3::GenericPhyTxStartCallback&')
-    typehandlers.add_type_alias('ns3::Callback< void, ns3::Ptr< ns3::Packet >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'ns3::GenericPhyRxEndOkCallback')
-    typehandlers.add_type_alias('ns3::Callback< void, ns3::Ptr< ns3::Packet >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >*', 'ns3::GenericPhyRxEndOkCallback*')
-    typehandlers.add_type_alias('ns3::Callback< void, ns3::Ptr< ns3::Packet >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >&', 'ns3::GenericPhyRxEndOkCallback&')
+    module.add_container('std::vector< ns3::Ipv6Address >', 'ns3::Ipv6Address', 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::list< unsigned int >', 'unsigned int', container_type=u'list')
+    module.add_container('std::list< ns3::Ptr< ns3::Socket > >', 'ns3::Ptr< ns3::Socket >', container_type=u'list')
+    module.add_container('std::list< ns3::Ptr< ns3::RadvdPrefix > >', 'ns3::Ptr< ns3::RadvdPrefix >', container_type=u'list')
+    typehandlers.add_type_alias(u'ns3::Callback< void, ns3::Ptr< ns3::Packet const >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', u'ns3::GenericPhyTxEndCallback')
+    typehandlers.add_type_alias(u'ns3::Callback< void, ns3::Ptr< ns3::Packet const >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >*', u'ns3::GenericPhyTxEndCallback*')
+    typehandlers.add_type_alias(u'ns3::Callback< void, ns3::Ptr< ns3::Packet const >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >&', u'ns3::GenericPhyTxEndCallback&')
+    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'ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', u'ns3::GenericPhyRxStartCallback')
+    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::GenericPhyRxStartCallback*')
+    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::GenericPhyRxStartCallback&')
+    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'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&')
+    typehandlers.add_type_alias(u'ns3::Callback< bool, ns3::Ptr< ns3::Packet >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', u'ns3::GenericPhyTxStartCallback')
+    typehandlers.add_type_alias(u'ns3::Callback< bool, ns3::Ptr< ns3::Packet >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >*', u'ns3::GenericPhyTxStartCallback*')
+    typehandlers.add_type_alias(u'ns3::Callback< bool, ns3::Ptr< ns3::Packet >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >&', u'ns3::GenericPhyTxStartCallback&')
+    typehandlers.add_type_alias(u'ns3::Callback< void, ns3::Ptr< ns3::Packet >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', u'ns3::GenericPhyRxEndOkCallback')
+    typehandlers.add_type_alias(u'ns3::Callback< void, ns3::Ptr< ns3::Packet >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >*', u'ns3::GenericPhyRxEndOkCallback*')
+    typehandlers.add_type_alias(u'ns3::Callback< void, ns3::Ptr< ns3::Packet >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >&', u'ns3::GenericPhyRxEndOkCallback&')
     
     ## Register a nested module for the namespace FatalImpl
     
@@ -574,12 +581,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
     
@@ -671,6 +678,7 @@
     register_Ns3SystemWallClockMs_methods(root_module, root_module['ns3::SystemWallClockMs'])
     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'])
@@ -1349,6 +1357,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', 
@@ -1361,6 +1373,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', 
@@ -3745,6 +3761,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('<')
@@ -4101,61 +4125,17 @@
 def register_Ns3Int64x64_t_methods(root_module, cls):
     cls.add_binary_comparison_operator('<=')
     cls.add_binary_comparison_operator('!=')
-    cls.add_inplace_numeric_operator('+=', 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 &', '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_inplace_numeric_operator('+=', 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_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_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_output_stream_operator()
     cls.add_binary_comparison_operator('==')
     cls.add_binary_comparison_operator('>=')
@@ -4163,6 +4143,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]
@@ -4203,6 +4185,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):
@@ -5861,12 +5845,14 @@
 def register_Ns3Time_methods(root_module, cls):
     cls.add_binary_comparison_operator('<=')
     cls.add_binary_comparison_operator('!=')
-    cls.add_inplace_numeric_operator('+=', 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('ns3::Time const &', 'right'))
+    cls.add_inplace_numeric_operator('+=', 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_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_inplace_numeric_operator('-=', param('ns3::Time const &', '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('>=')
@@ -5892,6 +5878,11 @@
     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', 
@@ -7081,10 +7072,10 @@
     cls.add_method('Reset', 
                    'void', 
                    [])
-    ## error-model.h (module 'network'): bool ns3::ErrorModel::DoCorrupt(ns3::Ptr<ns3::Packet> arg0) [member function]
+    ## error-model.h (module 'network'): bool ns3::ErrorModel::DoCorrupt(ns3::Ptr<ns3::Packet> p) [member function]
     cls.add_method('DoCorrupt', 
                    'bool', 
-                   [param('ns3::Ptr< ns3::Packet >', 'arg0')], 
+                   [param('ns3::Ptr< ns3::Packet >', 'p')], 
                    is_pure_virtual=True, visibility='private', is_virtual=True)
     ## error-model.h (module 'network'): void ns3::ErrorModel::DoReset() [member function]
     cls.add_method('DoReset', 
@@ -8429,10 +8420,10 @@
                    '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')])
     return
 
 def register_Ns3PacketSink_methods(root_module, cls):
diff -Naur ns-3.19/src/applications/bindings/modulegen__gcc_LP64.py ns-3.20/src/applications/bindings/modulegen__gcc_LP64.py
--- ns-3.19/src/applications/bindings/modulegen__gcc_LP64.py	2014-06-17 10:34:00.468636430 -0700
+++ ns-3.20/src/applications/bindings/modulegen__gcc_LP64.py	2014-06-17 10:33:13.799996687 -0700
@@ -155,7 +155,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'], 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_PRISM_HEADER', 'DLT_IEEE802_11_RADIO', 'DLT_IEEE802_15_4'], 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]
@@ -174,6 +174,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]
@@ -198,6 +200,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'])
     ## packet-socket.h (module 'network'): ns3::DeviceNameTag [class]
@@ -514,32 +518,35 @@
     module.add_class('PacketProbe', import_from_module='ns.network', parent=root_module['ns3::Probe'])
     ## packetbb.h (module 'network'): ns3::PbbAddressTlv [class]
     module.add_class('PbbAddressTlv', import_from_module='ns.network', parent=root_module['ns3::PbbTlv'])
-    module.add_container('std::vector< ns3::Ipv6Address >', 'ns3::Ipv6Address', container_type='vector')
-    module.add_container('std::list< ns3::Ptr< ns3::Packet > >', 'ns3::Ptr< ns3::Packet >', container_type='list')
-    module.add_container('std::list< unsigned int >', 'unsigned int', container_type='list')
-    module.add_container('std::list< ns3::Ptr< ns3::Socket > >', 'ns3::Ptr< ns3::Socket >', container_type='list')
-    module.add_container('std::list< ns3::Ptr< ns3::RadvdPrefix > >', 'ns3::Ptr< ns3::RadvdPrefix >', container_type='list')
-    typehandlers.add_type_alias('ns3::Callback< void, ns3::Ptr< ns3::Packet const >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'ns3::GenericPhyTxEndCallback')
-    typehandlers.add_type_alias('ns3::Callback< void, ns3::Ptr< ns3::Packet const >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >*', 'ns3::GenericPhyTxEndCallback*')
-    typehandlers.add_type_alias('ns3::Callback< void, ns3::Ptr< ns3::Packet const >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >&', 'ns3::GenericPhyTxEndCallback&')
-    typehandlers.add_type_alias('ns3::SequenceNumber< short unsigned int, short int >', 'ns3::SequenceNumber16')
-    typehandlers.add_type_alias('ns3::SequenceNumber< short unsigned int, short int >*', 'ns3::SequenceNumber16*')
-    typehandlers.add_type_alias('ns3::SequenceNumber< short unsigned int, short int >&', 'ns3::SequenceNumber16&')
-    typehandlers.add_type_alias('ns3::SequenceNumber< unsigned int, int >', 'ns3::SequenceNumber32')
-    typehandlers.add_type_alias('ns3::SequenceNumber< unsigned int, int >*', 'ns3::SequenceNumber32*')
-    typehandlers.add_type_alias('ns3::SequenceNumber< unsigned int, int >&', 'ns3::SequenceNumber32&')
-    typehandlers.add_type_alias('ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'ns3::GenericPhyRxStartCallback')
-    typehandlers.add_type_alias('ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >*', 'ns3::GenericPhyRxStartCallback*')
-    typehandlers.add_type_alias('ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >&', 'ns3::GenericPhyRxStartCallback&')
-    typehandlers.add_type_alias('ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'ns3::GenericPhyRxEndErrorCallback')
-    typehandlers.add_type_alias('ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >*', 'ns3::GenericPhyRxEndErrorCallback*')
-    typehandlers.add_type_alias('ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >&', 'ns3::GenericPhyRxEndErrorCallback&')
-    typehandlers.add_type_alias('ns3::Callback< bool, ns3::Ptr< ns3::Packet >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'ns3::GenericPhyTxStartCallback')
-    typehandlers.add_type_alias('ns3::Callback< bool, ns3::Ptr< ns3::Packet >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >*', 'ns3::GenericPhyTxStartCallback*')
-    typehandlers.add_type_alias('ns3::Callback< bool, ns3::Ptr< ns3::Packet >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >&', 'ns3::GenericPhyTxStartCallback&')
-    typehandlers.add_type_alias('ns3::Callback< void, ns3::Ptr< ns3::Packet >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'ns3::GenericPhyRxEndOkCallback')
-    typehandlers.add_type_alias('ns3::Callback< void, ns3::Ptr< ns3::Packet >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >*', 'ns3::GenericPhyRxEndOkCallback*')
-    typehandlers.add_type_alias('ns3::Callback< void, ns3::Ptr< ns3::Packet >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >&', 'ns3::GenericPhyRxEndOkCallback&')
+    module.add_container('std::vector< ns3::Ipv6Address >', 'ns3::Ipv6Address', 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::list< unsigned int >', 'unsigned int', container_type=u'list')
+    module.add_container('std::list< ns3::Ptr< ns3::Socket > >', 'ns3::Ptr< ns3::Socket >', container_type=u'list')
+    module.add_container('std::list< ns3::Ptr< ns3::RadvdPrefix > >', 'ns3::Ptr< ns3::RadvdPrefix >', container_type=u'list')
+    typehandlers.add_type_alias(u'ns3::Callback< void, ns3::Ptr< ns3::Packet const >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', u'ns3::GenericPhyTxEndCallback')
+    typehandlers.add_type_alias(u'ns3::Callback< void, ns3::Ptr< ns3::Packet const >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >*', u'ns3::GenericPhyTxEndCallback*')
+    typehandlers.add_type_alias(u'ns3::Callback< void, ns3::Ptr< ns3::Packet const >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >&', u'ns3::GenericPhyTxEndCallback&')
+    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'ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', u'ns3::GenericPhyRxStartCallback')
+    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::GenericPhyRxStartCallback*')
+    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::GenericPhyRxStartCallback&')
+    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'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&')
+    typehandlers.add_type_alias(u'ns3::Callback< bool, ns3::Ptr< ns3::Packet >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', u'ns3::GenericPhyTxStartCallback')
+    typehandlers.add_type_alias(u'ns3::Callback< bool, ns3::Ptr< ns3::Packet >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >*', u'ns3::GenericPhyTxStartCallback*')
+    typehandlers.add_type_alias(u'ns3::Callback< bool, ns3::Ptr< ns3::Packet >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >&', u'ns3::GenericPhyTxStartCallback&')
+    typehandlers.add_type_alias(u'ns3::Callback< void, ns3::Ptr< ns3::Packet >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', u'ns3::GenericPhyRxEndOkCallback')
+    typehandlers.add_type_alias(u'ns3::Callback< void, ns3::Ptr< ns3::Packet >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >*', u'ns3::GenericPhyRxEndOkCallback*')
+    typehandlers.add_type_alias(u'ns3::Callback< void, ns3::Ptr< ns3::Packet >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >&', u'ns3::GenericPhyRxEndOkCallback&')
     
     ## Register a nested module for the namespace FatalImpl
     
@@ -574,12 +581,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
     
@@ -671,6 +678,7 @@
     register_Ns3SystemWallClockMs_methods(root_module, root_module['ns3::SystemWallClockMs'])
     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'])
@@ -1349,6 +1357,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', 
@@ -1361,6 +1373,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', 
@@ -3745,6 +3761,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('<')
@@ -4101,61 +4125,17 @@
 def register_Ns3Int64x64_t_methods(root_module, cls):
     cls.add_binary_comparison_operator('<=')
     cls.add_binary_comparison_operator('!=')
-    cls.add_inplace_numeric_operator('+=', 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 &', '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_inplace_numeric_operator('+=', 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_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_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_output_stream_operator()
     cls.add_binary_comparison_operator('==')
     cls.add_binary_comparison_operator('>=')
@@ -4163,6 +4143,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]
@@ -4203,6 +4185,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):
@@ -5861,12 +5845,14 @@
 def register_Ns3Time_methods(root_module, cls):
     cls.add_binary_comparison_operator('<=')
     cls.add_binary_comparison_operator('!=')
-    cls.add_inplace_numeric_operator('+=', 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('ns3::Time const &', 'right'))
+    cls.add_inplace_numeric_operator('+=', 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_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_inplace_numeric_operator('-=', param('ns3::Time const &', '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('>=')
@@ -5892,6 +5878,11 @@
     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', 
@@ -7081,10 +7072,10 @@
     cls.add_method('Reset', 
                    'void', 
                    [])
-    ## error-model.h (module 'network'): bool ns3::ErrorModel::DoCorrupt(ns3::Ptr<ns3::Packet> arg0) [member function]
+    ## error-model.h (module 'network'): bool ns3::ErrorModel::DoCorrupt(ns3::Ptr<ns3::Packet> p) [member function]
     cls.add_method('DoCorrupt', 
                    'bool', 
-                   [param('ns3::Ptr< ns3::Packet >', 'arg0')], 
+                   [param('ns3::Ptr< ns3::Packet >', 'p')], 
                    is_pure_virtual=True, visibility='private', is_virtual=True)
     ## error-model.h (module 'network'): void ns3::ErrorModel::DoReset() [member function]
     cls.add_method('DoReset', 
@@ -8429,10 +8420,10 @@
                    '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')])
     return
 
 def register_Ns3PacketSink_methods(root_module, cls):
diff -Naur ns-3.19/src/applications/model/application-packet-probe.cc ns-3.20/src/applications/model/application-packet-probe.cc
--- ns-3.19/src/applications/model/application-packet-probe.cc	2014-06-17 10:34:00.475636376 -0700
+++ ns-3.20/src/applications/model/application-packet-probe.cc	2014-06-17 10:33:13.806996633 -0700
@@ -32,8 +32,7 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (ApplicationPacketProbe)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (ApplicationPacketProbe);
 
 TypeId
 ApplicationPacketProbe::GetTypeId ()
diff -Naur ns-3.19/src/applications/model/bulk-send-application.cc ns-3.20/src/applications/model/bulk-send-application.cc
--- ns-3.19/src/applications/model/bulk-send-application.cc	2014-06-17 10:34:00.475636376 -0700
+++ ns-3.20/src/applications/model/bulk-send-application.cc	2014-06-17 10:33:13.807996625 -0700
@@ -35,8 +35,7 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (BulkSendApplication)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (BulkSendApplication);
 
 TypeId
 BulkSendApplication::GetTypeId (void)
diff -Naur ns-3.19/src/applications/model/onoff-application.cc ns-3.20/src/applications/model/onoff-application.cc
--- ns-3.19/src/applications/model/onoff-application.cc	2014-06-17 10:34:00.476636368 -0700
+++ ns-3.20/src/applications/model/onoff-application.cc	2014-06-17 10:33:13.808996618 -0700
@@ -46,8 +46,7 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (OnOffApplication)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (OnOffApplication);
 
 TypeId
 OnOffApplication::GetTypeId (void)
diff -Naur ns-3.19/src/applications/model/packet-loss-counter.cc ns-3.20/src/applications/model/packet-loss-counter.cc
--- ns-3.19/src/applications/model/packet-loss-counter.cc	2014-06-17 10:34:00.477636360 -0700
+++ ns-3.20/src/applications/model/packet-loss-counter.cc	2014-06-17 10:33:13.809996610 -0700
@@ -26,8 +26,7 @@
 
 namespace ns3 {
 
-NS_LOG_COMPONENT_DEFINE ("PacketLossCounter")
-  ;
+NS_LOG_COMPONENT_DEFINE ("PacketLossCounter");
 
 
 PacketLossCounter::PacketLossCounter (uint8_t bitmapSize)
diff -Naur ns-3.19/src/applications/model/packet-sink.cc ns-3.20/src/applications/model/packet-sink.cc
--- ns-3.19/src/applications/model/packet-sink.cc	2014-06-17 10:34:00.478636352 -0700
+++ ns-3.20/src/applications/model/packet-sink.cc	2014-06-17 10:33:13.809996610 -0700
@@ -34,10 +34,8 @@
 
 namespace ns3 {
 
-NS_LOG_COMPONENT_DEFINE ("PacketSink")
-  ;
-NS_OBJECT_ENSURE_REGISTERED (PacketSink)
-  ;
+NS_LOG_COMPONENT_DEFINE ("PacketSink");
+NS_OBJECT_ENSURE_REGISTERED (PacketSink);
 
 TypeId 
 PacketSink::GetTypeId (void)
diff -Naur ns-3.19/src/applications/model/ping6.cc ns-3.20/src/applications/model/ping6.cc
--- ns-3.19/src/applications/model/ping6.cc	2014-06-17 10:34:00.479636345 -0700
+++ ns-3.20/src/applications/model/ping6.cc	2014-06-17 10:33:13.810996602 -0700
@@ -38,11 +38,9 @@
 namespace ns3 
 {
 
-NS_LOG_COMPONENT_DEFINE ("Ping6Application")
-  ;
+NS_LOG_COMPONENT_DEFINE ("Ping6Application");
 
-NS_OBJECT_ENSURE_REGISTERED (Ping6)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (Ping6);
 
 TypeId Ping6::GetTypeId ()
 {
@@ -111,7 +109,6 @@
       NS_ASSERT (m_socket);
 
       m_socket->Bind (Inet6SocketAddress (m_localAddress, 0));
-      m_socket->Connect (Inet6SocketAddress (m_peerAddress, 0));
       m_socket->SetAttribute ("Protocol", UintegerValue (Ipv6Header::IPV6_ICMPV6));
       m_socket->SetRecvCallback (MakeCallback (&Ping6::HandleRead, this));
     }
@@ -173,13 +170,14 @@
       /* hack to have ifIndex in Ipv6RawSocketImpl
        * maybe add a SetIfIndex in Ipv6RawSocketImpl directly 
        */
-      Ipv6InterfaceAddress dstIa (m_peerAddress);
       for (uint32_t i = 0; i < GetNode ()->GetObject<Ipv6> ()->GetNAddresses (m_ifIndex); i++)
         {
-          src = GetNode ()->GetObject<Ipv6> ()->GetAddress (m_ifIndex, i).GetAddress ();
-          Ipv6InterfaceAddress srcIa (src);
-          if ( srcIa.GetScope() == dstIa.GetScope() )
+          Ipv6InterfaceAddress srcIa;
+          srcIa = GetNode ()->GetObject<Ipv6> ()->GetAddress (m_ifIndex, i);
+
+          if (srcIa.IsInSameSubnet (m_peerAddress))
             {
+              src = srcIa.GetAddress ();
               break;
             }
         }
@@ -223,7 +221,7 @@
       m_socket->SetAttribute ("Protocol", UintegerValue (Ipv6Header::IPV6_EXT_ROUTING));
     }
 
-  m_socket->Send (p, 0);
+  m_socket->SendTo (p, 0, Inet6SocketAddress (m_peerAddress, 0));
   ++m_sent;
 
   NS_LOG_INFO ("Sent " << p->GetSize () << " bytes to " << m_peerAddress);
@@ -248,6 +246,8 @@
         {
           Ipv6Header hdr;
           Icmpv6Echo reply (0);
+          Icmpv6DestinationUnreachable destUnreach;
+          Icmpv6TimeExceeded timeExceeded;
           Inet6SocketAddress address = Inet6SocketAddress::ConvertFrom (from);
 
           packet->RemoveHeader (hdr);
@@ -260,10 +260,23 @@
             case Icmpv6Header::ICMPV6_ECHO_REPLY:
               packet->RemoveHeader (reply);
 
-              NS_LOG_INFO ("Received Echo Reply size  = " << std::dec << packet->GetSize () << " bytes from " << address.GetIpv6 () << " id =  " << (uint16_t)reply.GetId () << " seq = " << (uint16_t)reply.GetSeq ());
+              NS_LOG_INFO ("Received Echo Reply size  = " << std::dec << packet->GetSize () <<
+                           " bytes from " << address.GetIpv6 () <<
+                           " id =  " << (uint16_t)reply.GetId () <<
+                           " seq = " << (uint16_t)reply.GetSeq () <<
+                           " Hop Count = " << (uint16_t) (64 - hdr.GetHopLimit ()));
+              break;
+            case Icmpv6Header::ICMPV6_ERROR_DESTINATION_UNREACHABLE:
+              packet->RemoveHeader (destUnreach);
+
+              NS_LOG_INFO ("Received Destination Unreachable from " << address.GetIpv6 ());
+              break;
+            case Icmpv6Header::ICMPV6_ERROR_TIME_EXCEEDED:
+              packet->RemoveHeader (timeExceeded);
+
+              NS_LOG_INFO ("Received Time Exceeded from " << address.GetIpv6 ());
               break;
             default:
-              /* other type, discard */
               break;
             }
         }
diff -Naur ns-3.19/src/applications/model/radvd.cc ns-3.20/src/applications/model/radvd.cc
--- ns-3.19/src/applications/model/radvd.cc	2014-06-17 10:34:00.481636330 -0700
+++ ns-3.20/src/applications/model/radvd.cc	2014-06-17 10:33:13.812996587 -0700
@@ -40,11 +40,9 @@
 namespace ns3
 {
 
-NS_LOG_COMPONENT_DEFINE ("RadvdApplication")
-  ;
+NS_LOG_COMPONENT_DEFINE ("RadvdApplication");
 
-NS_OBJECT_ENSURE_REGISTERED (Radvd)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (Radvd);
 
 TypeId Radvd::GetTypeId ()
 {
diff -Naur ns-3.19/src/applications/model/radvd-interface.cc ns-3.20/src/applications/model/radvd-interface.cc
--- ns-3.19/src/applications/model/radvd-interface.cc	2014-06-17 10:34:00.479636345 -0700
+++ ns-3.20/src/applications/model/radvd-interface.cc	2014-06-17 10:33:13.811996595 -0700
@@ -24,8 +24,7 @@
 namespace ns3 
 {
 
-NS_LOG_COMPONENT_DEFINE ("RadvdInterface")
-  ;
+NS_LOG_COMPONENT_DEFINE ("RadvdInterface");
 
 RadvdInterface::RadvdInterface (uint32_t interface)
   : m_interface (interface)
diff -Naur ns-3.19/src/applications/model/radvd-prefix.cc ns-3.20/src/applications/model/radvd-prefix.cc
--- ns-3.19/src/applications/model/radvd-prefix.cc	2014-06-17 10:34:00.480636337 -0700
+++ ns-3.20/src/applications/model/radvd-prefix.cc	2014-06-17 10:33:13.812996587 -0700
@@ -24,8 +24,7 @@
 namespace ns3
 {
 
-NS_LOG_COMPONENT_DEFINE ("RadvdPrefix")
-  ;
+NS_LOG_COMPONENT_DEFINE ("RadvdPrefix");
 
 RadvdPrefix::RadvdPrefix (Ipv6Address network, uint8_t prefixLength, uint32_t preferredLifeTime, uint32_t validLifeTime, bool onLinkFlag, bool autonomousFlag, bool routerAddrFlag)
   : m_network (network),
diff -Naur ns-3.19/src/applications/model/seq-ts-header.cc ns-3.20/src/applications/model/seq-ts-header.cc
--- ns-3.19/src/applications/model/seq-ts-header.cc	2014-06-17 10:34:00.482636322 -0700
+++ ns-3.20/src/applications/model/seq-ts-header.cc	2014-06-17 10:33:13.813996579 -0700
@@ -28,8 +28,7 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (SeqTsHeader)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (SeqTsHeader);
 
 SeqTsHeader::SeqTsHeader ()
   : m_seq (0),
diff -Naur ns-3.19/src/applications/model/udp-client.cc ns-3.20/src/applications/model/udp-client.cc
--- ns-3.19/src/applications/model/udp-client.cc	2014-06-17 10:34:00.482636322 -0700
+++ ns-3.20/src/applications/model/udp-client.cc	2014-06-17 10:33:13.814996571 -0700
@@ -35,10 +35,8 @@
 
 namespace ns3 {
 
-NS_LOG_COMPONENT_DEFINE ("UdpClient")
-  ;
-NS_OBJECT_ENSURE_REGISTERED (UdpClient)
-  ;
+NS_LOG_COMPONENT_DEFINE ("UdpClient");
+NS_OBJECT_ENSURE_REGISTERED (UdpClient);
 
 TypeId
 UdpClient::GetTypeId (void)
diff -Naur ns-3.19/src/applications/model/udp-echo-client.cc ns-3.20/src/applications/model/udp-echo-client.cc
--- ns-3.19/src/applications/model/udp-echo-client.cc	2014-06-17 10:34:00.483636314 -0700
+++ ns-3.20/src/applications/model/udp-echo-client.cc	2014-06-17 10:33:13.815996564 -0700
@@ -31,10 +31,8 @@
 
 namespace ns3 {
 
-NS_LOG_COMPONENT_DEFINE ("UdpEchoClientApplication")
-  ;
-NS_OBJECT_ENSURE_REGISTERED (UdpEchoClient)
-  ;
+NS_LOG_COMPONENT_DEFINE ("UdpEchoClientApplication");
+NS_OBJECT_ENSURE_REGISTERED (UdpEchoClient);
 
 TypeId
 UdpEchoClient::GetTypeId (void)
diff -Naur ns-3.19/src/applications/model/udp-echo-server.cc ns-3.20/src/applications/model/udp-echo-server.cc
--- ns-3.19/src/applications/model/udp-echo-server.cc	2014-06-17 10:34:00.484636306 -0700
+++ ns-3.20/src/applications/model/udp-echo-server.cc	2014-06-17 10:33:13.816996556 -0700
@@ -34,10 +34,8 @@
 
 namespace ns3 {
 
-NS_LOG_COMPONENT_DEFINE ("UdpEchoServerApplication")
-  ;
-NS_OBJECT_ENSURE_REGISTERED (UdpEchoServer)
-  ;
+NS_LOG_COMPONENT_DEFINE ("UdpEchoServerApplication");
+NS_OBJECT_ENSURE_REGISTERED (UdpEchoServer);
 
 TypeId
 UdpEchoServer::GetTypeId (void)
diff -Naur ns-3.19/src/applications/model/udp-server.cc ns-3.20/src/applications/model/udp-server.cc
--- ns-3.19/src/applications/model/udp-server.cc	2014-06-17 10:34:00.485636299 -0700
+++ ns-3.20/src/applications/model/udp-server.cc	2014-06-17 10:33:13.816996556 -0700
@@ -36,10 +36,8 @@
 
 namespace ns3 {
 
-NS_LOG_COMPONENT_DEFINE ("UdpServer")
-  ;
-NS_OBJECT_ENSURE_REGISTERED (UdpServer)
-  ;
+NS_LOG_COMPONENT_DEFINE ("UdpServer");
+NS_OBJECT_ENSURE_REGISTERED (UdpServer);
 
 
 TypeId
diff -Naur ns-3.19/src/applications/model/udp-trace-client.cc ns-3.20/src/applications/model/udp-trace-client.cc
--- ns-3.19/src/applications/model/udp-trace-client.cc	2014-06-17 10:34:00.486636291 -0700
+++ ns-3.20/src/applications/model/udp-trace-client.cc	2014-06-17 10:33:13.817996548 -0700
@@ -37,10 +37,8 @@
 
 namespace ns3 {
 
-NS_LOG_COMPONENT_DEFINE ("UdpTraceClient")
-  ;
-NS_OBJECT_ENSURE_REGISTERED (UdpTraceClient)
-  ;
+NS_LOG_COMPONENT_DEFINE ("UdpTraceClient");
+NS_OBJECT_ENSURE_REGISTERED (UdpTraceClient);
 
 /**
  * \brief Default trace to send
@@ -188,8 +186,7 @@
 UdpTraceClient::LoadTrace (std::string filename)
 {
   NS_LOG_FUNCTION (this << filename);
-  uint32_t time, index, prevTime = 0;
-  uint16_t size;
+  uint32_t time, index, size, prevTime = 0;
   char frameType;
   TraceEntry entry;
   std::ifstream ifTraceFile;
@@ -329,7 +326,7 @@
   struct TraceEntry *entry = &m_entries[m_currentEntry];
   do
     {
-      for (int i = 0; i < entry->packetSize / m_maxPacketSize; i++)
+      for (uint32_t i = 0; i < entry->packetSize / m_maxPacketSize; i++)
         {
           SendPacket (m_maxPacketSize);
         }
diff -Naur ns-3.19/src/applications/model/udp-trace-client.h ns-3.20/src/applications/model/udp-trace-client.h
--- ns-3.19/src/applications/model/udp-trace-client.h	2014-06-17 10:34:00.486636291 -0700
+++ ns-3.20/src/applications/model/udp-trace-client.h	2014-06-17 10:33:13.817996548 -0700
@@ -150,7 +150,7 @@
   struct TraceEntry
   {
     uint32_t timeToSend; //!< Time to send the frame
-    uint16_t packetSize; //!< Size of the frame
+    uint32_t packetSize; //!< Size of the frame
     char frameType; //!< Frame type (I, P or B)
   };
 
diff -Naur ns-3.19/src/applications/model/v4ping.cc ns-3.20/src/applications/model/v4ping.cc
--- ns-3.19/src/applications/model/v4ping.cc	2014-06-17 10:34:00.486636291 -0700
+++ ns-3.20/src/applications/model/v4ping.cc	2014-06-17 10:33:13.818996541 -0700
@@ -28,10 +28,8 @@
 
 namespace ns3 {
 
-NS_LOG_COMPONENT_DEFINE ("V4Ping")
-  ;
-NS_OBJECT_ENSURE_REGISTERED (V4Ping)
-  ;
+NS_LOG_COMPONENT_DEFINE ("V4Ping");
+NS_OBJECT_ENSURE_REGISTERED (V4Ping);
 
 TypeId 
 V4Ping::GetTypeId (void)
diff -Naur ns-3.19/src/applications/waf ns-3.20/src/applications/waf
--- ns-3.19/src/applications/waf	2014-06-17 10:34:00.489636268 -0700
+++ ns-3.20/src/applications/waf	1969-12-31 16:00:00.000000000 -0800
@@ -1,162 +0,0 @@
-#!/usr/bin/env python
-# encoding: ISO8859-1
-# Thomas Nagy, 2005-2010
-
-"""
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions
-are met:
-
-1. Redistributions of source code must retain the above copyright
-   notice, this list of conditions and the following disclaimer.
-
-2. Redistributions in binary form must reproduce the above copyright
-   notice, this list of conditions and the following disclaimer in the
-   documentation and/or other materials provided with the distribution.
-
-3. The name of the author may not be used to endorse or promote products
-   derived from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR
-IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
-STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
-IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGE.
-"""
-
-import os, sys
-if sys.hexversion<0x203000f: raise ImportError("Waf requires Python >= 2.3")
-
-if 'PSYCOWAF' in os.environ:
-	try:import psyco;psyco.full()
-	except:pass
-
-VERSION="1.5.16"
-REVISION="e6d03192b5ddfa5ef2c8d65308e48e42"
-INSTALL=''
-C1='#5'
-C2='#,'
-cwd = os.getcwd()
-join = os.path.join
-
-WAF='waf'
-def b(x):
-	return x
-
-if sys.hexversion>0x300000f:
-	WAF='waf3'
-	def b(x):
-		return x.encode()
-
-def err(m):
-	print(('\033[91mError: %s\033[0m' % m))
-	sys.exit(1)
-
-def unpack_wafdir(dir):
-	f = open(sys.argv[0],'rb')
-	c = "corrupted waf (%d)"
-	while 1:
-		line = f.readline()
-		if not line: err("run waf-light from a folder containing wafadmin")
-		if line == b('#==>\n'):
-			txt = f.readline()
-			if not txt: err(c % 1)
-			if f.readline()!=b('#<==\n'): err(c % 2)
-			break
-	if not txt: err(c % 3)
-	txt = txt[1:-1].replace(b(C1), b('\n')).replace(b(C2), b('\r'))
-
-	import shutil, tarfile
-	try: shutil.rmtree(dir)
-	except OSError: pass
-	try:
-		for x in ['Tools', '3rdparty']:
-			os.makedirs(join(dir, 'wafadmin', x))
-	except OSError:
-		err("Cannot unpack waf lib into %s\nMove waf into a writeable directory" % dir)
-
-	os.chdir(dir)
-	tmp = 't.bz2'
-	t = open(tmp,'wb')
-	t.write(txt)
-	t.close()
-
-	t = None
-	try:
-		t = tarfile.open(tmp)
-	except:
-		try:
-			os.system('bunzip2 t.bz2')
-			t = tarfile.open('t')
-		except:
-			os.chdir(cwd)
-			try: shutil.rmtree(dir)
-			except OSError: pass
-			err("Waf cannot be unpacked, check that bzip2 support is present")
-
-	for x in t: t.extract(x)
-	t.close()
-
-	for x in ['Tools', '3rdparty']:
-		os.chmod(join('wafadmin',x), 493)
-
-	if sys.hexversion>0x300000f:
-		sys.path = [join(dir, 'wafadmin')] + sys.path
-		import py3kfixes
-		py3kfixes.fixdir(dir)
-
-	os.chdir(cwd)
-
-def test(dir):
-	try: os.stat(join(dir, 'wafadmin')); return os.path.abspath(dir)
-	except OSError: pass
-
-def find_lib():
-	name = sys.argv[0]
-	base = os.path.dirname(os.path.abspath(name))
-
-	#devs use $WAFDIR
-	w=test(os.environ.get('WAFDIR', ''))
-	if w: return w
-
-	#waf-light
-	if name.endswith('waf-light'):
-		w = test(base)
-		if w: return w
-		err("waf-light requires wafadmin -> export WAFDIR=/folder")
-
-	dir = "/lib/%s-%s-%s/" % (WAF, VERSION, REVISION)
-	for i in [INSTALL,'/usr','/usr/local','/opt']:
-		w = test(i+dir)
-		if w: return w
-
-	#waf-local
-	s = '.%s-%s-%s'
-	if sys.platform == 'win32': s = s[1:]
-	dir = join(base, s % (WAF, VERSION, REVISION))
-	w = test(dir)
-	if w: return w
-
-	#unpack
-	unpack_wafdir(dir)
-	return dir
-
-wafdir = find_lib()
-w = join(wafdir, 'wafadmin')
-t = join(w, 'Tools')
-f = join(w, '3rdparty')
-sys.path = [w, t, f] + sys.path
-
-if __name__ == '__main__':
-	import Scripting
-	Scripting.prepare(t, cwd, VERSION, wafdir)
-
-#==>
-#BZh91AY&SY<áýÃÑ ÿÿÿ¸€Hÿÿÿÿÿÿÿÿÿÿÿ JH†0B°™ €ˆ,aÓõÞp                ƒëºs#]v®Ø×zõëËW;­º„µ½¶Š-¶Í´®¾ìõV½ÝÞÝ:€žÆ.XÚ{7¶žðÕ»knïs®ÇVÎP»^û»}ÎÛmÛ2kœ€P7ÛÈ—¬ùl¸}½Q;˜úûßWT>ŸvzÖÚ�ª»Ë»ŸvçÓ×Ñ›oƒ£Ýæç·}¾| 1  @Áô¥€Ï"¨;Þ ;¶ìe÷¸yã·£ ñêëiop4t [{lÕƒMO@z4�‚ö‚Ù¨¢"¤ ]°*ØÀª’ §T2(’(�5C*”-}ußgsYq÷º­Qïg¸¯w-æ Ê���4V›ïxç†ÇÕÞo;¶Ú»·½Ž«È¾ÞòËo·½m{ìt®vë·¯¯^ØK[#,½¼ÖÓy{ÝÝÞ†Û–w{0é�Ñ¶½uÎöîš ¥AZH5¶.;—ªbH	VÝ·AX­{j�ªÈ×X„U­°aMmÛ«Y™…Gn”ì=ïuÕí]}¾øÎénûnîïNu”Ó�µé!êûŽø}7µk¶Ö£ÞÏxÇ­UÎ}ïJôæóž�7¡îÞÚïc�íèb³½²÷rˆâš ¯o§EO>ûºK¼µ.û±ó}�>øûËjEv®wofz×ŽšÒîÚ¹³zÝínÝªUö³Õ¬”òÉUjë|÷×Ÿ|ñ>Oª Ë×ÑôäÛgÆwo±Ýó}ÔÙ”ö|æ—µ²{¹Û¾îá3yËï½÷�…ò»wn±]:–Üí.Ù%Ý»t­·É–ºª½ï=êwÛí”z³{–Þ Í€Vîè#,JK@níu¥¢¥¾áî›[A½Q�°sÎàå-Ë]N 2es6çŽí—ƒ)ÓÞö÷}nÛ¾øPQ÷ÕÝ‚ï¹Wy£×¸î»mÛºklµF»¯³yÇWo±¾�UZwot|Ü–ÙÛÏ‘á;rçNF]öéëÝkß{Õó}ôõÖí}³ßÀj�Û×m§s®Îë óŽ‹±§Ž²y=Mrsí½<wÍ±¶ÁÝ¶îÞ÷Ðg×¶í}O¶{Èº	®ÖîœÜfíK}¡p#,Šy°z³¹#5py=	ÞÎ‡xõÛŠ#,E,Ÿ{½y |”èúzy ºûnÞØ+Û{%„2°'6²¶Ø«omìõÎÝË}ÞO^ž÷½î^ó{zvwÍØ7�­ï�¶vË»€CÛ†ÄÌhkÛ½›Ýö×Ó¯;îÃ°«.…}ÛÓÝ÷ÃB�@5G@÷`ÛYå¶p Š·qow�¾>÷·�E°)@ärvžµDX>Ï«ëå™]ÙÝºÞµëkfÖÌÇ¦—nì˜gmÐÈ’‘k®ZÛ,Ú×m¥I­ÊÝ¶åÖùÏ\­hð)ÜÍ­»µÛ·—Ý—ßÒéW­ðZÕ+½žÛÓ�¸_ZzTí‚÷»:æ]ö5Ëžž}=óílµ[\eéÞsNAÖø÷›¡¦ˆ  L€˜&€&M	�2ddz¦Õ=4ƒ£A‘„ñ ”Ð@‚‰�™4&©ù='¨Õ<Ôõ5”¨�Õ0Ñ2C � ‘"d ˜#5mh•?Ð©ú&õ4¦ò§©äCL›Põ¦FÔm@  ÐÐ 	=R’F‘2SÔõ3Ñ&5¦šhôƒF€  C@      B’@šh M&šLdhõLLž©æ�54i£CÔ #,  MDB €&€h‰ #5m2§“(ýDôf“$ò›SM4h   èþÿ®9DWû”“!0úÄFP¤§½ªœ`ÂJ2´Y’áQøÊ€~ß÷ýÿ†«k¯ã¯Ë•ÆrÍùmÈ’žœŠt=ïV³ÕKÞ,ó	æh{ÕÖ?°_ý¬ïñH—PiØ � €<HçkÚ”2Zö¾,ÜÝ6õâcÆiñY­ãÈõÔ!œj¬‡{³F¬ÜáÌÕÙœMX¥·PÎ/Þ·­ñ—FlãŽ‡" oøÃö´„¼	¤0~¢@!ñ …#5@�  <C–™•7…}â€l ` ”EV8 DÊ#,¡UUAT`š	fTSL‰±µFl¤¬Ú	FT°•$JlÍFÊRÆY#5ÅMc)²¥2eai&“C#,&Ì(¨‹E‚´¦e±$ŒÌ˜˜Ë#R†Ä›[6DB%M’ XfXYLš0&ÊÉ¥fÔ‘°µ©m´¥¥S6”S(¦U!4”i¥¥±£4K4ªY›&ÍF&“M‘™R²d¨a¬$ÖBˆS(P£bM²2¤ÈhØfR€£%ƒ$M1‚,™ˆLÔ3!¶l")(l�ÐlÉ´²HÔ‘‰3(%L+12$›i4SDbhPÅ£ÒÂA6‚SK4Í1±-4[DD2bJf4# ¤Ñƒ4i¢°hÖH)B"1Œ	QDYK)%I–`Ðh"ÌÚ*IF¦¤&iDbÆ!HTJHÅD„¦ Á#5Â%!ŒÛ#5cf%†QŒ‘¢Ò�iASA¦”XÚf,MLL©DMH #F1%‰„Ä�K2DedÐ†ƒI)I#&Ì´’#,4˜£c32RZM&E,ÈŠi“ifmJ"ÀÍB)2TQ2ÒPl‘f¨ƒ1,‰c�046¤L“A¦¦¢J’¢›)¨d Fh,j1¬˜Ö(ÑE%%IŠDÙ,ŠbF‘ˆÙeH`f4�BRfŠVa1i&‰F‰5ˆÑ�QH‘h£E$‘cL±h$Ó6ÆÑ$c2)¨ª,(¤*#5Óe¨Ú,	¨Æ±±©6M”&ŠÀP%³2‘²#5h#R‰˜Í(J ¡±Q±54†¨È£L�RR"ƒ)›k6µ42i1“hŠJ0R“J" ÚL¢IFÓ2�XÂ•”,ij	*L†>ê×%ˆ²Hhš¢‰’“%†Ñeb©*m5¢©i,ÅAXÕšIb#F“l²™�#,&ÊC4E)’†C5A¤"Je�ªZl$€‘†Ò	c+S i%"V%55�M5„³2KR�lj•ŠJI–YdbMcJM"™Y1¥e™¤e™QQˆÙTh¶ÆªXŠI¨¨µ3Z-E±ZŠ#,H•–`È–ÆƒZ,!l[EDÅcÔ4›Âb(ÄLÈX�-MdÚ™IV“RkM¤–Õ¦µM“c’Ö6…35•’Ò‹#lÆØÔU–4JšQ&”“Zi©1&“lÙLš*Vf#5YjkÓ$PM"4¥)$²X--”›¦’QF#,(–F¦Q²ÊP"šd ‘I©$ˆ�F6#6M¢£`™JlZ,¥2JfhY,„e&†K$¤“2™4lRZLb�¢llÑ’jfÀÙ‹%¦$Ã`ÒFÐBP„E3	64mdY¢–(Ù±526Š-¬E‚¢ÓÅ¦A„lÊ£2šb+h¢Ñ”h¨JÓ0†PÈÖE3`XÑ2˜Ö’±¨A´Š”	˜-0Æ4"²’³i%‘hÌSM&¤+%™™b‰¡¢ÒZIFe…	$˜Ë˜Å‹’kÆ¥5m³e‹E Æ4LÈÑ,XÑSJÒ$„S1™0)›"C3"¡’)2Q£ d‘hš6C[ØÕ¢”°Ó)0¤²fDÉMQ¡dÈ’i¶5˜06Q³2T–“˜,¨ÍLF¤¤Ö,Q©4¤L(‹QÊV†”@¦Ä2Q¢Ò™F,˜,`¨Öe˜‹”¢¦£E�€Ô1²Õ1‰Q¢�ÒbØÒIKbb,Å2H TÚ”Š”¬1E™h‚±‹jM¢Ø¨MbR‰YJi`i€X¶f 5%%&b„[*4%´QM‰0ª,b�Š5$©fQIQ”3	#5’K)V‘ ÉXÛ[Ò”­ŒŠ�L¨¡-&Œ™5iŠ*[£clUQ“dÚÅ6H“5F´m"m‹j#5©-©Df°-HÖ)š4…Ò‰*ˆÒËh,šÉ!Rh‹M%Q2Ã ŒfF3 ©1P–5%UMj‰CbF(Ó%1Y‘ŠI¢Pf2„B“R‘–,À‰@ˆ˜¥‰ ”¥P#m+i¬d#5ƒQQ#,#aŠM5!¨“d(ˆLÈÑ¤Òj#T¥& £å¹£$A&eF#)“ù_{s›¥¿–¿ŠÞ]‹#5e±XÃý¦#50`ÿbÌác£nû˜_ö®«ö¯çÍyMJJWÌ¾K•xîïëôD¾y_ûÖÏõyŸé§£ƒsþîóýü!¦ý!I?ÚkÀ³ŸŸ=¼+î°C„©‹�øÚÙ³3)É]’uÊ#ã„mi�·ô�hcgÇd*`Üh�þÿ#,/&¢®å`û4ÜZdFœK]©hž¤¬ÑT1(¤Š¡£*téwÑHøæàÝîr¬†ôâÃ+ëjvB™ÞÒšöiu™Aç j‹iÂ’!f<?íkç¶TŠf.WlòØÆ$(¤#5M¢ÖÖ²”š% š2£†¾t›WT¤^Òª<jŒ´–êNngü–ð8Å‚‚3xópÌq›¿ãòÿN,MÔS¡hm¥$ÃÎ‘qhƒö³µ;V’�ÕXP‹'o�Ù�(ýêÛ@Sü:Ô–œ¯·™¤îê÷\·ŠæÉrMtð©<|ì¹”4Onh9ÕÑ_€ÿÇgWmÕ&S¡˜m˜A±:Ì ½s™µu�M¼Båö:áxÝóõÓHÅâÞ»­ã´ûÈï! +Ù!ë˜�5R(±ŸW\¯¡sëåçFˆ¤•kñèišÕí™µg¥¬1¬7àÒcm–;bd	M7éÃ'Q“UwïÄlÕËÑ½—ÍëÖ¼TjNk¦=t]Øéqðwˆ(¾#,Ëxóû×ðo=šJ,h½q®Ù+ëõÒÎkà×“$x^{ûÍ3yþûŒbcÌ%`ÚQ‹x+•öUÉ*/vúÞÝÔÑËB(;�-K‡«}…»fíÿÛAïñ9!¦C·wMbÎu‡!t‡\?¢=qxÃ˜ùÿ×RÜ³EÍh/…ur˜kJÜô�ôÄˆ:%1Ë3¸4ÿÃ=8Ã¯GÝ¬›¾å?4R”Ì$7ÅQcT7VÁ­®ÐR¬ n;`ãPMÉô†“4ûTŒj¯rU§k½£›â›³Ê÷1µçz<ááur¸!Â5ðíÞ8aéï<ñvep»è‡·z]ç§yÛèk©xè÷rLbÉŠ)a‚ƒk(][ˆíE¹)TÕ+*Óª�� ±‘Ñ¶2°µQ·n¹ª—eË#5_‡]Œqõó½TGp‰AQw0­Ò_É¢jF�HÛ|õ”l`d‚>M~©;;·ÒQI˜å)xbúFª#5ñìÖ‰ïå�·v'8n2Òqf§¬m}w¯.níW6˜ô«…òn�#,Ì…ˆb«ýl¥E8¸Nã]Dbùû¢/qk¤¿ÙíÚéM-TNØ9>q„/\Â˜7“:g`Ç~ÙÄª‚ÿ­¦ß•Æê"ï©Y©Bo@#Ó‰±ˆcAåü!�"5ÄNcJÖ”Üà¦¸£±˜Bã!kUKd6p3‰ Øœ‚…“è’Åöãm�õ±+JÕ�·<¤zh�ŒmäšuÖÖä:ü¢7‘íÄ6Ž5[g™ÌßM	ê'‘F7_“+âÔPæ	=Ï¹¿Ãïh+K#êÂÆ(ˆ¨	úž:Þ¬-gñ¥ÏÎÊ"*ºâ¡g6W½£¥‡JÁŠ%Kîï„Ë[ÉþÔ÷a¦mœ9�‡0;?¤È˜Ò)/ŽaGÏˆ8@e–cV?=¨'®èjÒ?c ÆI–5Ý“Íþ”˜÷öÌ$Ç¶u¡-ñ}ŸóñÛ†aÁ‚«¿Õaå¡Y™•¹¿#5ÇsX)$„j^»}ëÍ7ñ÷N×�çi,ãm¦º:>#,¶šA™ý5û8ÚÓEð­3'wÍƒôô›ÄRžöO¾…ºÐ[÷õ­’h…vc…ÑŽÈ”‡ûøÈ”’ìãåÅÛðÓÎÎö±NÙRJ²ôhº×Z7;/û³Ý¿<™6OUg&~ª¡N#,,”!Üœ7T�û^n•J§º¶NX’…žÌYÇºƒå Vb5JUM.›ªž‘V¢ú4zÕ»mo´ÀKÒÊauÍ´ä®ú®›UŽ#5”;²$=Í¥wc. îJMDÔí¢•À‰†pÝÂŒdsC!Î¨•­–£ú®kéXßõ]ÄMú_GTÎõï¿V)¯RRÜëuQíh¾óãuÏZf I¥óS?@v¯|o,ÄÜtÈH~Ž�kÅ�%iœ4FX�>†+&2¿Õ ðï~�·Fr¹‹4v%†»^p\s¿�à#Ú‡�›NT·	Îû dŽÈÂ×„ø–)&<µÿ†w=~¬«ökL=TƒÇdå‘ãM±ä¥Dvt¿<âp¬¦p½•BÚdôJ/�7Îè0©À¥QÚå¨Ì©Bbªîè´ Eûãif–ZÃ�„zñ´"ÞÅé-ÄyŠd¢bš�Ú_ŒõîìE�°áôaZR|Ùâ=–K]+¬¹K�®ñ9¸1Å·³6X‹Æ´mÙ�,«'kªK<®W]“g¬Óg×œá•´@Œí¹r)<X÷!‡–QÄÛ8b›¨V•C)MæÂØˆªŒG­bêw0ºsf¦˜iã¶þôÞÉÆ�J¿tyí’f^™‰E…¶)ÒGWëÌ?åõÖå³Ýj¶ù¼ðÁ³O¥†É÷ÚÊíµe %ê 2l8æX½Bså:ÞñPFÃÁ Àªó¥ÆŠq+ÝsŠp�·<\e§	}*“&}×Kn¸›Ü4ÕöÉí‡6&ýœ\æ-ºüZVÑÄ>ö®ØFÙõµíÐËÌàÌ­Ãéû)_*�êò–´¾¤ýÔÛÓgNé¥×tC*¼j‘4N¥Gdë›g9§ü?šiç%!	Sò‘¡ü×S „É¢¡#58M*+kÌ$ÞPå+âwS4çL×iKW´Bg£Â%#þÛ¹ÑÏ='-ÿ‚ln;·/hÍ‡<¸»_è+ìJòz(Kæðé¡xq2E±ÔûnŽŽLuÉÖ¬óÊ>ÓW§Çƒ—ÚqOl%ý$:aÒÏ4{oŽµìˆ#9#,b‚ÛW…«§J¿oZ†õÖè]znß‚ž¸®(kÆ‰­Ð¢mTr5šE)»çGFXÓHªUÛUÝçõtÎPÝÍvl"þ~Á½·�`Oº”nµÛ¤ö9½Ðcß>våbÌ	!,K£ÀÖzCC|fïg{=¦7é’¢I"8e_<ë×ÜkwÝ¸ï¹×NZo¤¼`�{.?|ÏõEÊ¡þ’†¦vÝ¡7<<K�Ýï½<dhþ({èÑzAì‰Âé0-æ‹0”ÅÍVÞu6u‰4MXqÐ¡ñ¼Áðü ‹«,a�Šß�ßcùéÕ~scåê(µF" ¬ˆÈÍh+‹ëès2nÍ~8œïIxÜÂ¶�í/ž~­½wÀ¦Ÿ,õaGî'O8³Ã ¼ò±xR`ãE‘( M(}ureNª¬’?ƒŽ[ŠR Ó¶‚ýUY©š akíhÃ³Õ+T~�VTá(Øèlô¸1àŒç_›=®(ù'CîªIç§�s67Æ³1>�`ÕRoÕ:÷VQÝ~qÂÝ”¯eøw ØxöyÕm¼ýPPÜ9e|îÕÓÄ[>nÞ¸»Ý3wŒ6ÒþNsº,²¯—nšpò["�,¾”!ÖèÝòþ‹ëž¸²H¾Û)'c	¶½ÚÔå“íPHŠgÊæ_äôâbOÜñ½'ý;Âáë»z6ô�îB²<ÑžÎiš—‘‡špKéi„˜¾ë+À õ;®ƒÙ[ÒÙ¹)ë~¿3~‚¿+½³ø×ž¹ðyñ­×—@ºa>}!B‹!Ýñð,�Ã=ÿ…w§›Î0-’ž]õŒÓ×A«Á“jJ«kQ¥²fé•U#5™½­dæååœïÀv¦ŒsEQªQfíÚÚáW_u]â�xœjÑÞiœaMqH÷|±aªÖ.mÇil;îÈ¶Ã‚[z3gƒ�*¥Q›Ñßwû?c#5¦Zwdúƒ²'� °›øòLXBMÂkœ÷�ª©)Ç²¤wMÌ[g˜RŠÙå0M8ß4y+õq™£èã¿aáž8Ã(&­dÑ]0t-×z>Œù9GùwYb)ÛA›¢‘]¼îÒ#Ñ2ô#ŽïaƒÅLÕ»`³º¨Æ}×hŒòaõ:³A3IþÚ*œ™„;ª—…JÍ¦lñÍ&I&°ðçH‘º¾TR)�¤æWÁmzÆBGE÷ŠPlô²¿—‡ñû?�ÀŒu£‘ë6‹nøõ¿�­d™ž×™–^¨˜ªÔ›S±=Pâ‚¦pL%žzwà™Í/FŒííÄ¯q‘²§­¬ýú¿»PlþÌ…$íÖ~³¸ø6W'Ù˜#,ñGuòô—áúXšlhg2#£AÖÁ³8âÎ\ØlÊúU+#ŠÒÀ¡WÅ¡�©¿¥µ3õ£×ùÏtfÏHJû©Q=\†ù»›Náá×‰2ªé–#,¡˜Øýú†üÁx"iÂèÔ}ÙèT­özw¤y¨YM¬¬@ôÆ•:J~¶¦¤1dxÁfj¸eŒó±rÅÓÐúÃ“;5Ng¾L•o¾ÍÊ<ÜMõ“bŒŠƒ±�d¾�ZX�FÙ~ÈV4Çç+¿./G;I!‘ì›²†G1“ù8|¤?>~û‡”óbcEÞfæ4f‹aC	8A—ÕŠ™‘¨ŒïZ$#�uð¹œ×ò¹gkQÑ/‹uÆà )½2ÁÿëÂµÓÓ©FÆ#,Å«R‘•B÷#,"/¨µPiI éóD¶<¡ ‹·lìá’LS$D’îgg-–ÒÒ�ç;ó­•„¤š@)¨1Æ‘hq©"�! ˆÆ¼gf6kÝ==fŽK¦½Þÿôäàp7]ÖŠùÐg²¸¦£Ï�[Õ?{Y©IÃð(§öé›\8xQ6:PûÓÉ«pHŒì¹ó_æ|ÎÇÃ®F �Ï?]öþçÜ/�POÞÊ�wÈçmÿWÇMv¼h#³NMñÄ¯)´â Å,#Ì¿YÍîý�QðdÑÆQQ‘L:ÕçUCÖîz¹ã¤·¹ŠÛ°ÝÒùh[…/�´°–<æ²(¾ñ0_!””jkÝuûXSúÕ>kl•1) ¢"#5®{*ò?:pJMÅ©eP�R‘d.ëÏ\7¿ý|7ÏÜŸ¢õÝÇ»�ÃWK©fU/l”S%	æY°yCµÿ+ƒAì“lTqe¬æB¹IÉYgH~›#5tìâi�ï¦´x¢‘dÊ0é�Éf#,ƒÍy.³ÏLîtêOjçµóœ<&ÿ#,õQXº6Ñ®ðõqæâ®4‹¸óëþŽí¾<ëMhâË¬Ý¤·Ëwo<G‘Z°ïN‰üN‰—ƒ?™qîÛ«òçEfBT°›ÁR!7txÛF5R°çö^æ¬ØUŠg"c«4gïM¶¡œÈø“ægv±½ûèKÁÄK‰Þ›øHøòµ°ø©ýÎ7žÎv cÅº)^—ÚÒ¼_0™”*…(�v-,CÌK#I†sªk¬P¢…âÌïaÞ+ã^§Ë-úuþ}5ÎrRÕTçñ¥�T\òëŒ Ë2´´ÓMU-ñÌ#Ë¼Ü½ú6FÖ‡6]8â>é‰#,iÂ¬çÉÝZï0@š>.}#5GÌSÃÓ—tñ«õ¾âÅ³êæ”!ô£míÒÖ“nÍ5í„•Ö¹Ìê6½Qäù¶Xz ¸¨BM|ª’[Á;�¿xôó ›Qê¤™p�;ä‡‚ëáç©¬^´P¡Á)!µ""‡ÞžÁ·L©öÛ©]fqåsÊ1ß³]•Mf’�ÙŸcé:ä²¤Ç…¥ª…—/3è.5ë‹‡;°	ì|G1(%ëvyßÁjÕÙg¿ê0H˜³@Êå€¡{¯©ø“FšåÉ]|¾SöV¸_7{ó¯<ïþWÖÿ Ö¢ñ �î8ùÛÚí·Ç¦hG^È�@VÀ	!vxL\6és³óè‹¿J¸|ïô¹þßèõ÷û^:éOÕ/4’	 ûñð€ãƒÎÜ;G¶Ïà÷ñöØBØO´ûÓ‹Õ2‚�ŠY"  ÛÃôìÍVíæôß«’æÅÊ’Hp"…TŠ±™ðe3>QÝ”þ½N¬BÔª¼çŒí6[»THœË(C¨|”LÍÞ	ž¥!'c’Ît,íÇl(>›MqÅžxŸ�ò-Å;¶9<úvÛÍyÈkáóˆ¯,Äç2ÏËœ«pç‚¿í!ág©%á Õ+>U§¹Ôóìo>Ôû¦áÜ8k.gÓkqüö¾Q#÷šÛ·Íö¬hEŠ%o»ýU¬òËaZbîB»‘ùÈ�ÊÚ�!Jt	¾ªe•©6Õ 	‘Æú¥ƒ«ÄN‹,u0~ç3uQâ€rX4¬ðÃ‚cI?ˆQé *Mñe¯Ô©N÷ÕmÈE‰£"ª{•wŒÎpk*ã¬<þª‚7~:f>²—IÁ½˜¾V¿YAô…#5G1*ªK­¥ù:?áíÅçz.‘ôÕÃ`?ú�´é[Î#5LÈ­@qóù2³ê²ëÓèè†WsYÙŒ;Ý uwÃž#[Û-TŸ4ãé‡wÝn½^hê ¾y¬  vè!	@B�¢ƒ—û F@9yõ r$cmJ1†ÖÙõ9€NI´ß[;œ©ˆ¢nÙ¹ÿ�æðé9êùæ(øqõÝÃÓÐ˜ùwSØW>®l>h éL0@ˆ=´Q.‡ —JHoèèžÒô"·ÐO\Ã÷�ï`. )@Šˆ“W¡M¬Â—äçÈ	x€˜i¿þ�eþšCêßâPƒU×2¼Â€�JÉ©êi?2 …/	2Æy]göõQ{Ä‘¼ùº¾«ÎCJ$)¤M²¢)TýUŸ–ó2â6ÊÔ,²�Næ¾^ü'P�÷;oa.6{VË(‡�wFß�d›~,0@QuÆ8?‡‰Ïô>ÜÂ{wâÏ#,(›�…ógŠ,®îÏáähM}Ý‡®xó �ÙT `n&ó+P¢>ÙºÄi ÍÆ¿Bô¹y¨ˆP;©}I™{ÇzÓC¼Ÿé³—fún]Á'o?�ÖËüá?ÕLé„)$ÛT°d)có}�‡ äôØ“®Ûõ3^äƒ«-o)mäuôÖ3`F~~eîÄÛÿ±ïâoÜøqéA_®j„Ó-ƒN’ÿ5Žðß/Êl�lQíª¬bÛ¼pËš	À÷RÈñ;rñ	Oë WEó:ã¤Pv,�®‘@^ˆ7¡#,œÜ „�!âÁsV³¿[žíÊ†©$.t9ã=¥tõzq#,CX³ro~ùyÞÚ1ƒU@Þs“¶UÒª�µbf {>‡«ËApó†D/[ÊŒh“Fˆ§Í¯ª>Ç<Ž¦‚ŽCÓ1.;[ÆÑÆïç«<Ý4¥™w�‡Õ·d?Ëœš4jð:qÆI†92~k�>õÎ,ØKWI÷º/d_’„C™$ÂaÝ~<ž€G§¬-N@…F‹«#j]9—‡`dQ�Þ{ítâ¾q¡®#>ðîŽÂqH“1úqÖÇûr÷¼4:Qùý‘�¯íÍsžd�Š¡‘] ¤�§(<ÏñŽâuUZ'éŒ«cs|wüÜÃm)ÛÊác†JuUÒ42s»Žß«³4.nø¶lÔ®¤rtý¨¶º"PÖÛã}oVÎKS�#5üÎ¾,KU®9ìË¥ÿËkÒárª˜b…’s�9Å;µÈgLü�Û×µÏMÝ£ý¿M˜ÖÎÀ˜MsÑ¡¤�HÜ“«(»UZeÕzÌ^ç�ÚUéêYÕ�ÀUòáE?>o8ß*{bñçkÕÞ¬A„l¯]ŒýtQžž'ç¦áuDT¾TCïæÞ³5~Nd«,ùs7ï«ß®¿tlö/ç‹hÞþøÊ¤G>pPÀ~K¶ìâw6vþ‹pê÷S›$1…)$`F2\{èÿ7§ÓY©üo€‘ys©åÏ�ífìnsÉáý:6ýòÚny_E¼š~�Ñ¦xp€Ì0í,;¡óPÉHèíîáÃñ/7—·ø`ç´ûrT#,v ŒíÇýsÉSé)>ºo5Ê|—bP&1Ýús½tÝ«k�âæ£k‘£ù4Š 7ìgÍ:‘óëk©"Ü<n	�ÞË˜/‘eÛ–2¬•¬9îWíüÃ­|ˆæIÐ·ËgÅ¨q/)ÏylZ°z_+ùCM¨ƒMÔwMÜŽš+¶(aíd¥„†„VHE—‚¥í³Ò|tÏ;ký2l‘Ä;=sèêô—¸ÙÙÅË<>ZS?+}ÄFÚ`ˆx'Z]­Q¦!­?:BåJ±×…°£u¶†FLa2}ä"_›8.hÂæ’ºs;­ŒVûT3c#±ÛÛ-e¸‡dS)Œ#5OC–'ÍÆºãúŽüi�(*¸à¤Û“ùwëÏßŒ1�t4»¦#,	¶õñÌ�¿Ž1©‰’?“+(BS­äƒ‹yH7ø÷ŒJÖàÄ°2 G¦îýÏNCµ· …È€TØpQ™5ìpÒì#5sfú½y²J*ægV@Q>ÅmÚ*gÆk§~¶^ #5N�UæŸÏÐ�Ì�Kb4fz´Ø…?ÚˆÇ–¯ÉŽUý&ñaÈ!&—ué“¤F+Ø]´æûžK±Í‘¶`üa£-i“áÜÅVŒô¼õ¾þ~ŒøÃu3¾ü@�ÑÓaÉÖðÓUÖýíà>ä[vGx¢�Å¨,(wØâÒP�[xïO‚;½–mm¾–¾ÕH~/kx”•AÅ¢»nó—)£Á�¦¿‡œ‘áCñ×n»*ñëºò–-é~5^i \’Ÿ’E1ñiyvU(3ãMÔ›´x%Þ¡·ìôIáß½‹Ùi9åÃœ–{—‘žû«ØD`H#@Ð¡‰1+KA±_^É0Ø�ªþVÍxr>HbÀ‚ÇŸ‰ÎøñKl™¼gŸÜWú0{àt!&ç�žqÆ µãÞœðXì.©¦jh-Ñût"*©ùõ£Wo…ß£}�<2yQô©f…�®#å|A×x,P†›`§þ”õD1QÇBÛ}Éúxô¾ƒ¾ð NéAýjaLs=bLqgvµímKÝTYã‹øC—w;(ý±,„’Yß2Ö±úþóñ½]ôzøRW³éÆKç×~|ÎŒ#,E*¤)ƒ¢ë®Â#Q¯;©šˆ£TêÚû¢olqô{ñàþ¦õóÉÕ#fDÐq@>ôR½VMVØñ/Ë^�v-7�o‰ð<3®VˆƒŒzG´º�D�À¤XL$›{ËX9Ý4"Ÿ¦28ºd³ÎPE8ÿÃÆcZ³¯ŒdmÅe§l'¹?„ÒÉ«¥ŠnxJi`8‡4$!·6ã%Uñ0ìØhš€ØˆÔdb'0Š®à:ŸI0îÃ�1¼ñ@ÛJ8‡&XýÍÞÝ–,Ïnã,ZÎ›oß4$Ý•½60†xÞìÕà¸ÓÊÿÀ†'Ÿ(è€KŒ¬O`n°J•T:ÚáuÁdì«ŸÃˆ‹v·)|ËlAëÌ¡üûf�Ñd�Ïäe5þ¾°6ÍiQØCs¯)f={²œ[Ê¿uwqs›šÎ¡�¶‡hP‹ØûµÃpðã„ðL„ÉÐ;-q·~'.[œ#5Ë�Øæ¤ÒËÈ€Ú5:ƒ	#55‡"A£³ ¤pU	è¢Œ#_± þ¯|Ù¬S€ÉüäøGO‘?†ôÜï³B¬¤@A.�kr@Æ“²Àâu"jM¨¶”¡sgF�ÉLßtBoCCŒÌtL$u„¾Oo‹køÛ¬é´S¶cÎÑÇR�1TÒ7?#,VNÇ+Él·Y©ù�DM†£Æ»_Àr ºªLä,h�p«Á�¼>�H,<†#50éÔ;SÇ!Ô9$7GKqîvL#5EðÄ9\ �Þ@_«·’ïèÏºŠÚªŠ.9^ì(�—@4ïÌÈ= —-¼ë$ƒr9�XVÍn®ZJ)¡UDH®!mÑTž¯lÂ_uZéÃö�÷À}‘µÙÂSie1 1j-jÂùhØa��g�Ÿ…P/á¬-WiK!œÃ—)©„ïó†‰™ä(›ü?7ÒÅt‹Šß°e´2??…ºáÐ#,{‘h~®$&\æÚ›‰‚–8„u˜£K.»ÞÒ¿®ILÓj-ùôxæ›ˆscÈ`øtÜ2›Ê‰ÊBC¤¡Ñ©�:Q%-àuåî^Í,Å!õüÝáµ­�chmŽ/±8ë5g£ÎñàÉuk\ùÕç½^‡ü…œ ËßkTi‡¶¡+Q!™B…#5NbÝƒ×dbúW±T-Õ�+½"÷ß·wŒ	ài]I><ö?ÄÍ¡™Â¨ÔIc0®>�ë ËËË•¿,�ácPÃ@ÁH°¤ßÂPiã9"Æ‰ªÓ3WId 6Çš¤„rËMÈ"XÔlÓIä‰°‰Á´4Ø±£Y€µ%kÜ’µuz›­â’Îët®mÄ¹NÝ´DÕeÙW×LÆ±(1F„˜‰"—|4wÛqóã­�åêm²¯B Dì¬´§ÔoTi8†`ª•¡b4µ#,›øå\-Âs!Ã®Íºk2³xC÷6ïi®Ë™/SR! ÒaÌ2ðýÿj�A	"€jU@ËXL¹Ì!µªDv›Iº„ax)Ûf!dgïŸT”#6ûÈÌ4tKÇÂFaÝÍ›{÷t4ƒ¶‚Û�”D¢=ûÞý1	…vm×ó�5m¡7óŽˆL5íSMO70Ð/x–'"VŸhÏŸ�ëÄ¸ó±x?è‚N•ŽÑ-Ú3"‡©±±	:ûÊÊÛ§†ˆ5xV$ƒÀ–¶ŸXš|RóyøÞû,–ÛÍ5LÓdáiõƒ‹Ž?-1hÎ¬¬óóû»ÎRgq _lH˜ÙD¹«£]0ÞÖ¯G².Œ,eÅÀ´Ñ¹–e­3úÏeV‰©M»w	«Âš‰d‘³ÍìŠ~±ù?´yÅÐ¿ì5 Úw-Šäb>Oì»ûûøø÷ðfÐ˜Ýeá7zë×nÔl˜Šôµë¹zòë< 1>óØÃ=È‹@ÖB6Æ|B�fRJ%˜ˆ¥$’”9Z¼�kIÛ�Rž©_ì£¦qxKÉóbáë‚¥�ÍÇ¼;Åý¿ƒŸÄ[ Ž³28üÌ¬5ÇŸK“0´ÍÃÉ &gq!›Lr»C—Ù±nŽ}_«rU­ò¨iÃÐ“J í@m$“r6¡u2Ä Ù+Ž™ÐŽ×Þ†iH»0ãÇnMË,báwÈZCÈÄ×ö[w„ #5knøò;ö×X#EÆá¥tìýB“éÜâFÃ¸ù†/£J4sý ÁÏ´=puø#,éÂÖI­kìú¡_×ågo÷#,iÑ .=¹×°è×–g¸ý¼i‡¹>+¿"ôà¡Pwó�UãüÁAäƒÑCùuü¶ý½}uGÑ] }µÄyïî�`Òw'æ¿ïiO#,î¥—¬Ð.y‰siÔ*”ËRŸãg$û�õ¥k_ð³C*b¤GïrÊJ+5�ºI8Å™¤8,ÉäzÐö7&-•tÝ@‡jA%=Ã,¿¿Õ#rîºÜýˆ¬�&ø9¥j¾+]‚Ò“ ŸÚ)ñl5dÐ|çá MLý>\ÛkŒr�à½y<ÏH8×£’˜ˆü@†x£rÑ Þ>ƒŒmsV¨Œ4Û¾zo½-OÆ#5N[ëýîòtÁQZGƒrÿG-øÿò]´gvø~ƒÛ£Í×¦tP|� wŽˆ…Œd­h#5<<c“(syº››«_Õ.irÙ˜laœjP$õùÈ‹t/cº××|"-Þ[§‡ÝóÔÀ*1ªªœðõ¹cÛ§‡áëQ˜‹üvùÏ/+åÒŽg?¨ Ï™ö0_¾ìÛ¦’°QÒér“ÔTJf•zPÈØDÇ^=#<l=ù:´þRÇ—ççz¢uKCvh¶ì*ÅºÅ�ŠH!�V?éG‡Hb�ö5vîÔ�ïõ?qÑóy×ò6Z§{rÖ†¨Q4k¨w6Ã,N8šŸNá›#�åÏ-~…F&Ÿ$ŒêíñkÏWK4–\OeåÎí+—Éå¥ðWñzg�z¼¿bþ£èÿ>îù`€<áýb Ë‹û;åmvü{þ=ž8Šj…B!@¥Õ‚6O»K.«R8rGTyBÎÅþ‡ÕŒ‡¯¤y±UV#5±îÔ«4+ÎçMºa5ßO]¤DÌ%S´„0ŠF¯¢ËeHa#,ùcÊNÈ6aw£·Ûï<¤-Sêødî¢ÑWØšîH�#5Ü âÆ�H*7¨PÅ”ùwußðyÝ#"2)´}Þü;Í×k¥¨¨ÕV*…‰u#,RýµPvh…4æˆ|¡BÒ�1ÆuÎ“»åøñÛõo=OÕ)Â¢]â!¹Mþ(‘$0…ý&ýŽÇý=þ¯cLnÓˆ$îH[ŸÑ_Škþ¿öÿ³ÃIýn@RZ�SõT¤Tõ]ïÁ–´»™më2ÌÉäÁ d’?I#,*)Üµ"*0(i�ï3�ÿ—ïÌ-q'e–Î	ÄB’lc%…£‘ÖIaËK!þGÍ�ðüôj"OÑå7îÎn¿¼ëF`ÿÑŸ Ùÿ$Ÿ·‘j¹#5'ÎÃ!’`–LjE!ÿPÍ¾ð©<°ê�¸*S÷àÿ=bÃsyßÌI´¿5Ð¼È6žüs\Þ�ì¤Pz¦Þ°›¡<¼8æwñ£ö¶~£b:CÇI¶šg[RÜÆâ:È¯P�G#çÏLgû„Ôàµ³Ó¼�¯ŠòÖP"!öýšLBÛCŽ4@TQ¾&p¡A<¨{¹×ä·÷ Æ��”’2ó"o…þÛá—¯sj¥5&Xb?b¸ü&YùåFq¢ò)Ïð¯ËQwÇMœœ‹vº>nQÞ)’{}×)“~ÆbƒoÝt<Ïá/—íQ–‘Ðh¦�®«}ÿ•[éE4eòæ};8]FÓLrJh!ÁWî49ÄiSY¬Ž4fâê%÷ë”V‰Ó¤P�èžuQ#5g*—… lð}Ø&áŸï<Àc�@ØT½½•ÜÀð¤‰Aš{X QCtw~ðÃt‡6#,ætƒ£wÕìZ#¤ �N‚/�^a‰”R	5TÏÌðsÏÙ!H‚BÉSÙùÜ÷]«3|ƒ¹òHå{žƒ¼,P—¼-OðrO4Rÿ}÷,Ðìœƒ(Ñ!÷ðC�ðo0gôùríð¸äõœLq"&È0P T¢,áwì¿íMÉÄ•;œ§¾×92€‰ók}C×¥vÕeîuBš?ÅYoì>C°±x¯ò÷æ°—„c¦T‘³ÜD;}ªU%eQ�îhÒ¡>Î‚‘b�ãð~¨¾ÚY�‚åÚ£'	ÁSqÆp,0†øî‡C´¡%$Š‚€<â$F&ÏµctaV Âƒ"ŒkURû6~´·#5´›ßã&;öþâ›?G7ƒû¥“¿v#,7~ÞÑ\ÒÀÙP;†­¨]R(Ž¹uÛT£kšuu"[ã~ãñ½GÍOü� ›wÌ¨	�³1ÍNWbQ[FIÝ.®ëh] 6#5HOÌðçaÂÌˆ"©Â”åFkG/Ï‘ÁH‘#5kâ„³Ÿ”WNÞ[ø¿äŒöýÒ£ûXzvümÀRÒjú€&yx¹�úoÝÔ9OHùüÆsúánz´çÂØ÷Ø1ø*Ö>Nþê«­,³ËrÕ±Žè¶ºÄñ^O‘Ö|Ëõ™ÓO$e¾ý{wtY»~óM?(à�£5Y¶wÖ3énJF…³ä®þE«G�â"‹¼Ác[WáOŸ­®ÚFŽL÷òs`™AýŒ#5Ü™³‹cóòüF»Æ\9þolGŠ«GºÛy²‡]Z á~±;ùÆ¿�òØñý]2ðš”ïQåãX ÂÅú)?Æûão]W»!ìš»Äñ½0Òó˜º»h©­—R¾±¤ô_õB¸úk²�ûc8ÿ´lR)‘“õøáÛCç†^�ëýBŸ‚ê$éX^5‘T ü­àG5$Ï‚hé¯—é¢Ë¢AÌ*¥Ó§°6œx7_@æñÐ?U×ewNœBì=ñ¤[Ç¢m.Ió|4ù'íõfk�wIñwh”®¿ÏÜØfsºÎÕý6FŠõb¶ËÎ¶�ý§a­Õ³S^Ë®�ðçÛÏ>Í�E Hg|¨£=‰ØèeÅñõ„‹Ë­,W?[ŸO?ëW(öÄÂÕiiÇƒ‹¿éWvû&%±gˆ¾n®¡#5~jÉ\³Y±-7Þ{Üáð·ÖMœÄpAr>ç±8é¶&©ÓÏ?”ô§—ˆË7DßðéiBÚ•cVÓ[ª÷Bœñ£éYZá>ú¥Mj£xP3‘ç„k…9ïG‡ ÷²:NÝµ"úÿ«Ë–½¡ÊÑ÷§�_Ê=ú´8èÈÔ9#²PÍý¤hõõQùm'5¿0jÎ‘ûšä‡àz[Œøq“?u�ƒùÜß«³«ð›ò|ŽéìñÙÊ%Ë�£c´ñtEn)µhÏŸž"Ô�ø›ð#ž•J` '^Û!#,½MâÕõU—WFßÏÓŸF^î¢¸¿sÓ»«>yü¾JÎáõôy9;ñ€«öê<ÛºÇëÐ;�ªŠü>—�õx~ö"`ž|ÌòOáÁ¬~0rö2}Z“0|‚ä�‚dçoƒü„<€1�ZDÑOÄ£kk@{¤³)@„X2"� p€r=#5­òù¿W¬¶¾^Ì±™nÝ-éñ?ÛBBÎfÖÁãíž8ã¿Ž{"û|Üœ°´Œ%Áï~ÿ?ž 9ñ¤Â¯°AÝ#5ÑÐh³töú{#,¤+¾ZB"óŽÒ.#,FÿÇèñwYÍ¯¯_Ñ~ŸßHaÖý7¸‡Ü?|ð@îBXT o×Ì3§§£íèÇ—@Ò,(°fø¥Öû|ƒê~ÁðôÏ—ÃØ:{zþ0ýÔÁ€0ÿ,—PU&Áìû$c ³Þiú8ðaÜH(Y˜u{ÂŽAñý±ƒDû{áù�DÁ)#5hrE�2añÈf;ôGîÑóK?»½˜vf‘�LQU;#Çìp“£Î!˜Ž?·îˆ‘ö”TTPQ#5r¢ŸµÔ1ò�nqÀôi‹¾-1î˜Ó›ÆP„ �k@7ëŠož ’B@'×X¹¾;-µý5­•ò™?_“·ÉÏˆØG„¨­«æâÂYßD45GK�à,š½1vÈŸ$Äáf‹Ïðò˜Û•™½ágÏùýZXÌ„-ãS³¿^”¯K…¾½c0„I&¡š“Ô5§£WOŠyÆ¯³!?Š:vòR8ý_Jæ³Lç»=]ï…;~½µ‚95ì7vY´U{+¹H|ÓuÛöÞƒVoÇ'Bæ#5/ñqóç®*ÔüÜÂãá~1ˆá?|žw©Ú„ÞT„ÌaM!>~ß]c8~Î-ðá™ó�Òƒ¬SAÎ(€ÀóÈÒ‰Þ5G@ý‚”µÂ»n­ó€`Û4üh ¬€ò½ÚåŸÎ®ñÓ·°¥¼,d¤Ô½8¨ßÀ�œè%)Ï§sžýƒH�Jƒî¥µ=ò¨4Þ÷,QçUPKÎM¯”nNTâä¾9{`(ß$ÑPÍwÀÉ~\l£NÚ|…cs‘¼: dŽâ�VŸ×… ¾¼b#,f!ƒÙyGa^©þÞ\zÄöðè!ßw¯ƒlù1ÑUwìÏ’xîà£´Êõ&€«ÙØÝ|òíÃ0îúpø4K¡Ðßñ?hÇj`,ÛWÕÍû‡ùÎ�«ÍÞæÙ\Æ=™š¿!@Þ9¼(ßO¬Vn/@Ü'¾AY8§xuîóu4Y]çwÓM%f™ÅUÂ	C†£¡ÛéxïG#eÜ¤¼ÎJ!hHô9;åvŸ)Ýî]‡^ö³†˜Z°ñº�íÖÛ·i¾¨ÕÈ¨¹Â×wDÊ(l%ðÛWö·¸hNÅ”‘ÆÙ?´‰ÈVìq‘}4‚i?Çò{Gûd{*LƒJZ‹@b²�#5%�hB0¢¡Z"¡²¥,7˜Œ1e²S„ÁŽA‹P°µvBTï¿Á‹UöÞ0l­’¡�Që)vƒ]€Åu—I©…³G4á˜Ñ§K43V1Žîçåálü¦8<ø»i­A™>ë¿rl}f1œVQRXŒŒ¨ŠÛMs¢¶ý}}~•õúþï{ƒ·œú½×ñõ=CÖ5=Fz�s$hi–T�¨BÓ2ÆˆŒ 4›`È²±Š#,Qe)‹sý�#—wûÞAê­½»õø~«ziï{¼]#™ôófÍûl}Vˆbá1üj9eÙ8Ê,e†úë?¶Ž]>(ç¢½äþ~Ï'|öÏh½îGc÷þ£4HíÑ¯ÛñùkE—5ÃÍŸÐîÝy°¤‡Œs¬þN~›žîºßZûÄÞz_Ì?+ÂŒ ¡SÇ´##È.§zuy(UÀ©çÜÞ¿wÎ³ã£léh$äXÐÚà™Í+?Ÿ•â5Uü�Ý£w%ºa…0Ê1f#5à£óüz8ôù~¾ï¿å‘é!ïãþŒÙb<ùöúý™û}”C]+ÐÝ°_xùÿ_�Ñôsaê÷ÿ±ìÆî¤õ~OÃÍhˆ:;ƒ#,ÎùEBnAÎ=Ñ}…“‰[oæáZ�¬?ºÿs}œæjJÆ­*ÙK$7Q€„ÕZhn'Éca‰VÚÀ7�@ã�Ì0ÛA�@SlòÖû;ÉVgÈ‚ ]±2F�ÙtnAý¯+Â°”„cM Ø˜˜”F$2;lnÎ¸ìe7`æˆ¦B2Ö¤„Ï=X¢�¨äÌ¦c"·J’C#N¢"°4N‰:a¶ž³Vrh�ƒ9ºKJ!�‘¢Å™MoÆÚ‚80#,Ó‰sF�O-.u¤`Ú¶¶£\5X›+ÂËB8Æè61”¤‘ÚéºêÃ1Æ…(dtU¢³t‚º­–¡¶ÛËXEÆ%^ãk,ÝÞ€0!7¬DhJª½Š¥�Bi…1—®ÁÄ«ª)[R†F™M‘¸	)ªwgèe$jáçw1#,K ü�ø�ãaÓnF6›BeüeÕ5FÐƒ1©xy¿T4¨ŠÙ´þ¾©×Ðø¦p}�w7-joSÆ=«ú†âù(ˆþ(á*~uÔ@ø¯ÑùÊ‘H%D®GÔ½ŽÀ Ó­S¾JÅPó|þO´;ˆo±“Î0S^š†‰«0}Þ –S:µØ¤�ü÷í•bk›xó¹º#šÇ„Æî°ûˆPÏ`?hpPÙúƒ„Ã0¯N€ïgmês¹9«§ç¤Swx�<õr>Eê9{çóQè¾ÊœÝUºb	Ž£!ÔLn#,›•yš£Kß·ð\â›¼�ÿê X!-õÚðÕ°úŽæ…œ,‡ÅTƒcð´oPý")sù™ü´”£Þ¯¦˜.ÚëÇ™ðÌT’I$š,fé×BS_“©]°ÆŠ‹^3~Ìžõ´\#5úÞÿ$¨"XÞ"9ä¶ë¼™OìÓÃž ¢>eôÍ¶Þ*×+¦=uå¥hŠ	ó.0³ƒ”Î,WNžVˆ²	N®ÜlªÜê"4…ðF¾·#&’Ï&Á ÿ×@c;¤D�ÆIF@`@¥%…oèQ0|‚}?1ÏÆŽÏàÏ»–a7 n‡ÎšwäðŠÛ+­¢> ™2#,Ððøå~¢êrj6â�(+æþ“ J(`D0U*ƒßIÌÛ»­Ð‡´ºkˆ’ÖºÍ1ºcn`¿¹¿.õsß«zü<©æˆÓovÜÖï£õ#ã²cX7¬�öN�¶Q»Ev³X)I× -JøG×E…z;#,Oš?ß’ÅÔŸxnÜÕXí5§;^-ŽñKœøËžÁî#âØQŠzˆ ‘‚þÍoF ¤PÂ&šjEF:;lºf6ðŽDÕ`lˆ¶h®@Æ6CQDäá¬ •(�=6ð÷}ÿoÛí�Ä*ÅºþÝ�òœ¿B¥J 3®–fÅQ&iJj\¾úÊg–#,Áˆ¢(‰"b¬ñ0]4\­’‘:Ù]š¦y	Ž±ÓýÈJDü0ªÈ•¨ù:Ø,iö¶±ÄÆÛ„|ó˜{&“>Yã**€ÊÓÝ*.ë¥“•	B0#Ç7jQ¨oók}M-q\!ÕZ/#, ^ö”±A±‡Ë5®"@�“Ž„Ò®Ù™œ(5¾!‘!²fÂ%öLP‰I¡è±Ó£ˆcÛ²¥ÙvÖ—]¥w d;;Þxô2:#,;ÞP¯œˆ�Í"»ìjiéÛV‘Ä�ÂÁmŒÁcÿ™ZãØõ#,XÁö¦ñšìÒ¦‰<m‡çg÷ð·]ûå$Î³µki´Ù±ƒi¿>30°–"Š´WaÅ-Â2Â%³°ô-oÃàÎ-Ñ2§Ird�Où01á6è–þÞ�‘âñ!öóŸ_ÀšW:±BCZÈÄ¢�o{&*�#O’!¢ xËIbÈÔU‡…#,– á ¯A`Y^G‡ ¨úÍ£vc×k[R	[›‘8ƒÄæ”àô£EŒTŒS’ô“íC6Ãôª=@‰3=ˆl)"�Í(èâD².lç5Ú÷zžE×rUße/f#D˜í³lXbg,†Ã®1“VPâ¥JÖ‰º¸8E h5·]d$È¨bp“�‘¶ÊC�wë¿³H‰ Îˆ¤‚#583„©W8k]Û½«§:jújéôuR\,°¢€F{Ï`�miR¾í˜Ækˆ{±ºÙ–÷yëIœ#54›l\ÉWN^	‘am„Ž�®VáaË=ï±±¨ÁÇ¨O™dJÈ¢f9kí"xt4°ÁŠdq°´£l‹½‚lLhIÜ¦t»ï“P—z­2¥6Ð£,H­(ð#5EF™Ùí™¬)ŒªƒFšP¤)Gª‚ñ«v1­Rs©Ó¦ø8„Ñl*Ô00Š4ÁpŽ÷Î±tb¾J£L$*ÄŸnôÇþ‡¤Ã~)Ò¸�…C5œ2(í/$d¨l£ÊŒµ3¹¾Ý�Ôtî“8Ü/U#HÄ~§± êGôÜKø»«ÜütÜ“ûo-zq¿��ìzU³N�ããVš«#ªä›¬›S�Nÿ^Õ-(Âcd7{0ìÛ«&7OÖ™Ìõ¥§f¥2âYMõ¼Áw„IaHp°ÿ™éî‡Ü“Þk^Üá7¹”IÐy)û(’@�£Êz™Srí‡†ÞwwøÏóùVu8‚jàäQp¯à¢ÍMR(ŠñJÈÈ6”ñxCÆjÝI³Nø´mºÃBl8,0€ÜÖá«�"‹©DY¥	ŒtåÚø³�„ÞŠåU{,Øš‘ÐÖþ‰Y¤²?îúEÓzï½‹éa½íÅn<5ÖÌ['œ\iï—PØ�iÖ÷igÕ×�\vˆÅÀ¹¾Ã¢eK»Â“-ò·\Ë«6ŒMÀÓ=zhôÎïml÷„îSCUŸç’W#,#5&RS)š‘'é6ˆëœMó�Ç]-	$Û)M4Ð+ß®™/ˆv¹6éÒÿn_bq´ò¯¶ŽœsíÐüºpÔ�#,KfA6ì6ô÷:F¯L¨wë	q?v†ºHHÙ;êÃB��\ô–TY6²ñ˜B¾NAh6±ß	b{e®+å‡ãŒôÉMÊgÇ»ÔN¶,PQ:H@û>Pn¸“Jè°�)IÓ’¹Ž•¾Þ‹�è:6¶×D¸ÉD¾BN"åšÝ8N‘4#,4ÜeÙ‹ørÅÃ<X5µR‹ERœ¹|6~>&Ú5¡A—¸Øf~Ã.!ÂÍ]m5{eãU®goi)·e´f; š/œÑ#àj¦èPÕ7’ìMUkðÖ)ŽfEÎLÍª×Îlý«Ã’µ½ðÔrFøoš]Ú8/B~Uþmmâ™vg¼SøQâñzDoXïŒÚ>O¬½ÿ¢¤0‘ï¬’pŠÏÎûÄÅö»BÂÿ‰U�ÖÃÆ%YNQJ¶D.uvŒ]¢¤mVMÇØŠÞÝnÿïÜNR²È¸¾*‘Í ©uÒ¦Ú¶,÷³åŒ'MŽTWG‰Öv5øø_[áÄìéZv®‰µ§Æ8MºQVƒ5~,ñ¾ÎA¾µ§‡æóaK]ÜS$CžŠ'á¨Ž_b\ÒB;£Ã�¶VüßSÞ*ÎmÆ¢Ýe K#ò;ÔOy4¶êtØðšV^Q[Îˆ•	5Tå¤!Yn¬š1ÖXŸJuÊß¤ÆéÐ…yíÅbÌº[(+Ù76œÌ<>J=ÚO'½Þ#,âK£³!ìñ\Oò–è"è[òÃæél²ÏX-²¹Ã3ÑC;öqØ‰ç9$ÌÚÌ>=òôÐÓDM¬�Œk‘¡‚(ÅQ{3žùêmIõw�!¶i‚ßìÙ­Hè@ì9Ài£='G9ƒ0…A©.lZÅì$°WsºˆË�wÄcøw‡qÙO£C‚§�2ª£9þ¶òŸ§ß%ÿ1ƒ'¯T¢3pVäÃ®]‡Œ°eñ«=.ñIõïãÛª�ÿbßepÝÉ•—ïyë!è !áÞLGç ÷¦Ÿ76»)¡%@$�ãp¡¿K ð+$8(g‡þŸ^ç„Á\÷I2‰•ŒáRJ>Ìfj4cÙß® åÅdzÐ*¤*ýÛÅPE~E"<üxRúhBiŒjr¿­:#,ÐVIô¨wT8sù•›4>Ê¯ïîñ3ó^Âý pÔ�ä¸ã}xz£¯£÷/ho BÁo3Å:øÏÈÏã‹ñ,&ŒC“0qò¦âm¸b2¬g DqýP;˜/˜ã´‹ú'ëß[~¶jX0žØgkö$ìZÍGÄþw¡pº]²•9ÔaÎf&ªößftô‘û…½Û˜"ùum	Á„„£K¯)éô}v?wõÿ—ü�þ‹«ÊüŠ§#fFƒ*h	cÃø¯ÜAKnä7|¹,8¶Añ�YO.'{›º|4#,¤Df6ù³Ó5aXÜÑiÄ5Ù#,’Hk0{úÜÖëO¾ò1Ž%{ÖÉ›=îºµßÒÉRêwE½¶VÕ­VWìËíZ×ÌÇMN—8{l¹ÙiZclARD·7*%LZÀð–ðÓGò©ËÎÈJsPFLÉÊ¨»Ç[…ù�´¶0z¾ä‰Ýe#A•(ñ&KA[æ�éšý¼r7Am‡í¶ ËýÎxâÒ5ö›sÜñ©Un’@aÍÔ,º{	{½tå’´',cµš…#5É0vßÁ.ëÛ4è¯¤í(ýÝ‰Mñ8œŒ!0é‡…½ºMº×ì80�_¦ª.òÆÓñ‰óéô#5Áj‚¶¹Úƒ›FvØh¹>©$#;.ÌV?½f¬"ÃgƒOÐ·�qÂIŸÐh„‘º#˜ð}`›)þ3+Ê¨¤w-Ûzè{hÜ ÍÎ¯•Ÿ×ÒªÕrû,Lõø£]NœœdàÿgìÏ…«†›‹3":�Rý)Ãö*~Ÿ:uX<3;JQÿgha�ÖOÙæñ°yu‹´üîtÉ<‘«5–³+)‘šÌÝ8EU, =ƒ’åßJOjJCãdªšU¥G�5}ˆè	ÚW33C‚ä}øLàbŽ4ïÕØ61‰ ‹™Xw-8!!¤™©fø˜¿ÓFÙ,†Z»D‡M½£ØàG¯í'Œœq“â9ijngbÎ7|9vO±Yžþ:‡g’¯Mq8û#,›Ù›*MÚ#ÊmÉ—Ò»yÆ»›Ku#5°®·ìc)”µ†ƒÒIø¯U�êâ®zò¦‹ÿcÃcuökœ©wI2MfÔRÄ¡Îä¾Øùd”�VÎ�àí¢ãvôñËaö2žÒk¬´U®ãîÍã~H÷»û×œü•MÒçÇüJè€Úîu í§¿ŒîR;bîêâi+nö½þøO`—›¤ð§„H`�„ÉkZHSÁ\ÓÛ*×‚ÒÑˆEYÈŸ¿Ü&ó­Uþ×?î›é¼,ÆÐ:ÿ¬ùïž°ÙêÌ`[¹í$«X´>zY¢1žëÇ/ŸºÒ_ÀM­,~*<gsÇÆ÷”Ÿ<Oß]ía¸²]ú^ÀôÞú^¹j)·%ñé;{v¦0ÇŠmIcvîùñÏ„Ä¶†¿@/1›·¿KvœbyY›sRªð˜^oš(¤ÛËoO¿w,G–uÖ š�.ÖÎu­x‚+Ãcr×@²K*ˆÞu5¨§…§¤lUÕ§/b+wU§¢#5%®fuÄWÞã³P¬ïys3UzÛ6¾"øŠíG?ÛÖ6Õí­¦:TÏh,®–t[ÁÿDQ}xÏË/6¶ÛGÚ!O(àÖ¹ÌõÁ+·HÅž¹ÑÑO6éÙåù:037v¾´†l #,'{Å“¿kß²åþÞ2tdqâþ,.Ó«¶¹»ÜÙ…!xâq¥7¡¶o(RÙÁŒOÝï&vëNOX‚Sípáak.dWéƒ&ô/±[tC#+îó‰%ùÄÙÛ²Â.ºX0»;ø§ÎØãcª”]—d…zÝó]¶éÜ’ó*+kWl6£Ãl�õuù|¼N&�]úTâmäç[?KC?N&š†£­s7›ËàsÅUª¹ª‘=¸Þ'ÙÁÎÜ\5ÞûV~ØA6¤ÊAB‘³¥rŒ>Zo7cruàc:Ut¹ëŸð”Äü±’ë	¬�ò¿C¿dBB5tƒã‚H…ÌÑ2å Õ.ï;§¹gJF2Ä;Võ/PÂAî³ÇÇÖ-²6ÙàD!Ððñ§ÊB ÝHÐ�¿"½WåT~:Ûé¿ÝöÎ[ŽÞWˆ_­<ï™Ó!dž'3*TªF†¯óÐâÖP*`	#5w(W9B¦}mi—1÷¹+VƒPñÖŽ®ÿ©{�Ï j¦÷9Éfã¾×8Ã¥»ËElÛL/–ï÷µšÝ0Žo·XC­?ŒÁ„Õñ³ÉšmîÄpËåŒtêœ‚�ïo�)ucÚÍQrÎí»ëð’lGöþ~¶ç„Ë|Êì’8)Í-•á'/äò„‰¯&y’É•kPC=g™jc#,æû²Ñº«fÒÏÔ§WVù›‚ÅVxUc43à b…Û>eql"G]œ¤’Õ°a:Ç)¦CÇ°³Öâ¸k%öÝöÁÎŠñªZvv¼ZÅµúz_¶eðÄ-Àú/BÃa6qD<p]©‚XEÇ*%¯v&Û²^¯“?rìÚ¢–¢w:ÉEÑ•Òå�\ùtfà<ûs1ˆ1ÍÎ4ìæÄ>®ÿ	?tíÕñ*s©òàñâØ<wOçªéœãË§%+šúž™sÂ—¶YÍÔLç¨Ïeñ”…J5&p±�ä^à£:ð!ó•”¨sôvm·A‘ãE«¿îç¯Ôú4cfpë#5_;Y�•É‰ˆ¶fj/¢8o YªZ¯¾þ,:­6ZÇîƒl^ÑÃÅ;ž}¸æjŸµåµ»–ƒÆï?K|3åÇjÖLëáö°—š+!´=×Â‡Ekæ¨ìiCçÌª}C‹5¼•é¥éšá¾�1´ðx¦&®Hg›Ý\ˆÜzžêîF¬Ò8ÔÐ”¢ÎT;�T¨••n²42,.rš.gÕ©èêˆP2ËÂën¤ûj4î¤øUmlFø"_]Ë}�o¶Î”g¿n(ÕÞ5åã£§k'ÞñŽ·÷šâñßÇn¹sNº— ªë‘xF+�¡¾:,ö³Në§•ÙU÷µ_9©¿„v‰;ßó¬+m´	m“¼9óK®ªv³9FJ ÖdÞ¸6.«HV:{tÎÕåØ´¼Î8Òênœ^Ž)ÀÝLÞ©mMÉ¡º-‹Ãól–3œW†éÇ,¢»¢òØÈ•¸_K¥%às`Õ9pö"Ê=�Iò¾üÜ®•Õ§¤6iÝû~3ÓºÀ–þìÔÁH6»“’æ}1Vº»'#5¦­.Æhx±€}5Òp’4:oO;lÒe‘î»G®2Ú›^•|ÛƒŽþ¶‹A¾G-­_ì—·yR´Õ>Xý±UÌÀô&ý\ÿ	9õñ<e[�]m\i�«�s™ÄŠbó=;Áìð!Vö®¹=k�œæÑ9ÖÝsÞCØÀMœ5|ì”"q§ÑpsPoŠ©BTUÈÁÃ¶Á)öQhÜô…wÂºƒ±„qg+Ü�ß{ ø ']„ÃÌ$øt4¨Z Xœê¡„{ŒàÖØK´•]ÊéñrÓ·+‡ºõÞÔB–Â×”ÝOnMÎï¥ÖØÒ{´>bvHŸÙï˜µ,"¼ßÔ¶5ñ¯öÛé›FŸlÎ$ô‰�rñf”©¤÷›ZØµ[¯zžÖ[<æä>*þšô±Ï­®›èµ×-·ZÂ&¾|`øcTŽpãÙÎÜÔÑvdôš=¬EÚ~Wè¦|;vÉne\AáZð$)]i4QŽï?»x/6�‹ÁÏ¼Qß\ÞJ‹»ô£™Îâñ!•ê!¥²¹“)áBÓ¢4R4+5$‡Ë3-@èq7¿G>ˆoÖv÷rS�Òè¼ßY4œc3ÚòË/3?n‡ÎÝ¾¹~òl…ï7ü—~®ÎÇmƒM|•:c¡o1¢lç+(Xl\Kè9Ùc=NÐ7Frç¾‡Óyìpê…�u] ç�“ô+ò¸EÅt¨Úö¶1Ý¡[Q-¯F®æ~—èåƒç)‹ÃÞ×UmòÞE”ó3ø³býN©…Q²qR�7±»Ñ¢J1šÒ)’(¶0“íJ:fwÂÕÐÎ¬…IÅ YÁÙ–u¦–œEç5ÿ:)Ó@m·R"°{‰‘¥ÁÐÊ§[³Í.g»™EGž½�p#5»,äÆãv?›QÜø¹#5Yõ³’ïBŠÝÚCiÏdv¯3XòÁZ  â_',ã8Û*,„§$sæŽÈäiŒÚÄþñ	ÍÏ°¦#žq¶·}¥4¸â9âwû)²S·Ùëõá³Õ�[�Ç¬žÈ³ÄCÍ²R€Ú%Ù0©ð%’4ºoR*\x(»–ýò|åh®áÕBõÈÙÖËi}8¿	Q;Fú)Õü¢éƒL¨WsÃ;jÆ†7À5(Î¯@™E¡»6™B“¨Ð(£2Å‹�×+®…ŒŒ¾4é½-ýœðóéãY‹ñÅG‹—£d•]Åøú°Si}ùæærë'÷"~ü|Y?Õ)½G<¬óÿNv/]"{“èJã?\À[.yÊIøÇ•â~ánÁïœ+'«»©o|ušÌ&ø#3ó·èû=§)‡:§XZˆø¨½ÝÌ¯sÚk›Ýo8+ìâÅºê7Ÿœ‘'oyøÁ6Åó½%´ÝÉ½O|×Òµ´ÚR#,bÑ)ÉvyZé8XIæ±?²+#,¶M9Ì ¸4œ6©ÌÒ"°`!2Ž~"#,J¼#,šôàý—­¥¾|Q§�ó�7½¾d6þ[{ï#5²é‘[¡cÜhvöŠé•Î¨”µí�î|+•xót:fõ¾‹+[§ÄKÛ=|Ÿ2Dô\NßŠöx»ÎxÄO·ž:ÓYr‰{Í»Êûd¶u¤Å—­žd³ÔË{ö¿£óáŸRÃþß²…§ƒ›y[›s×¬´úYÆÃ� Á/åò{"Dk/ªOKÕ'¯QÛ3hJ_§ÙÛ)Ö»o¿Çš®7ãG‰9Íš˜WEEœ³á:ñ–{M”N¼ÛÄ-“¥fy3V�ªKAF-–ªœýÊº¦“X,�œ<d÷CEx~ê§)d‹Cõõ¯,?�ž2ý8ó\ô§½‘ð �ÐæÇ=¸ã ¹gUÔítè�•©ŒfÔæZ§mÕ¼>ÅRÕrE¤ð^”Äm9�*CZ¢/Ž¦Ý#f\#,TX�¹ºâ Ö8p¯Çú,dDãºá‘ïæá?Ïäc%cNkÅçJW‡¯ç'>è½¿Á)ˆÓÕŽÞþ|•[0ÙÖH”[ÓËš´·¡®XÂžê]ZÕÅN•²í4ˆÎ{RúÆ—Šã^Yñ�Q•'º+¡ÓÐÙU(òNˆšÅP¤TIeA³-y°æ„%�mÆ*âÐz®O°ˆhf‚Ä4Üù«5:¥@¥E¬‚ÕÔ]¬Uƒ‘d0ëÂËr#,Ðã­DzÇ¶mQÂWl”„TÊ•F‰´N‰Ç#,ç#5†ÙÓsÞÜ§h�½®º™o|®pb!YM£*3îƒã—#53ïYÃÈÁÒy,úŸK‰pÏÔ·�Æš�mú—`ÞsßMÃÇ®¼ÆÙrš#,X×7s§>2GMw¬¯)±—5Ò¦*ø?EÇžñÎ›“?%÷²r•ÏÔ×¾uP9òa.m^	©D_#5Jü®F4ãw>õÇ¦=½:ú“õó‰þ$g‡ xÆ�zÜ?noVÞÿ&?«§ÕË÷_¼ž[ïSƒÆ¿›×ÝãHO¬°ü‚ÝöV8‡h¢�:y.ªädé¹NH:­xå³^²ÃõŠž<·núM7Õ¿•e¿ÊºY×ª1V/\YdÍñêuÂÕÖ?\ïØ¤8¦±¦Š•Ó³4-	�¤¨¥d@Mè¤!ö³¯í(>ï³û¿v!!üÚi_ÍöoîÖI5ºO „õéAÇG?>Æ–¬Â].|yà6N–Æî‘*)å¥¢CÇ¿ËZa£€±EÔ"Ñ[Âè}l#�)…ùMù½^¹Rú²Pì;ô7ªFêc@„œê4E]·Õ1–FéÉôÇ:²V÷¦‡N? }TÞ¹`­KÈ~>ô¾Oµ¤>«O4Ò*f²yé›šÅ]|¤{�î/æ¨§Ú¸èûmÚËŒL¼#_ºÄè[OµëÚÛ‘fš&|ífÞ³1'HŽM·åÕC£š TñèÁÐ�–#,5ºèå{«ÑL¡/<l~*ò³{÷>˜‹Z™vÚê}F…ÌBÑ×¨59sÕ p„¡ÀÐP)Z¦êÝÁóÊ<¶NbPªŒª¦éAa�²µÒ¶È·Õ²ö¶šóžE��G…ç–­éÔÚGÃ-D|�ÓJcÔèƒuŠ+ÊšŸ‚¥ç™ŒT; f`ÁÞo3fƒJŒ H(‡L6�7$šVšP#,†“—4`E2©È—®×òÆ„¼Ò<ÊÓa–Ev¶ÚÃ’ÜÐ°O¢ÅÊßžãg]ÅrÜÔ5Ÿ´<o÷ð+Pù ò‹ó_�ïµß<yî¾yF)åºiwüw¾Â!PÙ­G»	S±E&5‚-¨$n¼2;OE)êî¶W›S…·­l£cL°°PƒOK<±H$%A¬p±‡<>­½EÇ“ŠÇáïµì|Ü×‚¹Všû¨‚Z‡=ä¿DÔaß¯Åíz>Š##ÇË~#WÁ}Q’fŒuŽnêæ|öŒz[å#5}©mNÕ—PÛØÖÙ£.ëÇ]|¼»f,žªn©È0®U\`!˜­áQˆló‹C¿‰·|±Î?#5ÁM#Ã¤»Ç‹Úõ©éÍSÍmÄ{‹e�#½§ä#6¸?1.‡±/S6›¯îÿác(}îp¼7´£­‹`ùW;¶¯�^ÍX+X/ñµ®ùû+7ØëUû#;$uµ5í”ÌÎˆ—¨åÎ–ßò@&~iI`QÌ½ƒ¥qé =­LqˆÒb9óU²�{_¡×bÚ^„.E&¯¼ì†ÛßëÛL]§·Ã^7ÚKµ-÷=ù“É2^0ì±ÖÇ6«yê÷ZqÿŠ‚.ýd0‹¥à÷·ÒÎü�<UºP<y#5Ü‹-61ÐùE¿¯E|»9—eÑï÷ÚåÓ‰ÏJ4?h…R;õöÐ“kÃúÃ¤Øo,H¤m	Ÿµ¯càBˆñ“àKáš4Õg�[n>ÌZÂù=ý±VÕ/oŠ	´¼wo ðàk©ÌNŽÖÓU[J‡b¸½„äñÍK£˜Àµ·*VSx`ÐOTGD•Ê{¸æl:a´ …3G�àwŒõÀb­k/»Îl›mÕKm¡Ø9p�š"Î¡3uFò¢g²wG­Ð�¸´s×ÊÃH†[–ö™àæ4Ž“˜$VX<iCJê›ã$¶œËˆ‘ËFÑ\zß‰·G½ýS²&Ììy^‘ãUƒx"°­Éþøs›?yÜ~Ö6º"@¢ƒ¥`Ã?%‘IÅ­‹¨k*pt'4 ”X ":n´üö= +{	›®çª<:Aëé!u�0ä‹¸€ß{bØüñUÝÎâ’A"””&±ŽŸLøñà>Çø�®|l#5‰·eï¼ñÕØ1Ý:5y3÷é×mi‡+r‘êéJ<Mò	¦nŽ´<ï‰õcó}CúqüÕüeÒ¤~—sí°†Ýçä–Èò0¹¹kæa:Ã„Hr9T#Ø3ÙÅ�ÃEnJýæåÕ§ÉüŸ+—¬ÐÞ¯µEMš[+ÔAÎË?‘›�ôŠ�yé�!Ýø­OÓí·¡»˜ûîC&Ü©¨qê	‘G\e å¡š§¯YÁ¦	ìô‹ÍFUs�$+Êx,%�‘Æ±ÊxˆÂŒSÉ£mQÏ4ñgÕ„E&Ý	BMÊ¥0‡�Ù¢˜Åm®íðªÅÇ¡};"YŒ›X#+—í|¿²þž¤þxÉ¿îP9DjÇ¹PyJ2"EÊ}�â’\û9r<Îçü¦ò¿†›„ë^³ 8†Dê~â¹¾rúÛ¹â� póŒd‡ì f±\›.P0âaÆå«üã}Ð‚i8¸ðÿ Û‚ú/Éùºôô fÒÌ¨­Œ›€„€ëøIlHO�›MtÕÿ–GvÖ“¯xœ1t%h«Éq­	Õ™P@çÖ<lŸr¹¦üû‹ØCŽ³§…À8/ôvŠëøqÕ†·ë¾§)¹Ëî¾'«ÂzûÏ­"š]�ÔõØy´o²ã1*/'ûÞ?Süõ}ÔäfeèxG¯Qó_â!0Aí-n¶õú9à|ßPØ‚°|‹áfk"0ðµí˜¯wÝ#5Ï—ùÿ|iOCC½‡Ù\à˜{»ÿ|'/™ø¡«Z+rØ“]%—‚Ž%øó€¡ŠmWL9›·:Õ~kœÜÈ‰?Ÿüus%"ÁNãRÄUF¨ÚÃ#5N'²ôã��ZZª;qq.zrçµ¬–Æ…0 p|;A¿[ÉÂ³³tq1Ž�+«÷°ä_–¼·íâùÓ#,‚�e£x×­‡²�iubu0v$Xù‡Ž ÈÝ{Mìm ‰£Á#5”…]šÕ‹×·m.`îS¹Å"EC˜ÿEPnŽÜ«‡Z˜{8Pm´+÷|Í´NIÏ–*øyöû6èrŒb¦uAÖø@ÿ‚S¡yÇ …†;¯é�öBüHöÀ{‰sñÖ—ˆN©÷`ÊºDöÈž(ùÇ;i#à©ƒ,!X6SƒNÆc�Y÷] dú—†0 -kÅ#FLO˜p6.8;fµ>._[|PâÃÚ|6ñ³ÒÌžÞìØHÆŸñGyÇ&n74–ó´£¶ˆb]³ ZtzC¶µ×lþ�u ÐE!Ä(J¡95n�¤Ãv¹â:ŠÛ¿nžì„´-&rÎp†áà¨]™N�6œNx&1™>µu‚GT„~þGƒ°ó$'fMtÇÿžiGŽ4=Â'O�jzŽ¯¼c=”£ÃžÔ½—}ã¢ó0jV<[xÜeMÃ¸š1Áþ2LéÝù|O–-·½¸?Š|¸Bñ•ÑÿnYÚ�¨ûá›xmý<£¸!ejåUàùˆ#,•0R tÜ'fCšDëëÔ1QIB(«8¥˜ÚÎ~…›Ÿr~ËÙæžyžø#,B=er]¤¦—.ý?÷r¡†mz³]×‹p0ÝmFô™ÔAÓ1wWÚßHÅ7Ûç+rˆÛŽ°J\¿¿;Ñ°áx‚WÈO^šx½‡Ëpªªª×K—#,7_.»Ž®ÇmžOPò&÷ˆ'íù±¢)AH�å²Ô¢ÉÆ=+†¨Š«ø‘èü;ƒQP	¾´qè8ÁSª*<C^��Ô)èJs6x=�Ùq£‡sàÕ³R‚–#5„Œ”)z"ø88“	‡‚Ù¶L©Õ”?�>ÉœFq]¯P1s,à™Ô¸hêã‹ÀX×C¾ò>m¯=PmÑ&fé.GAöˆèw×#,oz?ÚÍÖÓ7Ãä“h˜—ZÕ@ô�Ë¶uï˜>ŽtU†¸Y–½wƒñda�èûI»fžJÑÙM|8oÎÿ›ÇŸ w·±‰¯ñ'Qš˜;Eˆˆ<FLÍü{4­–Në¸›{½jõÒFöØŒT�¤û%¿{²×ò­¬à“•ÓîÂ&`—Ÿäæ}k�lÞö¬8ééQµhÛ¦î)�¡b°2wf}ñtÑ£ß�[�:<s–Ç¶#,3ŸÍqð–W¬ž‡[Þ%»îäõ¡xúß«ýÜ-fËtÍŸÂ_ˆ@¥9ñMÜþý¾t%O Ï�q¹˜6Y¹YUi¢ >sÚÛL½©-N#5"•Êy\˜~w›E oU´¢…]—Ã3µµ:ˆ¯QË™�¤Ã	í‘†&jâeåÎ˜š.Úöþö»°sïãC!ºdâÀàøÇ)o_T:l(ïÒ�=St’tV¿yÆÍÑÛpÉÔÖŒóÎ³Š€@™’og«Í®ÂÝf_c…"Ñ–~Î6›ít˜|ôs:>9�•?yS·~»®¬qhŽ<Nâ9¡“$ÍÇ×ÛêrÀö=PÆ7vjLAP“?Êù7<â×2�ÝÓºbé1#,}wÌ¢*ú&%x ®¾�x'SÚ;&©ö‡„Žìtƒ«,a9Ò™{û^Ì¸DÎÞsmž5[ÜÂ`òóå’Ò—I’f³î|	ç�.~Ka½±’'Ö#ž¥b¯(í–ËšËÏZöÞñ¤x–GÏÅË:4Ü#Æ:í÷\©e#,]kÆ×à+@.(§Y#54a9PÖŒDCƒIä>ÙH) Ô£&Èçƒóã4ïÁ÷T¡*€ŠT2qâAÝ–¬ÁãsuÐXDzñ£Ãmˆ Ó†EíqµàTX3Ãjh0Y!´ Nþ=üU)Í½¯‘ÀçÀÿ	�—uwú;¦yØù ÿ“æþGB7ˆo2‘³ü®Šº&‡G§±~hõ‹íŸ�š„Áî!­kÀ~‹7ü{v¹¶Í×i0ÜÁ¬aÆIA½D’1ãDg¾€è›”Iêã[k\-àD=SF â5Ži	Óä®÷¶pœÍ—É$ÁB“Â‘":È’JÆ)-í&dÒÁLˆ‰ý’R@”*Öê	L-RAB�f`]Ób)š¥&:NÆÕ&)!X#5˜G8]ä‰†#5Œ�.Å…ùÜè:©m¯£#5¢ RB<2F_ ¤x#,ÁFÊ3_ŠU×©ä–¯q`ò˜�„C‚ˆ�˜ŠgŒò ¤tÈ[Ü±¢eŒ;f©|§P}§÷Ó¦"vøcšN¾|ùÍ…¤îZ»fËàSGY¹vÄÓ=:ó|£ih¯ôýìaFÈÀvÏU‚Ky�Z7n–¾ÆÖò‹röÍ®tÛí›nÏg\pœõÕVE¦Ì;bÿ2hpÚË›O–¸:³èßé0 û{ÜÚŸguÕÇÁ]Î·k_Ï#,£ºnè¹Ü?gg�÷¾Í‰Šò	B/Kx/n¿¢nK¨Òõ¢ÉU(‡ÕvŒ"ý#5§4óLb«#Y\'ÌÅÜí¢CšÕü3ðLÔ™…³‚T¯cÍšÞ6~€é§M0W—ÄÃb·0Ý–IKö]ÂÛÍþ&�•úÈç}]FŽ¿®ø™_(ÞÊQèî`÷Ô}±ã–±ôï×Y¢‹t¦jÊ#, `—GŽú¶¥jhP¤JU©öx…xˆ‡™X Æ#5ýr3/ÂÄ¶¾ÆèeòkÎ=·É5\ÃÃ·Ž"RVw#,ýSöÔó×šÄÝE2#'x�GgM8·›}3óC|N½ûqÇÄ³knÍ6FBÈç^ÌcøX;	|ÝîúÌ'…ìd<#Ð´sö#Ì[ÓÆû;<*‹„Îš«ÏÒ§C£dƒ|#54ò>dEÃ"ß¤/!AßE>Û£k•ûyçmÉH\�È�uÂ@ŠÉþ@£cÉ ƒóÿšžAåä—bTq»‚Ò»l4þÔ?ÏýßØ( ˆ¨1VHnÁ÷ŸKúgM*…âøýÉî‡gCÕög¿•¾Aýì;ÐòaŠ<A'ó!ó Ló‘±‡ÆP"}%À D€Aö}ˆÃU qßR�Ìžr`ë€�„ºÀAx#5ˆ<ûD?J¼uÏlw-„×æ:ßÃ_š+~`g»‰¼J‰–&¸±GŠ`—:DýPãQËŽ†ã÷ÆÍo"ÈÜjÄÁÓ©�uÿ=Y³÷Ä(õõŸš+ë¿ä×�Ý1Î±¹µ{1õïXÎ¤Ü‡3t$3Y>a†üúä‘¬Ÿ¦‰0`Üá#,ì;»?…QK6ÐL#5øâM§�]Ò”ÐÕx%£èÎ'ŒSI.s ±€ØÄŠj“{DP›·ŒÎñ>*.´p`T-+”\�O�QP„�ÁÖ/¬¸Ï1¬#5ÅÆÊÕ‰XíÏëpß�`RÊR”§¾sc$`ŽÌÆ5ðþ	¡³µ¸=ˆDÀtYƒƒ'ì±éèe… ?Ø�`–ùÇàŒîÖa¢ßŸúI«à½ªwŸq�§Üìh5ò…÷±ñLÍB=»½Á²V½ Ë#,ò©s� Œ´¡ˆ"GÛ°`PÐ4–�4Q_­$Cêˆ	 È'æ2Ã°uºKŽd…¡ê‘³ÖND‡Õ¼APAµŸ’)†~³Ø�ÿG‡†óñì‰:	~•ö*r*§î’ÙI5Qþ[:éT½í¹ª+úWºðt«ö$Ó>Mt3jðåØè[]ý¥&§aÑb¬|¦ ¬HÒg_æÔŒ_§–9¼Ø"sî³1šõ½K Õ•£*a†sT¨541TDš<õLâ›…Gíß$uhÏÄL~œÿÚp`ÜiDH(¨¼Ô!Ã;=#5È¨©¡ÛA&§_‰|6k.ùFì9Æ”cþØJjFRDƒR&ð”ÛcÁYÅð,Ü]D¦£ªW*¥‡f*Yc9 ogç³ZglÈ`Š_1uçŽDO+\;]S&Ãº#({ÔÁQÖ¥–�åD­wAˆó�	Ìö^ÖEP;J¡ÙìA{ôó	E\…8_L ²h/Û‘(	ÉT’#5B0¶ŽŠ´Úp(J2´¨•£"Ä¶­`”Ò-uE¢ÑÝÝ3Š•A#5‚#ìU»wæý…û‹0]6W³¶µÞzË�÷?g�4tCƒÉ‡Œ³rruKå…áë8 2dj]PÂ@$h�€L#5	R'¡©q¹]´PÝ4TÈp¡BRy Be'=±=:=�µ†-Ä¾åD8?²µ âœÏ<IrA!ˆpœ¯9é¿¢¨™xëTN; ‰8M„údëÁÁÞ½žÞs«SÓÍ{.0ìGÇ·¾4‚õ�{`÷4Œê‡H‡½�á<¼‹5±®l<‹(á=Tl§}_9Ù1ÜfI! ª!_‹^##5à	–)} ô¾ùd&„´“Ç¨aéô8˜×ÏÁù}'8�Œ<e'³´ {ªh´cd¢‹i/ÀW,bÑÜ¶“r-´•E¶ÉZø®›%ñ˜ÝÝMzQØ{Íµ¾Û^MmŠ­òˆ5¶€&½GZk¨§�ì##¦ÛaºüÙ—Žš2ËÑ9KV´ðWæ7Ë¬gÖó¶À†>$±É�3&;;4cÀ¾Vvµ4ÕV‘NËë·-Óiïúý}8h�Óµ¢|*ÅpÒ,1læÐóå�2iR9J	Ñ¹!3Ò¶waeÙ«IýÙLØ³ÂJˆñP÷s;¶Ðîtz:Û» ÌS"AëÓ€CuØ—x(kh2Dç½ëýFªî”ö–Ò=žývH°°à%ßw	Ðç‡´ðdÐ÷‹³Œ¤ñ:ëJ4 :rK%ÎãÉ&6£	íeNï‡�Ã*:‹·¼½ì–.vØ�Âdf"‚P¹NËgq™Ã«5º7¤�#5éÏp#, g´‘‚�É#5è—8îçÀ¿Ë¼S»»p�Ük•u(óŽúzZiéã9HÙš!l"ƒƒ)'Áº(q<Ë�à¨Á•yÌ'û?{Åö¼Zq�CoPë7•ï+¬#=WµÍ=X´11q#5}¿+-Hâ¥‰â…“7��§–ã�"ÙÙƒLãÌ¯³|ìa¾(2m	ÜªŽ„8xÌH¤Ò®¯»“SvA?»žÌ­Ž‹£èÙˆ¦Ë Î¦Ú+c#5r@ÁÌ›×�<¼Ã]×Z‰	Q¤D¢„@ji:„³®ú¬WcÖ¨÷ÞÞ½zpÔÛ@Çˆ“§§t4>S@äö�3I@’/É>"2¡	‰#áîí¾o?_)6ç�ÈQñKè ²ø/#,¯–ßs©s*n´3I}¨Ó¶WšP¢hqÝ¨r9“Y¬1#,ª¢BxÖÆù0ª�gŠzŽ¥ÃBW\ÒñÚšóÙ;�˜›£…ïOÒÍ‘;K„¡	¼\Ù#5Pµ¡|.o˜©—6ÔÞÃ¶$ØHCíåÚYÀgy võb›# ¡Ž¬:lâ‡§Ÿˆh8	9.Â®¡ùø4ü<ì`ø8hÃ}ÆÞMy,ÆF(ÅX«A€a—‰àå0vÓá¶Ó]¯Š¬1$Žì¥¥Ü^´MY=‰�XK)ÖëÌKyfÊß#%›“N•	*‰ª#,£ñ!5Jï*mí„PÇ¬âŽ1Žq` !7Æ)–/[wuÝûyÝˆ\¼—¥Ñ³¦%»ßª¾5ìh;r1Â$">v1C¶ZŽÃ—¦iBk'C\	vô¯iˆ¿ŸÁOK>RÂ0‹ãÉ±ÉF®ú,�	<Ð¢‚mXÓžLû–Ù=žÓÁÎ§«æ­ƒžý M€1}šO6áþÕó÷}a0ÈèY70áÐí/^â†�oo6C9FK5ÒÎþ¦Iž†ÎÜÕàñßç3y®žØhÓ´¦òÌÆ2€ä=Ó­rtyxƒ²{é/ÌæéÖƒÖšIBk|ïcæœ�4•q‹’[CØTïaÐB†øuÉ¯aŽPÀ�1Œl?ªØ.˜-¢är©–Ê‘î‡kô®³(o5€#,™´$™C¨Ç�éXé‚'Wr}ÈP×í“À$ïžÅ>Ûv¾ïE§7û0®5wÿ�ÑLSÍ(ÝRžÄë@ž­�ÅâdfÒ2sØï“ÉX†� «+\Ñä>³~1çœ®N'gØ·¶½ûpFÆÇU°âî'&Ë¯KÃvSgöRÀ|L1îÖ'l˜dH{Y2‡U»³]5Î¼9ì÷îìÒÜ¸ÜË·Äïö\†ÇÚ¹ü¹CLÏ«â.#,âO`mÚÎÆ|kÃË¢¨�½��»0ú‘\ö÷j$aÒ™ç;O>ìÚ^èß¸Å>ü:x¤€¦	ZX•h’Žì�ÓN<è”îtaÁ	H{SÃé�*ns�÷½ïv°Ö�>Î;a{Ë¯<º»¿Îbx.ÊxÓ7q3âã·†çNé°	ìL vÕà=¦ŽI'/%öh4“Ó‚ïÄôø^Q½ºƒŒç=rV‚^´•|etIDÍ4Ñi&­U«ÚÓPiÜá!¼{¸$¢ ¢s„oO›ª…#’IöÎlÄy÷»kŸ2ðã˜€&@(¤ Ä@ŒzŸ–|Þ'Ñ‘DOu!ß�+Ò¯FÕ�ª¾•™óv0Ä¿|%ÑRûø!û5Ym¢7ÈÀ+PæP¢‚ 	¨	/ƒ×éLT/;¼*©WÅ˜µ¯ßåÔü)Œ¦	<§�€3æØ±á'GÃ]uŽ'{¯"ÿ3KŽÈ¸õ8â8×ìÃô**Fô@§[ÍOE¼XF�ÔxŠDvWºt‡V¨QoË?áš,•Þß·,M'7�10¢�C»ªT5‹5ø¡‘¯Û±€£‚ ç¹:O?�”{@@ þË_´ß”iTûkÒJ	"òÈ°ë‚É1ü_Ý3‰ÚÌÃ#*S¦eE¬0ÿ™=å&¢pãCDl4àWƒUúÁ€ø‘;È™¨#5-Q@²¶«ä”a9¦š&m-2'páéIó½†ÏÌßå*Ü9?úÐK‘µÛ(•ýÿåÿ$Î~�yá�‘ã*€dO�E N_Ä/Ãêû™ß��ý‚#÷@~ÍŒc%‹Ü´Çñ¥QÔ*³2¿ÑúB‡Q¬ÂÿNØlÆqÒŒ„îHÿ„€	 ú˜Ãàö�Ÿ±ž~íÔ$Ž@J1T0À0É¬ù`H''üÄë_û—·í¦v·—Ö£X¹Þ©œêý³ù£mþéýê¹¶Ån"»zÏ×p¿¸¡¼¶�ñÿWïý|.R ÛBvBdý2€CøF67Ö•Q°ýWÓÇ¤÷ÞÙQîžì–¿‰#§÷A2EÚ~P–&8ÕUª#Âí.«ÆîAZRŸáò»‹ÏIåþ¿¯õÏ¸2æì‚ù¬�¸p{/é]”‰»'ìø‹Ûfu×šñ&Iþ»\3!Cæ)o÷}ÿ‚ZýFxÌèr@	²aiJËÒÌ$ùÁ]¥ £”g—¥±‚'&îEå�â”ÍŠC¢ÿ†¨û¢#5Aãž¥~˜XO@UW0‰7	ÖlñGâÁ#¯ú¿áŸ—§7—ö ã_X‘�R�×¦ÞÑ5jllìJfì~baTšÛ0H˜ ºa!šåÌÇ¿f6�¶L280ÆañŽÈ;AŸö/×Ó8uŽCB‹øºäÛï“#bP�	E€±:<]\)ç)Ç ÑâùÜ1&–”TÇ7…”æ8ÍÉµ¸Î™§SHÔ1c q)…‹>2Oìþÿïùz{óîõR¡ðø¾ÿ�ãá÷úü6þÏêÎ‡�ÆÓ¡ý‘'±ýöÛ9RøEXî_x–üU†y	àB,�d ©xô°Ô¨Bƒ ÀxîÝ¢KŠxdºi^Ê…THJi¨€¸Mâ ]=*&ä• ;ë¡Â7x‡R%}°•Ò8Õ sDnÁÈ˜ö‚  )ôïB'™ã¢<~JŸåñ Ïâhëzll<)Ã”ªäà—§¼0¼}¤Ù°3–›Í_÷‰Ì	ši(QgJ�ÁSa¥˜±˜°¿·ˆ€›¹´rì–·y(¸rpÞàìÎB¶öÀx‡¸ëP?Èk#,¼þ¥ý�B=ÅÜW#©¸wBï©Öv¡Aåj¿4T	\¥ ž$ÇêïþÏŽ‘õUüœPKyÞâ¯¿ÚœÜª¾÷'©à¿úuú3ô_Ñã*Ì�G›UtùúA‹íŽ‚€H/“Æï€€Ö€EãÖû÷uqÒ£÷7³;�ùføÑ]š4Óû_´ŸÙç[_j'ÈP¤¡jô@;Ó_Á·Jì	>ðPý›èÌ,©õAdHl°~ÛS<}:âj×öõÑLµlŒ–?Ãü0]„0‰°¢#5uz_¿ÉÛà�9“§}¢Š&#5Äør{{´|té÷ø.ÐA×¼r)+²T¯(@ UhAžÎnŸœ¦¢n¹@ØC“a÷C¡Éh«÷0wô¸b*ó ÔP8wÚ7²©vñ�ì'Pò'�A+ïíÍáÎºé™€R *qž˜xÞ"Z‹Çþ	ö¡œÃ¬¿)Â¶XÍõþ¥ÇáÍÙß¶óø#5…r$>‰ß!r‹ÕÄìž¯~Cê$„ÕOñwcåBýº£ÍË› d÷6pt7·Ä;ïÙãYÐH›j1r1ñRÿIÇMùÂx@ï¬Ä�Yˆ‹¦*¯W™¬ÌË|q'ü²ÿŸ¾¼5ašaÙÅp)„R"•uœ·Ofð�×²¶êxs__Ïù¬Ô†jmøñßÂ¥�I5PÞ1ÌÆ/—EðÁ=ŽÏ?Sœ= z€ù ¹ë¬¢¾\/™A#5‚©[Ý°#ñÈEj95’‰6ç;^%èd[H˜N_É¯Û¼Ø #,q›G¿r87ÉÜS©ÛÁœ}?“·ó} yËååå™¿ošý·IS9·l÷ÑÏP�RYÄFÄÀJúÿ$ó¯«Ë`gõ¸9îr«tÔ$"�¶¼VsüÅÌ$ˆOíð‹ïC»°ûÉ‘ÕÃÛjhj:=BnN¯ÇN‹Y-Õû¡àÙüæãgë¸¾ÉuÏüm=3¤¥¥GPwŸ<ËºCå¶Tu'x_ÁØÄÖK#6Ûüv!BÒJ1ˆŽï0ù×�IËºAFíŽx¹þhÞÂÂRÀâÄ\´~hõy±”9[ZG¢!Ÿt‘ßº¬wŸrÄ¤¾¾WµP×ä(#,�5 kBòÿ‰P0Óå 8~Ú':ž5X³¡—å!lŸ/'Ýzê¢WM¨é"uQ7w‡”ù—äÛÆÎ+¥¸íã‡Ú³<ù®ª£k›b©Ýe°ŠÃv'e�%¸–G ÁÅxÅíjOW²µ@éÑô»¥²$w_GuÚŸê#+ÁfŽÐc‘´äÏ©=£örvÉ>£Úž¼Ôm;¬yúQ~µfÓ˜‡ÉÇŒ•dYÉéjµ³7ÃS8Ê3,ÙüàÃ#5¥×]tåŽäù]h¥˜Fjª†fšºD�)úhÆD’í›ß=©ý2é§û~:†G—üÑŒn/ªi		Ã—oŸa+èX¶åŸŠ£Ãnz_›tfÌ3�<Ë7¬6jm °)*Ö‡ˆîv©Ñnüxß•Ê0vÔk”‡gF„nK·{¼/ÖHïI½è‚òé/švêK™[T9Z:óq-U·!q½ê×Mž­ß´¾±ãSŽ–/©gâ^ßíÇÒÏqì¶‘,)J½&“gF1ØœBPßçzÃ¤~–†»ôOžŽõz0¾?(¼Þ:+”,–É%àö‰»�£èEÒHôoÙ©Í#,”/W8&N,JþÕó·ÎÒ×èü¢ÛèÙŽ`å’}Ïv}Îô_¸Ï¦Æo×¶ðÂsp}™{8äïz"¦‡¯KL*·{xþ[^›îÒµS´ÖÄG†ÑJÕùµœœñ¹'S>5—Ä¾BüÞ{Þ)ÎíNåüûN=-­`™…žG#zí/79“=mNoTvŒOV¤0bTg4x*—àÛ™�¤]4ÖbDöU «2ëWÁ‹T�ÎÝf×WIlî&ËKäqÔÇ·¥#ƒ÷�¯’Òë_qÈ“‘ŒO× ëé¿c—×ßjú@#©ÐvZçM´d²&QaÎEOuªAÇ) á¥šÆe5D=,4$3VùŠç›¿Ú¬£2u]Wçæ÷VHGèAù§¯’yÔ^ÏîÅM;–§^¿yë›ÅR‹bgˆîKÊ‹Ê÷yIéž——”iQ‚îêvŸ±/mb0õ—K”ÿ�p´Q·Ïð6#me¾#5ŠKf¯g:][h»Õuò\Ï6¬ä•g€ÜùËœØE.*”Û™XW�é'Æ¥Y/›WØ«.WÅÚëõòz93t¡„!hÜb31¶)¤#Ò-pðTÍjøŸðˆë[—Ìl›ã5i¢9¿�3;$¾úåÏÏµþ'M¼‘Iç�Ù+î*wÿ[¦!.ºBè�s‘‰!U›J…MÎhçôÑ£N#ª·k"“‘W­Öp5ELYH«ž‡#,>*è®O{QR<ºê® M9SÍé£”“ÇGh|ÒêLx@ÆÁ¾tò1Ò·.#,BÒ";7´1„Æë�l&ÄE <Ð¿f&òõÙ| iGtUÂ×UÂýMº÷/Ákýƒ“Õ8Ÿƒ;nä™›•‹{µ—l¼Pz»Ùè®>ÒJ—~Qþq$5 óq¦0¾4Q|™o¶êzë ¼áõÙ¾"ý=ú¤tL&JÎQ¢,£á@üý—µÌ¯òÌvV,éQF¡A •)P¡ä	’wm]t.¢²Û“©&pazg~y·LipøbU›gºO”ˆÓ<ï48xÆ0³Ë„£¯Là‘µœØµÝ¤ô{ùè´³v‹¼r¶ÀìösÎœ`Æ<B FéyuÑÎXs#,ósËw«9ì]Áiô‚—‘{9‹C¨ˆaÔz¼nŠ·$wdYþNL¾þ=×ÚÙKå»Ð�Öu÷G(ï„å˜m¬ùJ»‡Xíç‚~ªr.v�×ÒõB;iÌïìÐ	ÎAå×Ä‘N7Ï¢[yèR=mà]†’°q˜þ)J2–›©±={kåh¼ÓÌ ²#ÓŠô>1ÏM>óßÜGkÑ4qÖf`�BgVùƒHwký±s¸ìõ�tnœð·†|/¬Ë›u7æw×T0¯ôÌcá«­jx¨}øxˆü6êêâ Ò	n­.`¡ìLd'“ÏÏøÇøè+ì»&ÿ~ð#,Š#,’©U”¢�¶è«<*QÊÈ€Ci°;÷[ÖlÄ()ûŸ¥Í²?²ò¨,QOïúì¿ðæµfæsé¼í'Ör=÷ŽçêñüÔ<gDÔ`�`pG‡à~—qaáD¬ƒÂs2¦‡`zËÝGŽM‹”pŠs¥hB‹õºË¨˜àÇ¡ÅfÞgŠË¿ssPÐ4–H´Kz”Vîî{–³|$CgÊí8ÎO"0›Äx¼!Ýä,íóóé‚�°¾!i§ú8šøZŽQ(Žý4S¥»ŸÉˆ§Ô£�H‡-P}Z›¤©§48º¤äQ0¢{À+_Ž~·m‹™ÔL%Z;+AQ‹Ð‘CRfUÀ…QŠÒ‹Ã<ªbó†Ñ.•›#5IøÅ’M8¢ÿÒs»D¸}ªèö-o�Ý½w«Ÿ-ÇàCP¸�Å»g§€ÜfDX�púf+­SNJ@¥\Ñ?ç‚}�ýÃ,Õ�J¦ô?ÙÐï+‘äHMú$úSÍËSÞ¿g/ÅŸD#5Â¿ß†{höb#5ý�œD*…wi¢QÓ‘üuÆ•7˜� ?Ú‚÷ åúx‰åÆ"”e»�;"5kÁ=Û¾<‚ Î„‡¨Af±\»�ùœ3|c?§WƒöÑP?ÑJšB¥¿¨¡:“é4V©Ëì€a\g£å€o²*Ñoo©ï@¾Ì\AöÉ2ä°MU&âÒßú¯ÃÙÛ*¬œ`\£à~³í°Î-ûäµmNæpà¹q&òÑÊb¸à¥¾-ŽÖçFëHiVq|Hf?Ÿj³{>îÖî…»�ÔemòÔ÷ŠàØÈx�|ydßD¹�ÿýŠ“ÐLÄqO¼Æ†x’=I÷†-dÎ‰íœX¶.¤ïGAé"­AŠ�.�ŠÙPU}‡ õö¯çé£¿¦w<wŸ/�xPÂ#sJIÑ ÓáÚÉ¾`H=¶?úz%úŠÂ®S; |ôœuä4}¼~7=¼¿zg»ÔÄ<nþŠ¸Isª`¼Q�ð©àv5¢4kß^þ´cµ4_ÑAXŒkv¨‹1ûàz¯#,øƒë¡Ø;_®‡ZÌ.Z^%J+¾§Ññ¬ÉÂðýñ²Åxj@ Ù$në«¨Ç�Üúç·ÄÚºgh$Áá$–~]Œ,.|Å«Vµ†ÏÒmîQß7‚-oæŽ#5jý]¸ä–ÈHõðÉhv°†c½ˆå6S(¦µËÁW|1³7%Úì¾Ö~ôž[ß¾V.Ös¼Zôw8êÌC˜»Å¹ÖÔ›¹MyÌ50ea0ˆÕ†yo5=HSŽŸðÙÉ÷^Cú­9(¸XE¶<e¸Ôôiza#,ô¥Bï6E[=„1ºÜ÷—‰}n·�ñ×Š¤dðƒæ"$'Nù5ÖD{]9k¢ÌHY[·xªÐé55X§�l`™rN�*…Œ/A8¾É½ø'‹C4µ@x2Üµ¸ßÇlÌùâ»ðA–,¢3g•‚S^½\&ø¢¼ãŽV¸EŒêr1‡ÚQ*á±¸j»z=è)2Öæý;Þ�g×ö°¡÷ÈPîÁçòðæøïñúW³‚ñíÒ?·ö»‘VÑT&˜ÏÝ‰iE—Ÿ>��Øî>‰Ë–(†ý9~•H¶o	’hÉ»y‡ÞÆÜ_¿Œ!AÙ�}Ÿ¹5!ÆÈúGÔGí³RüdÁÝf¹Cvcuª>ó©Ü¾Æ§X5gös�–Ê=EÜ?-çženÖð“„¯FŽWfTÑÈ°YoiMH!ÿ³&æNb#5·^`ü$¹ðW¯Þ£û7ÊH‚`™FRrÖ#,¾šKÏY ì�³#êžY`”Í3¡¨ç=rÛòÖ.Þ¡ú°ˆ”	¿ÚïôÏ¾ô½k€D_Íæã7úg¿Ù7ÃPyí“³-Î¾!Pc�ï¡d•—ehD‹+f~|…)MPVQ&A‰BþÛf½'_#5	™!ÝDnº/�½zùO–)¶u¯¢Òöô‡æqª´#,.]#+#5-’+w÷¼M`ðÊMª³Àr¸î)!s®–é7SÐ×h¬ÇÅcDÓ;]ÑS#+c¦Ô¡89 p!jJ®Êµ°?`÷¥¯|Q.Ó\!Ž˜‰Q¸f`GžŒ4«ÔX�œaxAT)ƒ¿=/Z^…BOñÁ'À›æòWÃûñÏæ&I&/V3b4+¯x-hÒlšgØöÕ‰)Êe<Ÿ>Íok^kým‘l'ˆÒ5–|òY#ntp]’Hy!³hB©2�S�üŒokjlÎÐ�3ÄÞ8D:“•eŠF��Z¢Šw�êß—Øÿ¯ò_‘ƒû	ÿ†×!ƒÏ•×¤ÒB#5SÞOÎÁTûqNF#5G<â_Õ­‚‚$*›žðÓ‚±še½b`’?_ìyö¾>�Švé¾ðÒWÚðÐ¥#5œÊ;bÕ#,‡#,6—^$O9‰°eŸ¥#õìlh³É#±èÍ=îÝ(¢+?sÐÁcY8“ú¥Úu•_�ZZ(Ä8ý2F4ðÛš‡W[@ãV‡”Ð©Çõ#,FJ„È1f?Çõü×þ&á¬ÝYáº¦PÊÓÕ‚�ØØGðÉ›sÛ'~ÕÇ�„JÞÐU4Óun¨+ó÷û.YZ`áWŠ�kß°P%‹®´¡í¶wš½ˆñ´ïGïÃzCPgMù›�ý%¬Ûdó½ŒÓá¤$âz{Ù¦½8ò³|yNP¼‡€O�>žÞ‡¶‡ÀøïnÛðg±š©áaðŽÎxV£¯ÇT´ª²ž5‰,•H•Y_U\EJJxñ”²j3#,•#5'*“Š©\J÷ÀŒÙÜø‹ßf‘°cèSY† [Ð£UÎV6õ4†á›Ê]JP„Å#,®sL#`sÔl|hnÕÅë½ �d^�ÑêœÕ¶úUQŸy‹+ÿ#,ŒOÎÍ‹ï/>^ßt@a7…¶×:Ã\tš¡ÿ„Þ»Q»Ì¡ßíóÚfÑ3yê¸&Aí»ü”–Â¯_¹ãÛã]7ØÍñ=Cch›÷m)øF‰³A9&OæQÇ“G3k÷oY:°bà¶á¶Z,­$DªjV:ÖqáÉ1¢«ETÝkÚâ—Xý1da�¹’´…s¾Q)L]=¡ì÷Ù�R¸eª¸Œ½9ÁŠ«®9¬$[bêzßÏ6ë#5� j0LÃ'(ãººãgDÀÐäËˆËZ€Ä]iÐvFÛæ�S´†tªÏ£EÁt êP0ŠÚCŸ­]³VŸîÀ` ódÈÜ Ö=Yà?‡Õ9o]G¯�üs˜âvûüÚªi�$‚ Äi;4ìÜ=QUëÄm„bØãÇH—sGç),Ãîª‰«ì™Ñ�XßÛV�ø+ãðæ×<|óÃQF^#�vc ”¹òÙ+Åð}œ‹7�,ºÃ*1†•ƒ\&®¨èþò;+¹Ñ÷é«vµ¾‰…tµö=Õ¤·FóÑš’¾zS#,¨³Š‹©©ÖiBA­€ªàæ–öQ"·mo#5n¹ß»ð`½Ýÿ'NÞëANò‚8Káåß<éÈpP/¢±õt»–=BËÁxÒÈ·RkmÍ”h¬#5#ÔñÍTlgc"Ë˜ðxt•„…[!•"¨ñ{§ÂT)Áæâ-ƒ@¡{�ó4“_8í-°Lc›P¶#5Zç9ìø!›£Ýˆf|g”5ûŠ…DåNSÂã‚®ë$ÃioÚÌUŒçcá÷úÜ0¨·N^Ž	µŽf^š‚9÷â~^§‹†óLnßŒze¸UÃÆ‡èÀblçõ®Æ®›>ä/IŽÊ6”èôvfƒåÖÎxk4!¬?¡Ä·‘Ôun5míãÑŸóÙÏÓCB�ƒ!^ëEõˆ¼X¨ê«¬úã^¥¢~)çÁÒ‰GB<fdïyÞg°ç^YÒÚÒäôØ©uQ4£«&Îô–òŽ>6ºÎÅºYÌË†–6®ÿˆLÛIœ|¿(ŠÏ?HM¸Rÿ0xBdŠ†�ùø«u¹ðÁçà9ß§•I‡‰MÄoo·±Åvîf½*ØèGÃ§1]®%®¢‹	rZåü|os’ñë±ÎúòïßUŽþ•ÐHñ~žæìEú¾-ÞãK¦zâï‚ïá‘ÆvñBoÖè ©RVºi0Óc¬a*Þ^”Î@ãœðÀ-ö$0‘4»@I±°ê¦Ã.8y:êÁ¾Þm4$¢ÉC îláƒ"Bû4ê‚g"L¹9mŠ €á»€ÏX$¡˜1|¾YŠQâX*4ðîÊAòY¼?ŒjŽ”Àd~¸×�¸/øo½¾,ßƒ˜‡êœ)tGDÁº;pö2 ¶tÐëÊ�òû5iþ^¿@ù»GŸåÔ6‘½‰¾·/Ê5Óñ!@f¨œY@»2š8ð‹æE¢×¹Å›‚]Ý`1*Oü±s#,E1Š¼¼9‡#�Ù¡ôFŠ‡?—à¾«(snÆµµ™Ì6€Iûvi§±Îp:kÙØøCâèß4×<o¤j¶;ãC]¸ýòáÕ_5#\={+_½$áØb;áH$§„“ö»ó×TÍÏ@©'²iúWÐú~ô#7â ptuýàÁ¹¶?íAõšÇÞˆ>‘�,ž”@äéBˆŸTBËåíYÿÿÕïŸà-#5r?ënxv�H­•$�Œ‡({ÐàPÒ2C˜¨�ÀÁ "¤? öƒÃ¦CÅs å×ô’¸em°ZZY¼Àµà0k·�l0Ø)›L@ÆÈv“wÓÒÞ'”�ˆ#§I´èhÿp|;²yh¬—q|Pííòóó‹‘±ßÂâFn"' ²p:XI8L{'|�ë�äæòó�ø'‹õÙü3çˆ)¯�ðþëW$sç˜´*w¨iÒ?óõçò=ØÆE-&†·óðf8™ 4wnÄ úH}:çjKT7çéýþI»Íú|N§�%</3áÀ›ˆMÁd�ûƒ³ü½ÖCœ3ÝD¨¢t?�« cû³ÔÂŸ¾îÌqOuß«6yëS¿ãÚ!Ä6öÓqcGÔÂÒÆOÁÁé¥³Z�ÎAÈLÑ.‰D[¦Qý‡�Ï»pèXÖ\Ô‡Ì×°ùÿÉï3n€¯‘í{CÓ·Æ�Jü˜²qµÎa‘÷üü­¡†‰+ìÐãH?Xb\ƒ/j#5\ëŽØÝQC�_‘¼ÇçÌ¯tm~!ááõœwXs,”›T”	¶[Ã[†$GBf¦¾#5Àí !˜»àOvÅ�¨Ï‡òÎãH¹ñEÓþ)RÐöÏ‡aìE�5{€:Âf`#5#5¡Ûì3³=p�Þ}¨œ‰Ú'Œç¡ú7öv�\�I*Ä,¦L‚,r#5]±o :¿î	Á4ŸIôù(ió"ÖïÌ§šôärèg8æÒë™ëäOäx 2vçâV~±B>„�¨Ž |ƒbˆÕZ°(‚¤P`‘'³Ùø@éÐåV›»öëØ8ÚÔ÷·ånFrè#5Ð/ËýÜ¶NÎÃ³5�qÖüm=®.KIt�>•1â{IvÈ²nKÚµO_& jÿ(pBŠüv,údÅ”Ò~l’•$‚ê49õþD?Ðüè'šHË1ÐêOÔ@§ŽàûCÀ®õ`ªðyükÕ¼(Þ’þ]Ÿ—¬E{ùÉv*¸ü¤«\ƒJª<Ï âvÀ.IŒ·r÷$þðóò)fft½;½#,kíy=´Dàày’"µ˜Àn{Q*©(µ·Ðé�ñÛø‚¯ÄzskßÎ¨…k1—òiI9ºüàÕã›	2#XéžŽÉ0Ý´|rI(Rîî6#,3Y��›ÏsG–ÛB3w;7ÍÃ6X.ëkF¢¥éðÐaƒ°õTâ¾ÿÔ—‘P	È9‚¤=P! ¡NÎ¯¸zA¨SqÃ£g(ŒäÔ�júW¸³ ¥×Ïí­pÖ1ÃÊ¯T÷0X—çøcgùçn5w4€‹åÁÁ¥cŒg:°E´˜QO|ÜÙyªe�Š3œ�ûø…Yå}­q½s6†3ˆA»ùNà»¡š„a’I÷krÃö	‰0^œÊâ›?j"Àlÿ€êÇ4µ½Âpë';\ú¦( ^#5„8¨CxëgzØËÇ ~Ð.;Ë°Áí7Ô,>£’ß(~äIÆIÔ#,gePõ	{CÌyÑaéÍC_»·½çæìj}ÓË3žÂ�w:æÅ†cß<�!Ü3S‚’E	™» /� ÎÙA}0ÈäÜ4Cb÷ArÓïügßåðŸxhjŠw‰ìÊ¥$¦fû_ÆùÀ   >‡_7Äú¨îxÏæøQ%oB‹”ù!ÀEÆ,Ü��ºpB¨ÒB)AÄ+#5œ»�¾víîæ¬yâ4‹é,r„�M¡ûHGZ‘¨5–¡¦”`¤‰F;­#,©›¯Ó8áq5«×Ÿ²W_FˆÈ¹Š‚ÿf]t(öÈÇÞ˜u\Àms¸Ú²6Éd®âW©50d6c(Nwn£Žû�kûµÓ“.ˆßmãP3—¿X¶jn8>n'ÊÔ{H´ò,DÊ"«UU¢‘Fp£¼ø	/ø*JÎíÉŽBc§bîäë�'“Ði³  G�>ˆyBR3÷¤Àˆ��#›zw�»Ê‰B$È¤%¡:HðêU-»@T}Š�¢¦2& !˜Üïû?oH^p{<Ë±2‰Ä¼m[Æ6,÷ªFükX�ên ÎðÐ­NÇï‚ßëÖÿ*6ô«Ë;¸;»7ˆI(„˜ÝÜ™ç¬ÒH¢�ßåY¬¨íKfe‰$‚^Ba£5‘êZ8˜ÜS	.s™9ê»?câ­cHNå‹£cQ±U	€dÀx#,jq(‹!Ä=^>Z�Øõ÷�`Y-<=!ã®Û‘°1U,OßñÈ"šE–&U÷9ÕxÐ~Ï¿¬ViÀw§î¬xw"{U#,cÅ°ÐNÔ”$>áøgOngàYE×ô{wú¾È#5>ðÉùí¥îgàÛfu®�àÅ²Åœ}U �AUì„O´å»ˆ¡à~?§»‘ú¼Ñé/g1þØ€%¶'O‘ºƒs9^ä/g@gäð†@&ò��N}JA@=�ý5&F |OLI‰·¬f!™Y•3xgý;�ÈhÁ oäè`Ÿõ )š;³9âü™$#,¾ßRáÄý‘çxÏòÓù5Äôéý§ÛÒqóýZ“ñ@Wùì½+·äÊ¿°*HKA&Muè�†FŽó O±‘ÙúO±”>{sÅþ“§è>£ââb|ü'0#,•?q›€$£ *AZaëæI%¡UIQKx¨¸Mß þƒ¸åÈÈ#ú¾"x¯¨|@÷#ŒP�SrMÐOC»ÐM�n4±‚Iúg†ô]ç öpüÏŽ�4NÞåV>³äŸ…ïï	æ¢ðD ¦î_ížÅ^Ž?X?q¤ø"O›¯Ÿ0ö¥yN'—0‰G¡)Ü‘I&„Ó¯—óþ?wXç3_„+þcús#,Gü?x?Œƒ>/Õ(©Ñ�“@IÏ‡6¤#H\Ûz‚Žƒ×ÊŠÄo1s° #5¾)øk;º…Ž¿hû€àBnŸ @šC«‰@žÏàß¿_¬,øþFðöxþsñí§¸~¦þÿ-Gý¿†oçfÈ™›àz]YÑD0D´U Š&åTýhØ¬·,\lÎ×ZÅEhäD\Äñ°Áù#5w¡ƒlØfv5ú#,Œ{{AóSŸ·Š Ÿ¸M<ITÁåRÑDaê#,³ÈuØje¾SÑ#µ�D[FrÄ\u8¢òC¯èëÛº½¶TGT(éT§#,‹íPúÛljRûpÛHûLˆyãtda$ÙÃ!õü¼”jè¸æ.ÿhbÐA0“qe[¡¢Y-Nðì å¡|øKg“K¨Á±¦[(À+„2Qb°iÏQaYç¡£Ô{G¾”�˜ /â2 Œ<NÉõLT-R"5ê×—p;6£‰ùþÎ�¾ O	%„âjrqÛ$ã kæbN��'ˆ±ÄÚÇ?ë‡>‚CÀÁ•TÑíÇŸ¯ìêP{´?ú}Æ»½‘�°QûR§í?äûÿæ,Ž½me¢™êˆ ”üè#,\ù�Äþ™s‘Hmøn†—“Ì> ÆCìí°.w×ýO)#,Oðùj ¡r€ å�š¯#,îkiÄcÕáwˆØƒ™DÉ}ðÆ°˜º\Û¥ß{mäQhLä¾G—æ*éÇîeýæ¨c"!<×Ÿ¯KqÝè„C×Ž>OÃÒ²Øz~GŽ©o÷*`Ï}­,�2…¯Ð�š'gaýG§íÌûM·CÁæ‡©¶ßGáç‹¤‚ÈÈrLønìÉ!“»Á…¼}œ“r9ÉÂ|R{V–š#,„ÎýÆ#ôk¨üÕqaá¤!4¹(vB‡ë„Ê›ÊN“´àñ]Ïñ@À€kà2	�ñc¶ÞçÏÒÍ|-Ù��ÿ»U±¸u]ÂwÀÚ4BNWµ69'ÒÍ&=;¹Êz7°Ÿ»úoÿ£®§ÎlóS§ÎbŒ#5kç<5ÓVf•Ð�J«„i¦ÚCdµ&£ß«š»Å9Ê„Ú3ru#¢T�¦„¥fæÞ]ºòÎÐ‰€4Ž„JR†•¶þñ¬þ‡ÇÝñó/•Ÿ£—Öy—ö™~À50}'xT:öŒö2«Y�ðøÄ=Eü‡Ú}©äŸy€pé4ÄÅ3^�»Þß¯‰FFg!‰¦a¾é<@Ú†±ïï&ÞÀ�ëÃŸŽHýßÄò1 Ðrô eÚŠŒBEZ0L.=CaÒ›!¶âiN£Èpo±ï®ÍÙÁ ø}îa‰NÇ^özö#Á˜èÁ»˜˜§È<Þõäá·S¸þRûpÃå;žO°%ÈCc�Ò£’J(Â'Naâ{'½è{º…øÒ¤œ8¯Óø¼Ã™Ëñü=€ú¥)íOd–!M~›†LÊ4f¦J´,ÅJ«Nú¼¿oê9ïÛÐøzH}íÛ W‡Ý>’Xå�M<OOÖÑê<œ±NtzÃé¸~&ÅQ^�ýcÚÛ-XI·2šäÃ�|Ž3é»÷=Ñ=×Ìð’ h»®½weº¢K£€pÔ$ŸœÌ:Ü£'ä*×2Îì“¤Ü´2¶üM4š€wÿi:ŒIù@1Ì7ñ‚Or`>ƒ~Ýx#,Œ‚Ldå™¦F?q·_M÷÷7cùyr?5÷�ùáà€b|`dn^0ITÏ�%/ÔgælzNØ½AÐK |Àä=(®“tH¦eˆd}Ä‚ZLo‡ÏÝ·ã>â_óæ@³ÚêH³õIYú¹ä’o6Š}ñÁ¸ÇãîÔüÂL¦�QO¯ÙÏÀÂ"2xˆ*‚šMXt<CÃz*JUaÄÑH$A±Ž°>ÏŒ@é�ÛE“-6ÂîOÎP$8{‰ìšû{ÊðöÏ½×ÂýÁÈîH†,¥"ø‚~ {ÎôÓÌölÁŸ �ÒyI×±=_¢åŸ›ÇØð˜„œÀÁ}è’²+‡j|Ì:lï'ˆšÃgi�(	<˜0Á#,àw{wJ8,ð²—×cC>^]ç¼?3À»Ý[.î´ö>ÿ«ÔnQÃ”¬¾ÉpÙ�´	Ç@ß»ñxüüÈ“å‹(&{š‘Ï…T£eH-û³ð&,™	�aÇf¹¢"²±sô@­!}a!K¦Ï"ŸÆ�lÐÜ'û8Ã{dÇ\bYH�5…gCY³]ôÉå@z}xÎ0¨ÕÃƒÅR&.•P­öQ]TÇMÇ¼ñ=þºó	ëù'¿Ã[ý¥Ó³Î0@Ã…˜x¢¸ú·ÄëÝ§Þ7ë�<òŽØ9êôû>Ÿ¡ñ­áÖr$åHªBùšò•X'è'´©3ò¢fŠë]†‰Ø¶.–AÒt4í�Û¡©Þv {@æ‹ ��WÄ1Ç¶i�ºŠCœ¯µ]y|fã½ltÐÌ–¾ýÛã¹6üÿ$èO°ß&Å¸lŒÝÀý×sØûÁŒ”øk$Çzºxñ'ígÊ �ØD¥U`u{#,D ˜!ï(õÃï:÷t	À±—ëñ¦ÖDHD ìü�@`4ý¬<¬9~­ôÿTåÊƒ†-–~Ra×Á@Üˆ#5S¸€�P:ç{½×àC7ì‘þüËx>ßSð,¢sÊ.¶äÃ‰­.Âi’ÀA#54¸E˜x¬ü|ºf=+ätÿó*#,äë3f5Œ4ù$dFÒˆÔ ’P;ú…ð'×™¸ìRT%ä>ãIÈÉ7…“¸üÞ$öbr…�S×xÌž'lð64„å %^@!å'õ~ò§ÎÀ6S°àÀ=C‘ì'‰ô¢`Ž#5OROÑÚ£NÄAcëNˆTšÏTÀsðäX�^rI0°ý {Žaß	Çæô™5(†ùE.‰3;ƒLˆkgp)à¨ c¼ê’¥C0æÊ/µ{#ø]Ÿg¡�bŠ0>–O¨À`Å$À™2P×¦µÉ"Œ‚$C8Æ³m³…‰Ï×¾o6/ÝÓmåZ¢Š¦“¨]�œ5‰4Dƒ�îP³<(þc¦žb—�HA>O,$ôä¡�P”¡BfÇ>]û�É¹PÑKI5�y‚EÏ!…å·„õŸPý'³/YÌÄ·æùÄOàðr_°Fx#,�Xý.‚éï�pl÷�ø=àîŸ_§`.ç‹x~¾æì�E�¹?0ýåƒòÛ ÛæÆÃ\†Å�M¿“¯Õþ“hrG’Ï�|ø´ˆ(*JˆH¢M>ÀtªÑ›Jfå­Ãbr	�!¥u•ñ$ÀªŽ…¯ýf‘UXLGp€QÐŸVíf¸6I£é±D´7qÏ¾§U•ˆÖFcÄ`Q„cžgú/‡ºq×˜°áêç“B üKŸ ÏËõ>«™”I0Åo-i˜�âY²7ØÆƒìoì[î�ír(~D]œBí:, @l¿c·g{ÞT•æ gAä§xÿøRÜr×Ü‹ð1æC°:ñçÖåôk¤Ô÷¯Âq«Š�©òB÷·çZÿþ=ÞÓ ˆÚ Po,DV)>3ã»çgR”T­.î_¦Æ–˜v1(22Ì±‰.AŸ»Y¬HÙ1›ƒŒ	=†—ç±ð;CÐXö-9RÀÜ0·û¼Ù›vf4�¸Ž[H:Ÿ¹þã^¸¿M@±IùH³!’R†{LPÔ°·ä|êéûGÄzé¼ß€;X¸'@ Ñû€ø—6ðOôƒèHíúuË®…€¡ÂtˆU)1'²)]¥^@QÁa ™	2	‘Œ‰„€Z0%R”¤5˜¡‘Nf%D@¹	’ faôšÑ€[bPüÕ½f~F¸Y7‰gú7R4B6a·æñµƒ5º›�q`—÷2Øº§ÇïIòâ].d8ã:´oX~¾ÊU¤=Ç²#’(�– t'CŽœ´�D­ÈçËn½zr)Ù�Ó& s°\1BUR±‡�9ÉS·ø8H>ÔùSà|ø!�s+¢U??\@Iö½Ûï¾_]Fÿ¾ÝÖrýnX.çÃßD}1Îà „pTT$šªTËiÝvGú²œýQÿ*òM‘úõ’57ÿ-{ßNY�¹é“kŸ­ôÊFQ)©Æ;&¬3š€8=\U:R1kÓú?a •ŒP~sEÇõëÍ‹;‰$6þ'cýÖ	øyo3ëÒ7}—í|W~ …çæ u¾_}·iŽ°ßÒ`¾+Ò”4ïÃ–#,µ‡FfÚ@®§æU5”¬0¦•§Š¡ßÈ½¨.>$I¼q†�ggçþ/ÏuC‰„x�;eÔw �¤¡�¦,T)ÖÏgHŸ§ññycø×ò‚/ûãgÄ~ÚƒÜÄ!yøÏŠ	úæ<ªöXgBsÆ	küBˆ½«'ç¡, ƒ–ròmÂèÂxŸ=xë:|ƒäýßm@Ô@0žû(Ÿ�w&G9A¿Ób²K|´äG/¯:’Zâ·o×x®èôñpÁÃ–|¢¹¯ãAB$L¿kÛ‡#(ðx«Ü”:LP¯¬ßêeÕ¤âa°2d™ƒ>T®öUÒ{Rùr7—½yÑ½5‚žjúÇÇ¦#,oMNl/PÓµ|š3šä3ÅÇ“Åç§~øWZÞYZ"5¶¼Å¹x�CÞ˜Íy²“«Êï,ˆÊª#5qº›®˜¸<a eÔˆú¤q£²BýãVcÓ	2Q@_ë£©Êâ¢�r9ÂÇÂ¯2?²ÿ¦À$Ú«ýOÇþeD€M`€/1²„�ãÓÏ¸ªUÁáùòY�ã'	»Ä£a1'“Äòòïë­«(QÝ†Ô‚l*n5ÒG¥Îw½¢ÀpNõŠÔ@:èw²8œ£D‘‚‰â"„tŒ@_"ôØ(íQ!•«C±”`–#.`ŸŽ­W….HÀgƒŸ‰ æ²ž‘V�§ °ùÝ�7 Ì÷ç*”3Ñ­SàY€ÝO£C¢�èÔ�}™µ¨åbœ›¹úQyå{§ˆÛu×SO¡¬Ý8ÕƒuMU;äúÈ�ûî35³åóU�al�u�¶Ÿ@sßB¨‡šÇ»+âŒÛ(¨÷Œì©‚Œj1Ç(˜Æ‹ëâèË#5|õÒÐÀ ‰Iy�osí�pp¡tQ@F¡c\i½´Bº®·UÕë¢ÎÈ¨½]‘¶9âò>jnf·¦´šAËKˆH™qD‰ã�<bT]ô�ÓytÖÒa6Ô&u¦øÓ¢èö_oá¦— &]O²”½ ³Øº#mM_Â/€óšÄ(íL‹äç¤ÉK³ÎeÏcÏdˆ?å9õÅêX>	LÃ¥ôDðí ÑÃùL®“®4{ux…l;ÙÌÈ³ZòÝÞyø=íëÖ¨¶£hˆ*L c[½+ŽÉ1Jnãë˜oî[‰2˜ŒÿØ¢¨?É”u|KõåF#,wrÉv·ïAç£#,M÷ø|Cìê#,¡>³RváÚ«�y×{�Hèƒ:Žlù«ß¶,,Õ(CýÔëK’·Ûõ¿Ó[DfVP¥ÛQMí´‘»ôìáyþÜ•jÜ¬,<ÇS£›ZüËV6��+¦'#5Ën9ðˆ—¶Ð@ØE$A0Rß˜üñ�ŠŸ®o|ÂÔD--ÓOt+y‚ª.Ç#5»¦.º#,<‚ÄZ¬	W ºŽðí\Î¶¡¿X^m;^¬@É$	¼¨·ÞøOF;5„ñâ?š�Ññ{Ò>áÏ]åH{Ý1wo¿}}ü—5kcóíu«yOž¾�]<Ž*-NØBDN‚ò=»s¼…¡÷¥·ô°üyT4~Ž³XœZOÂVäá¦–p½S7ÓwèBÇGPpT&ÃŠ¿_ÛóÔìâžÉ²§.êðü/½˜`t¶Ï¾ŠNÑ®Êg§±Ï#5,7½EqGò"?l�|õá¶¶“ZðãÚñ¥uës´1FçäÌ¼YœÔ<Y8$-†ô]è¤ê$?;ÿå2<ü¾?Oõ	G—K“½?2y2@¡¶€’Ã¯K+s\ô5‹;�ºãD:¸j¸S�M‘ˆò—î•G¸š1’Xá´x<þÌ 6Á­ºñ3É™Ÿ(,é9d4-RÓC:„1o”ý×�óð.6âÛaÎ‚KC¿4Ýw§.UÅ’TÜv]°=ÂOZC—¾b`„˜ukð½Xo?i‡ð¥}W�I9dì×ý¾sÔ»£»%ü¥¯;�9'v¹½«Þ�:gúûØ’CÕ³êŸ^aÝÙ(#,5ýÕømð¹¾áGõ2…úQB0S?Ïsù“.3Kø#,A>r¹u÷Ÿ-I^óÝå?ïsè�ƒÙ:ÿ¹Éî~‡üÎãÚ#,jr[%�ú¯hwyìÏÞr'Œ�eP<ÿi‚eæCý?‰P áÝJ 1*J"¸úUÝ\�v‘4´YHd#5B� H‡<Ÿ·Û´g‡Ô£èÈ*êM¡{öÀ¹?znýOíœ«ƒ©üë�†»:�tƒ¡þ`ÿQÝÌì©¦8M"ÜûoË4Dö±s§)hÉ³ùŸæÌÑÃ=§7“hæŸÌ˜ì{?b‡}à™"q7Øòma-áßŒX[œ[HÒ˜Ø*c%±ÿgÑã9I„›–ê½Ì:·ùbÄ†7è‡nO3±>ÖB#,Ày$õ<ñ{"—´|ü1ø+þðBkü`s7“¨lføp:E !ã9±bŠ´sòÖ÷OÀ¯áþLö«ã¿�f!9Ç™Ñ„K£o3ÓÞr]“0àtf¼C7áçúöüççÁé%ä¹`�0“C¯I¿Æ*Ä>†'tt¦P”õÁ@†¦IÏãìàäQ­M¡½<X{ jröÄêó,¥¶ÍývâGbŠ¿Öš#,BET D-ak`Ãª4xHl2`N£GeØ©KÚÆe—3¸¶{9=Ÿ´ý½ÒÄWfáøFèãáöGÉé	SK»4ú®Ä"ú70'Qÿ'À¨:Ò\@ÞA­w|>\÷ëñßÉëéÕ¡¿.Šð¢ñå†Ûyäx÷û+„J(Wïžæ_ÐÿˆF5$Zb6¸h�¡1Œÿ,†ÞÍ×<¤¨â œ2E(âj”¤ÖT}``¿ÍWð?UkPØi5²$‹©É•#TÚŠ(-?"óµOßÞ®ü¯s½´;KdDæ;šB"ÿK©þ�2v“3mß‡+Ô�üžÅ{%5T­_	¼8R>Ïä!ÒlhY#,¨ˆÞ	ßÔÁûÚMÞ@rÉýGzï�O	îwŒ˜˜œÎ¦M:…#ÅVF¸`cJK…~ì;Ä·gØ7QtÅ'g%‡šðF��!„)Ñvæ'A•yðUñŒø°+:cïl0Á#,ñlûúØÁ˜ía2ïa’Ë\…pV°(Á$ý¦IGŠª ‚±åÈÞni·‚4ÛðIÜ/!™jD£o%’X2·Ê«ÊZr2$ñ›»­ªg`�Ïƒ¾¹ÌŒ e‹h6©Ë;`øM¸ÌDÿwåÛ1&d¹èþ-6ú²”ù#|`Ù¤¶N«´'¿¼pœ�f}‡ë;M!© psÊYØ‹œ‰ÜI~3Oï°ëZ…¦‰”bS‚yx�ó`›ä_¡¸ÛAh¢§]zÁ>3�5,ÆäePFÀ$?ÄiEŒôªna¦{Tx�È�)“„ly:žTòÍÈÜ°ÌÄóÖ�+DÄF'…°ò(Oi´lÄj@l“]0~e>>§ƒ›>Ãü#Ð�µØöÁ:\…íð­=ïhyQ�ÉD±V4,>°õÑöëK}»t·¶=>ÌdO7Å¯›å´‡ÑÇe<rÈa*œ1¦<Ùœ|Õ¡S$ó3M�;€ì?#rñ)ª©˜v‹×¡,.Õ#Rt/žpÅ`ÃÍN�ô{€êDy›²½W‡ÝýxéÉ�Ï {ÝÄ�#,Å� ï©«ºy›™@GW¹>ÖùD¤5«ÆÚM©{æzz™�ÔdÚ¢UŽâŸEíS–™“Œ'r‡ãê¿ßÁîNØæ;SÃÛÍ¾{·Z—ìo ¥P�#,’¬•]srè.Ç§·‘Äg^vkT*´ÚçVûÔ4¶™Û€Y®Ü4¼ù’,&ÃÉêÃÓ©Ù‰DÓÂ‹¢5/¡^RånRB[ Apö±À	•¡{•CÈÙó6W;>mfˆºú ok`d¸c–Ý¬:[ q¥´l#È�.Æöc#,ÓÔ›C&³c°Ú†˜Òœ'	À!ºCËÚf\I9CKLìK¦Y‡1�àVá¼Ç‡—³›x»G3y{ÚŒêQ6›o»Á°¤ªYñps„ªüv=í:2Bm�¶e™ô»5ÄÙ¶Š�f/9³-pp9Ó ŒE³ÆÙ4ˆ0Q y}’_fïW¨*¶F,:" ¥dbö,30k°¨Ç¤mœÓÎyì�7ö÷Ê(á’&Å‚4Þ+Ý‚T“˜ÂN!Ì85f;#,æÃ²(,®„ÖmÜªªªªªª"«ÖNâô¿SºŒg5(#dZÍÁ¼=TlEèr×¥nêUU¡ŽD7šÉ7FûW"Š¬o×uaë� c¶¢éá{¦ºG‚hôz­Ü�ˆFwŒ¥xÌ‘Ùò³„Û�«Í¦zY^dWBM¥¤ÎuM›XÑ¹Ž8íÃôI*›ázL‡�s†”Õ!ÕŠ˜±„Í#;`6çÓ¦.å2k¦¨›E_‚•TZî¤ÄNÃ£æ�+,P+ÅÔa^ù,öÖ'2£:SÎ#5#ËÜ´kˆSÄ½ÚVW.o{¡/cB6ƒ¢t= ¦ËqÊ	ºCÁS«­äªXwš�4ÉE-4­m´Q7šOQ€œMàø€›jüað€}¼hü'¡ÙA êƒ¨ë@`i{\ƒôž¡Ü	ˆ|<RTá25Xð‡´‹ ÐmÄP*kmDm#3Ý1=ô’9oEÑªÓ÷ûŒX…ñìlÈa€Å–×òµA³žzmô�°Û] ÃÌ*P9xR#,2\Å�bOšõÆøgX#5'ÏÆ�`Ûˆì¨× ±>'¡å�ÐÈ¡Ÿ�²³*\™ÞUÁ{«ú�aq–E»¡)k€Íùˆ´–*�àxèó0ƒ2J;¥,ãú¾œŸ?«jì==æ%î_éþ•³Ø0ñ�Ð„î5Ùw<Ï60<ÞA�¹ŽHœÌ;ùŒ4,z�S6ál8�’øÝuË†Ç˜!Ã5É£Ÿ�'½(§ª)ƒ°„°ïbjPËˆ#%˜:lq‡l£Ufu™wo)1=RQ¬@O«{Ò¾óWõ—Êò`¼MPêYi"É6!7Y—~½qÆ½¸åÐ¥O{éãUQ}I†Î­7ÑÔccÌÜ€ôÜ<¨îß#LràC´ƒ`‚d|Ã«À¿Bài|ƒÇäà{L'ÖG˜oÏÆÌAä0W iHä3_ÑS6f6ÚLvÅo¶^Ö›|‘¡ \i‡@Ülc„U}õ@oà v u!8H˜¦W±Ý×¸ˆ½5z�Ìnæ”˜xÃ&¡cÈQlÚ|ŠÀ–x@7Â·Qª¥ù¾�èmØ<‚tH#55è"°EðvèÑÊ‰ØfÖ3-�îi)H¹B&Ä*(KƒÇ¬QÐDÝ�Èá§Ë¿¡-ÝdÎìãXÁ��ì÷«c¾(Á‹“	æÖ%%º®Å¥ªnêÐJ¨Á_<qRéru­sK¢wè”=È6¦”TŽbÖ~=OeQ5#,¨yQí:Ñ@î<©}à½ª*ïp‘ÚÞ)8�Ñ2‘ó7“œgßs¡ÐñòÜ…2¡¶õ_WÖ@…a0×o	ÇFM“‘€3#,½Ä›qf‡Ü©ä2w¤Õ†Œ“xúëu³¶j«z�DW´Æ�¿ˆ(„=&Z]mQr­µîƒã‘IÉƒ�ëµdÉõÓÝÕ$îAúúíÿ†+Áfç•¡#5äÉ‘OP)"‚°ª!b†AüU-œ.Ì‰\ñþþMsFÃ;Çûó³ÈÛ'9ßå©À"‹îÅ…H“pT!¯¸õ-søàÒ};iªÙõàÂf¶��¾ªgBÁ#¢#,C´ŽÊºƒ.%�Ý»oA�Â{X„	HDçÃû(¢}\Éò¶	L¡„û>ÇÅ÷öSÚ™W†Û:äýù?±÷£ýöt£éAk§“´d€")ò¤)OyŸ­80–ˆŠgOò$�óÁ‚y|5!íõ„?âuM‡â%™b¦bÝÆ~…gÛ¦Ð­¼wÃñDi`Š MåL�„’	Pú—#,ÍbS8ªªmPh;­‘º)¹g! ÀR3�{Âîh4*¦ß+¿coäèvªBžÁ&ðâD#,²¶øŸàÉ#,É“ÌQLO�Ù��ÍþÏGÞªkÚ§³ŠHhe<³™ä=ÁðÌ\“Ì1bYYyÂõ# EÒë§9�ÛàiNA#üt	�àËÕ@¡V ¤ˆJ€‚abôqí6"ø²ºS~�â:¡õ†Óˆ¢y‹ïeÀô÷¾Ðäž /Õ`	ÚCÜG€ô¦Ì6Äü1w4ß¯TÜÊÑ4@"'µ�àg�­ñ°Á´˜Ù²Ç´Ž§J-a¸Z/-c[iFù‹–Ù°.x�Ò ‡ýÈÀ¤ßØz3ÙéžãßŸ·õð^ÓÆ¾Kßì3¬•±Â*•Æ/ßB7Ä=‰Cê�Ú‡Çò•þ>]ÖT¯¡Z	n7}W§Šd’ñ†øsR¦I�P×w#, nŒ`‡óF{	t* JÎ¿¬<½ž0|<¸|Ï�ö#5ŸHJ‰éíñúNo A>…XD÷qÇsÞ!¨È¾zN Ëõ++@ 4ã ŒJ‹ ÈÊ†|gÞ$=Ù ¿.<nŒr…ÞWt‰ESHÅf	nhÇM£�°#4Î?i ôNçÄùvoÊ"ì“þ,þ(§SàÔj#,f. ÌÅ)£'Q•“�T›Zý,uˆqÅÉ[½­cNÉ‘ #!N@TL±wžÅ–c’B&êâ5þñ¨*B(“N…"x \BPL@4Æ¡>)??ÙUÙ£ûÕÍªß÷yn§æ_™€¦A�ækU–Š¬Éæ@db‰:‚sØ;ú¡Á‰b2ìrùœ�ª<Q%’È æò÷–„ðaû«ÈüE")Aèy}¹�_/Éwpœ$!!•¤út¾}¼5¦ì(ª(Å\Ês1Îë»¢""#,ÛwFüÜ^j»¢ê×tDD]ÝÛºîë»£uÜ6666D)!$„‰³šºŸ¿#,èqó,á²ø„y±â�A€>°ÌOË�ÓJMjÐÎá"Aó�A®Z%:#ÄÃM³ªP l`”QÉ#,*Œnãe°'|$D¡'CIü#5ÈÞ	“‰Óh=xï�ÕÚ\.ß±WÉU÷P‚K÷ˆäœ yyOH�´�¿¿µ0À=¬-NÓ £K"¯¸7cì‡OÃÓïëëÇ¿‡ëáê/üŠI¿¹ûx„!¿N�ÇýUNœ©©T8D“ü)2†„[Puûÿ¿G�~ín˜˜ð×3Œ!1žu{ËG…ÙÉcª}®BÐœ&v%¯òC07è{é½™·sÅúyGíüþm�útP¥)~„#¨)øCTÉXä”-)ÀŒ‡Ô!ð< ¨Þ0†É2!iÐŠ9"HÉ3ûzu�±>iöTûôÍ¦LY´Üƒ×îÑÛ*÷÷ž»~è?Ï…g½Ó‰M.°Qæ4!@÷¸Åb‘ˆ (¢MFÊ£Y›Y)Qj’¶Ñ¤P«*¥¦Ò‹m–Ô('Èí÷Eùàü<6Ìt�=P{	(R„U¥#5PžŸH}R¦ê¾`œÈ«ú¼CÙ�ö´”‡´³cý°U”rBN�¦L1Øw¶#,8ï¨,]À÷ŠŸÊ �HKã‰!sÆ“Ôï&ìsªËôìFÖ}–µ^êà³ÇX¼ã0œ2‰˜â3N;"6ây£€(TØ´0ks~ ØLèÂ#Ú £õBˆ±ÒÒ ‚œþ”1yˆ�N{¯(ë�ƒS[Ø©ÄÐæiÜÜ¢A�¨õ ý1êG'œ¨ÒDNÁOWÝÏÑ|wh#5K¨ 'ëŠ"Ã375_L®VLØk"�×.bJ�½ÚÕÞuêl¾Wx-ž¼:ƒëGiähù°¨BE#J�z0ÆFìN|oöž;ÊùTóAùößþV/Û>[)ô‡¥û_<øý'Í©–Qü¼Fö!T*‡Q ÿ—^�'—åô|ÿËùÌPB&Â‰ÏØ·oö˜gÙ{%€é*jM·3ôÈqöbè…:¦ä¿{ï¦h‰Ðivq€ú®éÌÃ›ËÂó³Ùç® 8ƒ™�1Ð€zÊ™‹ðžêl,³êq¼¨QWX$Ÿµš&ç¬,Û ÞW°:wè2?¸ÿh”•CÀ� …Š*% ïáü¼›ð�zø¨y‚5ãØÂ°ht¥Âmëæî—/bvq�¡­ÄVZÀ˜-3:îÝ~è:~Ç>)‚’3‡tÐl ÈÌÃ.º0˜<Ay%È{±øãðA5ÔÝ2¥ �l}Q>~ öaåŒôàÜÓ·‡xä½Žïw£¸êÛ#5n¦é0\ Ÿ§ætñâÝLŠí™2ªXõ�ã¿ŸIër?ËÂªìÌÆísÓ¾­‚Æ> Í…#5uö¤�æqyfRé¸�2ÎÍ‡T(h.ù™vnO!�±¹‹°¥ÕCîâ´iKMƒhÕ£,Ž]µ(Æ“Ó‰++Z`Æˆjy1²¡ôënÏn‡Ü8Æ0å àh¼rË…J0ão4kÁólã‚A·8Î#,cÈÖ#5´_˜” R!H	PöÂýÈÙùÎß/à»<ZòHùp__§f³ŸÐÿŸ—§šÝ�Ý¢=qšŸçøÖ0 ñ!¯Õ7!wº3ùzÝQ°bš*ªùÒ•;mÒÙ?_w¨D *ˆ’†Šû…»«³˜‡uÑ*dm&ab)#5hT0×¸xpÌ!×åúª«y!¶ 3…I¡!7“Âqù5çË�óÒ�RÛ(ó�ŽÜCsÔ’2üøÍ(ÊZ:¡Ø’‹@4Cí“J´™ƒ ‰-rÍÜL|Ù3Œ~µpë·_Wa<¢(¤D©ÂŒ&	I¢ ¶ÆF£‚#³`vtApßS°:‹Åú—ÔQdEkŸ6‘(s«!ÄtE` W#5T^‚+¦l:±ÜÑÖ<teo“¦.²š÷Ð†èÐþ0õùº<ê§¿óy^÷}}ey4V4FwÉì.,»øF1ŠZ9Ìxš€m“£÷Lº;[P��Ê/´ê_‡Ý³~jJ�l»½®nž“ø¼“–XW� .N?ÑÙ¬Xµªc•7‚kÅµ�I×hJÒ÷p¶õPÙ}SBùPwTÄmWÁaÑ•²t„¶¹ÄÈ·Lì¬-ãm‹Â²6MÂæ\óôƒËÂ„´Í‚qÓ·O^0ÞÝ,4J‹´¶3ÇÇÏ‘ËnKÜ�†Á;óËdßÊC—,1á7µu³ô×Xòîå¯‡c¨-&Bß¥ùñ*j¸x“áïfeJ•†@ÅÕ"9£Ãìõtò:WŠYÒµ¦«Æt`¨Tœ¶É§¼~tiHg:Ò¦²@‡(¼ ê<¨4ÃÝ!4£ïŠ- r÷ra•ÑËÒ¶:·Ðÿ8pÕÆ7BßB›�à:ß²óŒìm°uJcü+zwc–mËgïõ’[Ìõ…M|Ÿb¥US�Ïá¾ÌLœ``›¡ˆ��Ü]>Píœ¼!a�Òâ0UdOŒàbLÆ›ÌÏ#,ðmùÐwfÛ¢l3o–JÅ£”—	c mRÃJ¨ˆ“'¾pøwÊøŒàsWŽ=·GÁ¥à~ßvÉ>dñÉ‰#5Œ‡QS×o^>Ÿ\Û–6kæîÐõªë�®Kô©­`^è»ƒ…Æåñ¢´•%Õ KktÂqù“¿«3šÏqü?¥µÝ¾,0�gaÑ÷h£fðg‡.þøô"{1×1]äÎÙ=\¹y²I$›9F,0öew´ÞÏ<Å„&2”ºMZÃŽíè"Fµœ+§Ktð+<kƒ¹8fˆód9ˆcÝ›‡"Õ¼o×L…×&ío›Dk,jîÕ–ŸÍïû{!‚“Ž<õ›Ä‡ x“c=N|`_ñè$ðô¢˜µ·mP�Õ€ Y[Ú®V*L"‘AfŒnêê;¹’®Uu—Úía’í`4FbÛž]þ&ã²n0è<�‡„è�övòUÆ!	ƒKÞm0’,bB†âqý“È#¸óÓy#,Á÷iÃå8Úû¿G‘ÐÄö:ti¯7	 É0’bJ%=Äá1Í”œõ | ƒ·Aúôyéæm7Èn8„ÿÙ8SCÃRÙ+\õWzÖþÂ–„ŸA	q…z&7dn	FAUU™•\ Ó±Ðó„ëõ‰é#,®WìëßõëÐõ³€Ëåçç‘ê—îufÈ˜úÕ#5ª¦5¾åßO£ÙËq÷d�Ð@ï?#5�}ÈsòM�¢™¨1Š‚qÀ6'#5Ìh,1Ð#5À�€V,ã»âùSwz¡$0vôÁdDîÚ¦&¤#5~¤)&GïÖX‡ª#5ãPÓEÄÌ~~EGÂ‰™w#Èûpz	b!,{Æ2Ió¬ü›ª¬==ÀâŸ¦ŽWt�|ttX?©B£=‰±	‡²ï0s0#Â�§ŒÄnüNF¸¾�x	êÑB”P”4'ÃuöKç>Ó<·WŽEâq�©�F¥7bZ,U€NQ õéªÜk„ÑÃG³’£[tŠ3ñžœ=`Î	@âMP@ÂÿQÎ£Åð~¥ÄÊ³õû~<À;Ê ôÕxÛV6ðç9@È�ÈÍq(�Ä>5~u©ƒµ ˜&•Ô+¬¤»×†k¬ßT%Ð¡ÄòÞlaPøÝH^Áø)Ø»Çl340Í‘"ètÏñÙ£Žv#,¹¤¸�GÉã;³ Ï0a		“{Ù*T×38Go¦p©Mîø:ô-¾ÅÏ1 4l}L:7{Ý„TìÉ[ú¨ejÓÔ�H09kÚŸ¥;§g—áÐ]?¯øbHã¯”’IU_Ãë˜ßgØÌ63†#59P]³ËhcÀÌ¶M"ã0dq!†Å‰“a%£‘……–ÇO_2á‰3–Q#,|ZhdK�f_5Š 1¹Sß<zSôû}Èå�a©�ú}§«H€(%í@ïÞ<µƒ´w1Ý1åö˜ÊS¸’2¡&zëA£ž=ÜÂËF ƒô$7mÛ�`ÛÑ²6œV`Ôd4î`VË~‚fiÖ�<…ÄŒˆ8Û|Ûbç$CÎ+!*!h¡ÔŒËÆÉŠ¡W®n¹«àÃÆFNeÐUÒB˜ÈâˆŠqfÆâjá¦*ÌW'±qÈÞ†7	µ×dãpšXìá°‰fÐü–Tß²kfÌ‡a Ð<á¦@w“±{qÑMfuÖ�ÚK×Â=ké?^½F**%¹Ó™XSMŸ__@î³·ï�ÏnüOŒ—i–·Óë<t’JŠ³pëA7ÃÃí†²r‚Ã£1g åßP¦Nð£Cõw.¼½ÞïÑ÷BBL�ëì‡‰±ç(ëÚ!Û§}�!Û:ƒu&í‹Áu^4ÝZL° ‡|”’uÜhRó/­ÛhQÔXÑVôºîO‡Ñêœ…HŽå!=Ê¾ä?>]_O³¾¯Öt‡Û¿§Ç§Ã¡é2Vc³¶ÎÒžõÃÜƒáãô‘P‘úñÏ_¾5$&¬@%j!ÎÜtÛ¥PÀ“ôà¬#5*î”n)Å\D˜T³#56—&4Æ6�`6�¦5ô~÷8#,!ß Ã$"‰œ!1§…à ˆ(œ:Îs¬•ÛÐ óìƒg:à²yœƒmaî$	ƒaªålðŸ°,}ÇÂFoÙ{Z‘�©pµ«pcq‚K–ªž†¼µ9ûw€D(w›Mâ‚Œ:u:B~ðõÞz“<µŽ§ZŽOCaÚÌbbSë?;°{×Aø"…íP1¢AJ8Ü?#ÀS>†Ó³<œûuø_	¡>‘ŒùÎF7m5µúÚ¹) ¹Ôvê×m]&$¹nŠÍ™è#,z!Ü#5‡³Þù=OÇÔ~ÖV-œC¨{ê£–‹QÐÂ=V1Á§?Ô÷ˆÑÆ{:Ê«oŠ£ÄòéÑš„¿Lç#]š]ÈØÑ£ 0�E)cÚÄ¡¥B½¾ÏæçzÚü)YÄDl¤J†”(ýufÞ…£’-ƒ¼²Œ-™»‡wÈ8-&kˆ‡--h#,–MF,‡ŒRóÍ“\aˆÈt�;°�6#õ�£I’ÎƒIºrýCrF‘#Ï!zÒ�…ú•QÂðB'ÉÎu÷S0Ïo"4Îq’{Ñ{;]1ŠŽ#,Zâ¶7éŸ&­<k=Ç‡³¯ß_Éos�J¦‰RoµÅ&e÷è¤º1BBI	C¼5õþßõìŠN!5†^g{Y†a¢÷u³¸é^Æ(ÌÀò`gLA=³’¸$s<4pø.$É6�˜å¢@Â)6“D�tÖB,"j<^åÅa#5",ñyb©Ä�˜Ò4VFa&�`3	‡d5Ô(<DÞÈMU1›³r¿1iÇ4ÞöÎ—i.øçó4©ÃÊÃW:fö`Í;&S¹uÉ»Q3CÁ—´vX6Á¥®1ôü(6fÝoÉºqÛýã©Š¡¯Ì33¯7§_‘”Ðpblíµ¬"­lîØi‘ägã­ª¹ã8Ð6TWyx4²±#,ÖòƒËÇ$pjd,I y#Æ#5ê¢ÚBÝÅØ$SnCHxÑ	bˆ­wéúñäli&v€²#�xËan†¶ùT-î<)µJº¤E™Û’¯bŠ&ÍTiC" t;ü„ð;›ŽkHÔöqï|mR�ñøJÍ³glbŒzÓm”yÓI™ÎjÕYÂT0ÊÊt1Ÿœ7ÎÃX&Nh}YÇ³á'!VÎø|q�ËMžžE¶�SÙ´ãßWAOëÙV”%ÜF3%Z¶È§H&Îá³ÝM¯?^iÊG˜^e°7àþ|`$Ït°Ì‰ˆY¡P�h7žZðêh�„æcÚšB‰)$êÉ¸ªÐ@”(D=&-#,ðtU`±&©¾Ãòç›#,`G‚Cƒ°nÆI$idìi,ì�	È;]'µî0:N7–¢®BI"–Hš�Ì-„›¹sëz�ÚÄ¾¶`K¢¨á=WO><¸x#,ºð{À)¦¤ª°9véS¢‡>GÀ Ü‰ñ:õØyô2ˆp÷†!÷o2ÀÀ~?>Ü¬áÙ9�Á˜1¿O›ò.5ü}§Ï·§^¼ùíô?a”‰˜f¸nÞ­|4J×­·Ê)‚½Ú½äpótvû{(àg»Ô‚Š§¨ðü·)Î~z.î¯ýG¸îDˆ%4{ì}â{{‘t_N>á]äüud¤f¤ç*×uÛ”6ŠÒZ*æ×-¬•¶-d‰J€À¨@¥‘u*08°�íN©rúµ|·÷ážS½òJ@)A…W¶yb[†	SuÞ�dà&m­Ï´sy$Ì½l…Ã¨rîX|eJ‡aŸqÌ}ä!BD0USã8@›mÍ2JÊT4Œ¥,Z)MTÌ� bŒ)�ÒlÉ i¦°FEdÅJ²H–¡4dY²Cf‚0J&Å–‘3)•H‰”hwkš%…‹*›&”©&#3"$‘$�ˆ"ªÂ¼‚qÖ:'C×ÞvCRC-üYÁ˜„Ò4Ø|¾wQuI�Tß†º¸F#,4¿#,Z†M+öÄ(7C„^tÖtx•.rY¯Xf.KôÉd””5¯‚`s£ó�¿#5iòK(Ö0ÓcÏ»‰Ã±Äï#5)®ep¦”úŒhf=îJì×9i'ðEX·Iuan1ŠÅOLï{žGzk6ˆŒ1ëÙô¸JLW°lþ2` Â³+GRŽÝðÓ³5Ü3IÍ�TÎÎ1yËdƒi±¹†3áq£1“«6µdæ¶ÛcH°þJ#ŠlÄÉïúKHbÌfF	›i*M)©2’…“&ˆ‰»��yÓs«#5’A�¹(üèwùÅ¦ú5Æ—�,Ù¬ù™úk!"ÌIÁ‡3�‰÷c’K#€“áô,:+né»<‰'iõï$CÀë¯{²¦fï£é`ð”Áø×s’ÇªßfcÄdŽ²Íb.ø”ç÷xíMjÓ0Oß Ç-þž7Ý‹åff/|ÓÇæíÚ¢û}ÁNt½Z€š;2€jÏéâ&5#5˜ºcàÕJŽå_VfÔ/¡Àîé¢©@	‡ßü÷ñUXézœZï5~&7�¥±›Eò¸xžªmþÍm<�QÛ7ñ€¾æ‘ºHÆØÇ'³$ç²*³"÷ªW5˜7+W¼¿3E±dÁ K8ÐsSãÒÝ¤ð#	§ÇlO{¨ËmQ¢¸ÜÃ¾|#%ZÑò\í.­÷]Sš7øÇiø¢Û_Ëžós¶h9Ñ´bl¸æ¹É°LÀF¬¡EZì#5ÎMÉ	œçŽzD€Â¡™�º,¹–à‘cÕUøGlóÁÄVaB}‹[{@=œ¢ôŽ•âæ#4?‡s¦§Y6F¤u\Û�)ƒ}kº“¶¨‹6þZã;S¶Ïª†fÈ™„ÈcÂ> _ñŸ¾¼´Ó„ðíæqä(Ñß)ŠLaB ÓÅ›º‡ŠëÁ5^èÛåŒ$}JÜ}4µÕûuÅ´Râ¨Zç@œ$ô=Ðl¼° Aïº<dFðÈd*ß‚%}ä(¢ F0Ú	\4sˆ333E©NJù«³8Bvu¨öI ØƒÌ%)�6GT�yìÛ¦8w�µ¯Œã>.ÍÅœ#5eGëíuß¸vF�Å3ïT.zûPóEí{{¾ÍI^ÐÛÐPœwWÆŠ/Fü¾™©ˆ”,€”U`ºH,IsC™¾Ýyž(ôÀ÷pæÜv^gävxDb•¡Ñé¿%èE6¿p‹™aïéç	P{Ù¦MÁƒƒqfûCã»qíIãÛø¨>_O«†Ðõ%$¼Ûæà·ŒeÑE¶ôiÅu…É1ÇYœf°jîÐy&ÆcÆ�M-da½Ë]°ßÑ³†f¾§…å›Ê™QÍüÛ¹6Z>’ÞScLé†GŽüÝf3ž°¯†—.zHÃG	…rj¬ÕY‰3drÛIÖV¨ÆMÒ[ Ì˜ÝçD¨f³SLÏ×»Î¸ÛËrq³C@ÌÈÉZ¡iâ7°ö’.–!¯fÁdÖ�¡U"÷ÅÓ“VœW`Žgšu�WŽ¼qÆš�ˆð‹Qˆ©NA‚d|¹K)Õ!`7¹÷ç{Ý3H�FÕ1yÚÓµ¿inÛ—»ÁvÖ�	‹”ìÌÖ@]ZŸt5R©ý)u§ße�"Î:ÂD³º�5²-ŒCV•Oaì8õM|Ù]!›PÖfnŒNt	f»�vÙÞï²k±™Å›÷jŽ”ÚU”ÈWN¦Á#,I«„Ñà‰U��Ž¤pËKa”«¬=Œ0ŠˆÉJ(dÂ¸pÂ?#Ç~üî“�>5»CŠ»‚é1<éÍ�NŸN>ñ¯þ{Xþ—q—nx¹›6ÆŠ‹¦µŸ,S^T�Çæ÷†d€.(èfŒs‹XLâË,2ûßKc&MAÎqêæèÝ%«dÁnVƒx��Ñ”åËõ9Ã5¶N®1¬ëmAº�Ù.çxÚõv‚RËß¥á1º}ã‹ãWãl—%€q0�ŒPÎºE¡âŒÃtT[EßÈçcZ¯šR’¶A^sUmy¿:4Æ�º†-wåÉ²PAÃj‰V6~2YêÞ�Î£/ƒ7ƒ½™�n•™Ô¦§M›1Ãdj(³n¢0ÄvŠS«[2SU¶wCˆt”‰ÖS9.îIHÑ»C«Ph²Š^r¬#5%éä6Õ±¸X®�ÃŸ1�ÅÞêPL¤ÛQ¡£¶Êf´Ý]�ÎœÓCÆärh†KmD‘^€âã#,p]3�ëË¦AhnqQËÓY‘³VrG½Ã®Fµ4ÕcvVQV›¯³9k�q=5èp#óÁ�Þ"Í»]ÚBB\p˜Ùµ(I¸!1$2Ðm}5Œ»Ý&Å£�ò< ³²M‘¾,ÏÎµZ2öe21m®ëÓ}eÞ.\ÝaôÙØ­«lÞîòm”YH®Ï¦	ÊààÌf.×}�ÛiÖÒ?æ-Œa±‹îˆÞ˜É’à¡!N¨…žDËÚ¤aÛ‡–°öç)fu²åA†�Û†ÂUa4³í{	Sípƒ	‰¦Œ>ŸPr×�f,&‚UöÑjh§tYâ™ždQŒÈ„!	C(…yB‘mp¸[’ÆKÁ­p[[?`T‹˜“[»Ã–WN!1r²ã»»ÞÅlž*ûú_Ç—30Í…\µ¡ªñï;™\¤è§Iàd+CéA.Rü%Ò‹>s£æÆï´�oK«r—¶‰lYN�6hxÂ°v6}r,é-P„!¡ÙGÙà>:JØð÷�¹«"ö¹iÝ¨Þc‰‹L,«•.�â˜ÒÆõÓÄ#o„õ©c&T°ÓÅ6÷§·�FÔkdÞõ¼fây·M¶`ôÄÖÛ‚-.‚©ESÑ‡�4>×´]ÕA2)±›ûZê�ðïÓ/½WeJU#i‚$V/6±C„j7¢UÅÇr§ÛeÇ5¥0Š1À’…›†ðŽR`f‰”Ã„ä›ƒÇ.Øq±œË\)#,,ƒiØˆV0ÖkÄÞÆQéå­]YA´¶ÒçxhrhÁå$sLáÜQ-#,+!u·£L“'8pøÚÙ›¼è†l£\µÅÝ6usrîi¡^fúšé�Ó•ð²<¡ïD‡'H½ò…XH1¶fOcÃœZ­å¥]zÃNÝfAA´˜6�âÆ,$ÍU èÍ!wáwÈÆÒÄ´sq‰œ¼ñMÂ¾_/\etQ3c#,¶ÙtòÇ9K�7ÀrÜ­ŒÐªâ*Þœek8ÔAäÀÒø‹Š1µ·zŽÕL1@\é6µšPÉÛˆ¬VÀZðbÖçŽ#5f‡Kx6DÐŒ§"é‹"¢šQ(ÃÙÞ©S#,@=#5¥Ì	!®™Ð–ë3fÎÄyÕh«¸ÉrÕuÇ;À®ýo¿º¤å67ÂQM%z¦Éâ¬éãs}‘5 Û{:óì_NaÏ´Äiˆê‚�4�`5ä0;çkìÛÃ”ÜnA†˜Nó¢ð¨º‚¡]$Zft})¤ƒIb¥å¬çjhk¢°!&a!Ji‘v§	Övz Ã�R�¦´ädÐºˆ”ŽŒõÑ›‘F3:Q‰Á3+kY0"�jš•-…~Q¨1wpG$7NfêÁ¡´V �qí¬a¦Œ‘q\#Sˆ†16ÎØT6‹Â²…¸ÝÖRh�³NÛ¨¶S2”êÇcÁ¤r5�Éšï¶º=05¹&Pá†4˜‹s‘ÎÔ¡§¦HCc™Å:5|E¦¶ÒðÈÆÒ{‡F›)Ì2XXË„[k4P“T¬ ú2:º@ïc°OÚ®�}»$Ý›q3ë\´Ž†á>ÀöwhÒ‡CQ�;óyi&†Ù5j!$æhU‰¤=·rö8Óhæ#VÓ)AƒeÈ�êÓk,æ^»j×º³íÛ›#,¸Œ	œ0	Ó&Ö.×@ò9ÅîDÒ#giYqJIÆ}í0—Ž5{-DÞâl±›ÄÃÛ|Û<ÅÛr³$è/ªm#5ÇR?ZT%¢[ÛJÙ\*Þ‡Æ­˜O8—¤_.YC”"ûS›± ÈŠqÖITF5°a¨ãÓK¨ZŽSN«’Q^®{bèÆ»X…Õ¤¨Í09¨µ‡�B8vÙEÜÁ‰¿JX,�ò˜¾P•„Ôß¾øhp,»i¯(ee!K¥\-çn’»Ë¤×�³^ÕÒÑSˆðöQ&/$êÝöaž$ÉµÐ2çaœ±j9ËÓ­ŸçQGIŠ1c<Æ"!¢t…Š¥Ü`�›^H‘ƒ^X¢j*‹H)¡(Â£Ð×	>„KAÆ4†‹¼M&ƒª—‚*ª•]#,M9™#,f`‘Ä<ì©ÆA9‡WÅi»Ã«œW`ÀØÁ§½;É9	Æ7ªÄé»’GcÝÚtZÂh¤‹Œ"¶²Èº:)#,�Õ&Šçy0jš› q¥0Xm½ÒQÈPm”šk+Fxnláhð.ŽÆÏiÒv†—áS“£±9ªöTÀ¾ÂD2n(ixÎÀÁÉäq�Ng9Â&wš¸Wsc»š¦û�ºW¼‚�!HTä2(h@æéD}Ègúþ€ÿ©Ü�ž'TçèROtVB6b¸ˆÌÓ�§èÝÈyÉñB�'~"tñv?Øg·”¾°tI 	0GA¡Ë)R"l#58{Aœ˜Õf@ Ç0\y/41ä-HcLÛÆähcù‡:¼§íÜ\-u·×¶îm½d]Ÿaãej¨ùÃåúé…f(¢3$—×…‹•”6ÕÞoqcÃ[;&÷ögXÁŽCR�ÏœÐøÝk†¡ÃãŒª�CC`êÐ¹M%EP†Žéæ‘Ž£|eg±?go.‰ßº¾EÑ%Bï>Bg|l	+Ø=ÿòàšJª„DýL(QQ 0"áŒ0TdG€­ 6ÿ0íCÙ0Û‡5ß»Ãwk†;#C^”J¨<*LÆ5ìj„#,qö?�tMÀ÷!‰žh‡â’Š(=;Ç˜Æ_®TËê�Ñª0Le+Æ`)W'öÈj? -™ Ô�BW_·¸Ojè�ñ‚.{yœÄC �@N£ØËº �ÃÒœIÄ¹®îáð¶²ÀÎà=Å“à;KÏœ6?T¹$*ÎÿØ­=Ó×ó¾^ïùZ¥§ÖYuG¯¤~#,a&†™ØªvQâQ7kŠíwf;w]+®‡cbë®k:ê×qwQ¢fâ½Û¼Ó‹€‰�(ÂhTˆrMr„@Æ äß 7#5ºçIá¶Ð¸¨N[DÔ3±¿ Øo±¾YÉØ£!e4¾ÄÓ$þÏ?ˆ=ŸSÞä­ÛX ¼–ýôèœÄö(¸w#5ALÀ�	B PÒ4´¨é}O›ùxÎÄ¤ï@ø€wÂÉD> ²v ›NOXCÔÎ¡T'•ÓµØj#5DRJ ˜èIŒ’0©I£10³0˜Ö`¸É>âQw¯…™9IúÈü¿_ê8ðH�AJ4Ôó‰K÷>uG‡!i<‘lµV&AJjEð:ì¼oüâã¢ËMôç¹#�DÓLl�ŠI$‘xºé®wn…wx�Ìñ4»¶è��)¢’PÙyîµ+m6Æ€é+ªdÔƒT#Ujàl€Äªië’Ò~DY„ÌÆc4~E)XÃ#qDF•Ó8js'.Ñîùbta»ÁÙ#,0l&æš¬Ø³¹ŒKà!E•Põß~¡ã“kIm„mé¤ñ*¡…)áâ°ÓAZQ‘ªDŒNŠµÎìÆVVŒiAÖÃÂˆ(ÆÆÍHªÕ…ÓV(�:1&0czz:äØõ¬Çüª#á\âÄ�I�ë½D£)›2På	ëõ‚ôâÉ±Â±4©w(ÓŒŒmäãS2)¢`Ö@�÷ïx±ûÍÄ½”cèÀÆ#,Ûœì…6¶XàWðöÒµù¯‰‡Å�3"Ct¿9ò�	¾ÉŸÀJSB�‰	m‚§á¡àEBEåØš Ñ¤gO»îtÕË\#,¦ÑôL(~GìsfM°«îöB±±aÑn§Æ¯&nïFþÌ+U†‘Ú—Ûa‹·µG;QZ’Fº63“§i˜Ç–¯±ðø:Ã��à·½ñ‡HYev_¿˜c}bž#,œo·ÓÖFé�3áÆu Û1Yk$l8k(bœõr·§½”Ìt´1Í=7Ú4TšÔ«³ÖÃ`dCjGÙšZ³üö‰BÔµçfÂ½�‰§dÐ:Þrîd�^YS8'u|ÀÎY”éó-m<ÔÑ2j�²b0é0Ä»š8Û„ß_Äå†—ckÊ°…ÀsC€à6d|6RnšC€4r‰0xw5Þt]\p"šv4;ž¹núäã¢¤/ Ò4€*ˆüÚH›;�=ý{N×ì”bçöéÊ£1)O˜’zÇÛ‚¤†X|†hhçøl]†�ÖCá jläá#58IŒ(Šçä3=ôüÎW1ƒ6]'ÒÕgLV†AÌ’µ~Å�UíDAs¡ëJ/j-FÖÒz¶1ƒÜ<�püŸÆÙ¯d`D|w·6p÷a M�óâ´£ )Ië!Žc¡=gâC~ÿlÕ_†¹ùV3f�'1|öeÌDâ¬Ý,Ddß/aË¨°œÂ%aÿ¸[%!­ÑŸh¥�æ«Ò†!T&ÝUsº¹PeöxcÆ öå"à|–ñ#M£©¿4&ÓatŸÔ�4Õ® cgKÑÆ‰ZÂ”r¨ãn1µ¬Xy!½ô’æèuã/N8ÆpËÑ­f|�ƒ5Îél6Ä¦Eµ«œv¦t77	ƒ²D"Í©‰‘‡!Ó`Æ‹Ûûój;l]£�Iró{Z×x¼Ì8j#5 ºuJÒQi�¯ YÇY¨$ºTðÐœ˜³ñ#,Öï…WPë®“3D:ÝÙniÂÉåm’(>Ì×Z„m„áB÷�zá¨ö#,œÅJ(Æ˜y7«¹Q˜1¢RÚyìœ�<“5¥Õu>G@O�»¿GK¡¬Û ´s;<ñÂ��T“‰$(O–a2ý½ÅÕ¢­@ò@Á"°o$²Ñ¶™†¨³PI±'ß Ä%j‚Z;y=�4 à q1%!ã!Å©h'§øÁLÅŒ©;}þÜÕŽŽ6šH1²Jzv–®YÅÓ®×8IºS7+¦és]nÌÝ]\·uÜ-“¬g™\·]vÒUxÙ#5Ë·Nuù{ßdõÙºíÇ·IWµvM¯"e*È¬ÊÅB“­$8ƒŠ��„¡)"S?/OÍîó»ÁåÌ[Fa™cUdJ’±šiƒ}�×õgÌ'EG\În‚P|Äà6b7¦ ðLJ#," ž>ÂmpˆÉ'ËÐ åo¤OsÔýˆTúûyo!…9`÷oJ�’&ç3Ë ì²Sç22-¤¢dÑÃ‡ëÐd;TÜt…ÆbBGã�_i;�.Ç×ö~”SN}e‡?Mœùàƒp'#óhéýl¶.¬¬D¶(¯4™Ô[smÚU<íÍ-FØ6I€L;°Ä§ÖÃq¼ümÂâÊÊ%ûC6™®·¯ô~œp:îq®þUÍ \U÷Cõw‡#kí”1y‡­‰^ªªÛÙñ bu	�#50¥ïæO‘#5Jó”‚PšA”¨´#5‚‰ˆ	Zí‚9>.Ãòõjª¾h��#CIÌ.šÁòt¥Ð¦F›2Á.�ãéKþ�ïê™´5öÿMÖÆèTáÝ·5ÝË©mý±‰F cØ …vš{ëï:ð‚®®|ËÜï ½ÝÃss¾Í“{ÏÌõþð„Œ0 €B W0Ã G±ÔP"Y~È…�W”w†ÁÊO1»¯¤ÄSPšîÜ5#5P³0J0R�Vzì\š™^»’Û4É5SBSh›uÛtÙ²–ÒTÆ£*kQ’/§ºi5±3alÍJR)V„ÊiÔäÌ€À¤mo&¡€gK«¾}.Ú”=–»de¢­ƒm’µô·$S*U~2µÛãÕ]¦…”–²[URbµzk´¢óº–ÑK)hÌ•�ç›ÍMdifšDÛxÄZ•…©{ÉP#5!B	0jR­&QŠj¢¥½:Ü+¬¬nk”R•s]šH­b™m.]W©]I�Ì%ÿ;pUÿHÙàß%¢1“©k*dsíº„-·iÑ¤—-!lýW§c[ ¶ ±B#,P$¤ïú¢�R�ý8'á{¦ŒL±øñÝýóØË7¸{˜Lz¨5�Qü¾¹z5¾0å˜®ß¬ÑAÎD^rœQJ“E�4%›Y‰‚ˆÚ»¸`X K’€�’í™0Àç« #,HPYCAR ê;¡L‘t’œ»@C–l#5¾ìt0©Ôf×Øm­à£ZÊSh5‰²ˆJ‡‡°]	2*Ê�H®Ò¦)QLATªÚlcRJS2Š‹d•�YFm”É�©4ˆP’Q%’lÃKJ”Ùdš![2[¥c@ØÑ¤CQ$›©A…i ˆ!‚eF"MkÒB/ZcC¤!Œ m( 1ä€Ñ!óÂè„Ô«¦AMJ&¢„;¤ÂDPä>ò�SÿÁ†·KMÉ»za¥Çž{DÆe^ànD&¯GcÕ6Œ>G•o{3ÇìL¸;HÇˆÓåF”#â³¹Ê†¢ú�§¿É@X1–>'ÏR} !”è!�Û¾=JÖj{8%îÃæ<SŽ©óyôO69‰Áäx"›ÊºÍ“"NŠ|¸Ô¤B—iG z²2„‹ÍÀ>[ü yïN'zp(ù z #’�˜ûÏÙžg¤2{/ÀïÃî›Ò .ž£×ƒt>¶O CT6b–0ïéã¼›ÇdGìüd”x,Ò½Õ©´©&‚w»Hö„/#,ªpIGnÌÕe’MØrŸÁÎ„}‹.ó#,Õ9åßØ²¹žµ‹	ç¬Í—GgL¶ ý‹ª;ˆ>ƒÍ¶¸LÁÂù7'°P‘Ó*5ÁÀ‚æbvsÈ�œ‹“M&Àèš®O×HÔybƒq2�£¢<f^Z£qÚ³Y×ñïÎ­þiÆ6ÒÕ¨Û®6Ë³]1#�Æóhp6¡Á;.øÐF£ÒuÆ¥pê›Ôd4½‡‡O#ü=`‘¤}	¥õÁ¨y3=áuàR»$Â…UtÕÄ�Ø‡’I$’I©$Ž¶º’;¶dèå#5do‚RŽHñÆ¸²ÎÃVÉ"�$*`¾¢-pÛ9ëÀÞ†–E„š>ÝéGSößÙ¤î,£žÛY)�ÕÓ�3õ>c´U>µ¹‚À$˜„:H#,”vÐ,4.µZ¦[~¡™ñé—ÎßBç(l\6¤ùãÛv†»}ÖáWNÃIôa¶ \üC¥šíâõô°�SRöBØ½¿j†ŸøBœ'ü?ñ"�—šD}XDØÓDchŸtÈ¥$`™TŒK´9j�^rVø3C2&æBcZ#,Reˆá.¨ª¬6¬"Ì|½4‰�Mc@SùÚà±#,§Ä3YÔ`¸uh"m‚ŒrZN� ør(Â)»(4ÉÚŒ¬œ³T0`›Óƒcò¨%ÊœˆêÔ:@Æ6‚³×ÉÙë~°t'â€C&Ô ÃÙ'Ó¤#5ŸÌÆb„!�›t$lb¦i}XŸ“ÎçéÓf÷Ö¥P|ò¦MgeM&êž›�I9°‘C6·SI‘¬s6A€ywé«‰KìÒ]—ÂKÐŒ	>ðÒÒiHo/Eÿ|�Gç3�.2�°©?Ä1Ü*àÆ{M_ÃÙæmìÁº›),›wÎÞ‚d„”m‚ï4¬/[SWévÃ”i	$IpÑ­¢(ˆì…™b6ŽsKÒs#n×t¤ˆ¨	±Øúß­-÷åõ³ÛÜA-3žI¼x‹ú‘TQõ÷FSþäÀ~áÈ�•à�®.¤“(Ÿ~ÿ¡Œã¥-¶jóVQ-„¸D{–©28ª+æPåL5i‰Ãa„6–1#5KDˆojŠ¨AŸ<HïP’ÒEŠ¼LÏyG–42tãz›Év¨ª“lˆ¿QU®�ò�œRg"Q	Íˆ«;c#,˜+åñf+‚XÆƒP°KÄ°êuuš²ò#,vƒ^Ð£È@A `sÁ9Š˜í¡è†yhcÑ’‰P�{ÞÇ‡å±®R—A9¥+ ì¦‡‡J­éüû8xÞÙÄIaúM�`š0Ö‡9Ôž¿–Òww]-U75�xñ>®ñ×@#,Ayêð�)ŠAK«­ˆt•Ë‰ÐÝ%#8AD‘œ‚ŠT°£ÇéÇŸeUUUzaÏåå#,=d„3}Í�’6¢Íá¼VÒK.ª¢eßý;yÉ°æƒ�1gyÔ�ãB,!BDY”9<Q(L°‡ÎBã‰´	o¯~¯Ë ìI§”D�8Þf÷õðy[y÷û÷¡SÞ’'{àx"”€kénÌ¾oeÔæç>ä½[zïC 0Ž$êuJd:0 ÛmÀˆ�±wsIXÑ�ƒ¡HÐ;‘J ]lC¼Ö‹•át·* ™™ZÉp8ÌHËF<j&¶°,±–—2&Š¢ÀËl#,&�.’S˜sY3¨*ÜÂîBî/¤KéúƒÛˆô‡×ñ×¹ Ä»Až¯îðé›FRo�Ž—DëÝ-†ôâ_ð"K¡Í²Üðh°4³Aùö î1ôs�@5Ë_I1ãËô9o’âŠåÃëöÙ?�Ù·N^§%ðƒ‘ºö¨ñï¨pø.$ÓÂrî@ÛÁ°Ý*I ¨Š‚*ØpC¸ë>Bv1Ot;E¤Àa™Á²¸s ƒ@	"Q/ƒL˜ikÙ†à²AHF¦HmHfH1«�qˆEF<Ê«76"9C)‚%ÕÙMÓ‚ˆ6Æš§gDä:e6ØÛ`&q�>„\=`rcu÷�y‚#§á:…`"" t i¦”Ó^5fº©WÂœæñŠ®]7h›	ÎpNÖh¬&ë©è�¹Ýf›p'©¡ˆÈ¨ƒgç»–¢rf]tJx¸¸éWþ:‡&\A”ïå�)(ì…Nrè0¬Èª()urÛPhlÓ-GNîµ·i’%˜h¡Rš)€Y6$]AÙ?|è%x•6€5*WÕ&B JH o œö™ÏmÊòCZ�¦�F¬,Ùb>–4ö–È®Ä$YÏ­pÈþ1¼Á(µÐhªL2D‘@÷µåÅ×O×À’à:1>é»6#,+³à‡yñ©;à)áQì�ÿ¦>@#5Žûñji%>û:»ó¯1½¢Æ+ ;ŒL#5òêã•)Êõ6Ûc—Ü^­úÛåQ­ÎXÖNS—mÚD4 4‹åÛð·ÂyíŽNÇy¾ÜÞÞt–×`¢€éT2� ÍÀ’ýÿ_Õ›çÌáËBÒ¾»7�ª Fâ©ž‚þžüØ.¾;™ÞÒÛûû K„‘ŽÁ;ƒDêê ·ôüçËm÷&"	@‘0!<'ˆ9â|b“‡“#Ž{)P¤Zg¸TF@'`�Rü½`¸WNÑWk‚šVˆ†�ëv{®Tét½�¦ŽQÐè œ"À¦ãÜKHß@ÄIõºB‚¶þ=ÊáM”sÑ•D‚×¹ÍåUÎ¯Trcå“fAÊƒ·ÕÁQƒ³9[ûn¹’5¶Ôhý[ÉâóbÆ|n˜ûüþŽFnÍ­� o8çí?ßÇzíÜ®šSþƒ�ÂL t›ŽÉ&œÝ¸žfJÐ ö~wÜO·õ¨ÓäNïaÜˆ‡÷HÚD•À…÷Ê¼èâí"¬J› ›Š´ËÚo.ì¼'Ä:ŒQñE*%0R`dÎÙi°y�z�G_ËÙß!¾~©ÙÆ?]g§úÂ	«¹ãl}=!bJd_Ààáþ¥ÎÑÚÓ7Ú5ÿHäÈH0 @€g`2 CºÏgáÝe'¶{µ–!‰:"—yW �òÊ8ø+áçøž†Ûæ»]Þ+~Oga�\A;`ä—ºÑT9Oz½È{„\@P@í@]’§pÕ^[°´#ÎDd¹în4¸š~Ý�¶¯�kû !â�v(¹Oœ‘ó6M‹í_Ÿò©rÖdŒ@Æ“þU?·w·Ó[`Ø6Á±¸Y,Â…O"1’D‰»®¼:ôj•Ò½Û•ì×¶xÆ±{J¹Î¢f#Ä›–¨#,h�%ZæÆ1ÿ")ñ7QTˆÛ•"Cf0H‚kjUó‘Q€Ø,c§J#.’´8ÄCvU$2"4¡Ý�ÂS•½�Žo&öQÁŽnU˜ÊÐ¹!�Ä™	ÎLžR;Îò›qbH™òokXd³¬”j7„È% #,å#5GD„6Íî!V�”d€FX6$¢MÃ/Ki¦Ã†L+×3y•¹bå˜bâ´¥n#M”#5”9”Ž6¬¡l.Ý�¥Lœ'	rJ[2˜Š![–#Û¦2Q­Ícs”ns[¦¾Ãoon¹z!‘¯mÎÕ&phè#,EÆÁ…’›&³œ€ØÚé#,±D9J,$Ìýú»Ì5`áƒi0œDFF¤“QV©(Ë”Êe&N4Ç{x#5El1Al~î”ZEJº…±RE)¦ì—:ße©èOñŽÏlRO¾ˆš¶äÌ8Û|É>’dL©%ŽY‘†88a”±A†6)ôM:1I$’#,�‡_âþt*LI?{É}UËÿ„ðOvÁ’å ö	ô‰Ô?©J‚%H_¢F–•¦!Rb!$–	’I#5d^KäüÅ‘œ¼ÔîÛ¦³R¢™™i­ÕQ˜¹¹�M¦²o%É	—%2R…¡	H	]À˜@Á 9BHËŠ J©>Ãòx#,Ž€¼¡à	fHbvM¾ó³žàþFBr}QÏÛàO‹_•É7#,JøŒäkûÍŽ¡®�üþ¸Là)"€J1#QNÿÈki†‘r@¡Éà”e²#,ŒŒi,fšw2„gÉD,˜p¡ÑÇãÎ[÷EËãøFþÏ¼ùý�á?L�e;Èå)æGî-¡#,£òÄ)	#,Xm÷Q¶T¢)l7N4¸Ì´Ñ�(ÒÂ™ e¹	T€v:À¢†eNØCi³x¥Œ¥I-LÖÜªÜ$ÁÊSxÒÀ±)´1˜´„‡q‚"�ëßž‹pâ“]áI:Åªƒ(#,P?U!¬ˆZR„@-� }H1£”l LÛ GpÛ¡Ðüi‘´†q€r“nb(\�òÊ&Á¬œiW	51^;´á±žã¯ „Ý&|v)Ü~à#,¡ƒOíYÊ^ûY@Óü:ˆÈ2”>ß@(Q^#5 ¥8Å)óº©C? î3¤j­…>Âïw?-Óu7¹q]Šâ|¿ƒ^:7×ßÌN}#5³‘Ü]Üz§¬sœ‡f…C	Ù6÷â~‰ÌçÂq¤Ì®f“O$2|T>Ôd€/Ò:h?|±#5ûCþƒFU¦’*”¢-HÍ¶VZjšVm)2²Il†J!ddf¿®üNF'>œû'»¿¬%u$Ö±·æ—J )RÙ)Ok€a~¿&~oƒÙO®iãýÿ×4÷=f•ï$¼áæ$‡>@Û‰EñvEïRf‰¢ëägíÑ#,6T#,3Y¼S	» lL™Ü„o €1Ñ×H"j0pÿ€yLì@IÑ|CØ|ˆ{µg§ÒŸ>¸]-$‚"ôRI$	„	!$Ï�/UT¢Å,ÁVß	 I»•ñõ×Ãë¾'H¯©÷î¶éÁÉFÇüZuß7Ê³“£IQÓ”öFD@Æ³%CðïQ8{.GÀuô9tÁ¹9}ò×[„Õb	Aì’`!Ù!	$ç!™~UA3§âibJ±°6«P< ß]žIaÓ93,]´˜LÄl†Â`ŽˆaÌº( ½©¬Ì#5””$Õ�firÎ…hì¹C»#, {¼->ßÏØ6$yž«ê‚-p�ý«1^áe{éW´]Ñf ]	¹µ™“à¿Î¡Œî�{¾7]6^Þ†~ƒêÙÀ‡oÍñ´;�ÕMÛËÈdÞì0àø_hœ(q ÓOŽ¬ö1F,(�¨›b)©©&BfÑ¬jÍl’“·áu)vb³2e%¥•–”VU6…#5JM¥Af-¦&©­330Ìªi¥²D²©¤¡#,¢LÌ$”ÀA/3÷~Çü‡�*ÉæÝüRd4þœvRtT;Å…Ñ#5ÄMýL¸ˆ4‚P*Ð	J¡Jdƒ„ w:`í`‰_c²�`¨ÂP¬CòÝTþi?šJ ýò€L$muïØ¸w�1øü%„0ÀÄùƒmDA~­WéA–»Ç„uÙîÐŸX ™‹ïü¯ õ‘@ògÁ†§ê�Àþ›ŒgÐûÜ0(V˜°b�V†Ÿã…ÈF†’XSä›>àÛÙp;÷Èþ¾ÿ ë›ÜÏ$Æè#5yÄ‘M¬2³©�ÐÐ›€@:6Ç[r6Ó»þ�"�E„9"ŸOÄ<�Ž¿ŽÊ¨{Ï ¾/ÄüNiDKèF7²>9br‡—OW°Ý{TCù^Ì<Žî�>!–‘7AÌö’™úâÉ²ÌiŒà‘çåƒI¡Ñ7Œ˜a,5!“âVÐnˆBªl`#sú†á‡#,Œ†LàãÝÒv¾Ob~d“ö#56~h³úŒCÄI&»¨×öõêœ�Ã‰t�]N�M‡Çãt›ð:û}ó1\›#5°Oõ*gZEý<Âð‡ç�Q­Ç¸¹	‘€À/cõë·©§#,Nxñ,­¯làã¬0Ò‚Ÿï=]¹N®½ÓÈ)?’&Xz%3	Lø´É�ž¶™†±t�¡˜÷øO–4Îrwí¦E‡Ëu®ŒÇË@´;Y)UòOthµò‚j‡Ò‚P’ÓŒÐ‘æàK³d±¨Ïd±`�5^šªwÞT°%š‹Æ†ÐÂ„u7>†ŠCQ$Iår¼ç-ópñ8tç£vL·[vQ>#cM·š÷è;´¸�£F½Ô›;eKíÝ«¦§lÚ_j#‰ î¢… IŒ°%#,Ì�Ï‰­�N\`|`²í”n™œ°"âÁC¾:s1§L{C¾útÕ-T™¯Gá7ÿ+·‹"2Û`&V™‘0ùYÙë/^½^Î½¹EÎ©¤	²@‘«Ø‚@ŽÖèCà‹/ì~hÁ3½vþÑÇÂ`9Áæ@{4(›.�œœ'È€Ä#,!(È ù¼:>nß¨øgžÇcó*ó$4|ß'ÌM…ì9=à~ÿ#58{èø=åëf9TÛ‘WÀ×Ïåëü¥�±?•=P9{½|€¥¦ŽÓÜt"ˆÃˆ)ïßžfpyƒþjŸÈ©ñ@zôz'3˜»~Jú‚|ƒ©Ê8ñMùÈ´N‰"(&T‰·ÁÉbd2Å„8Ü�”>ýÍ[ñ>²ßYR\º§S.µJ$X¥ÕâÛÅ}¯&õÝçY’î9Z±Ð|¯©«§êñƒ>lp*±¨,l|)�¶·¢š·5«FJq™lÐˆ¤FîcÛãŒû!‰êaÆ.q7×Ù†@“/1O5ˆbfaËè	/œ;œŸ_!½Sv_%ø*œYî“ÜÖ­‡Í÷]3üö½-£suµøºªÕºu—sñ¤¬õG»#,rðl	³9	«ÐÚý cÚÝÙ�j‡ãÛv$œhcf™ª¼q1ôpº?âžä®·î²"à�ëð™»‹#5TX~ŸólgPûºgÛË;àƒxNSØB“1hCr’£Y™N‰�˜aÌÎ#,eC0(Y»œ6g¼¥É¸Ñ!Å%Àz%/|«øjCO›!U–@·DÉº–y¸É}1öST0æåóËUS#,À Æ4"÷óÂm<�6³Óå®8«ÀÒ‡…C†9H0fŒ$<¹†ç ò©IäJD�g;ùB½š»"‹Gb]Ï+ g!Úöt­ ´%UCàÖÏ†C¹.üÒ×;¹ˆ�QînlQNCû®7ßñO ä�a¹Àèàhs"‘êºqÄÃÒXyå‘Ý6].ä¦	2›,˜".ƒA´ï6Ne~s“Ùµðêh'Þº8ŒññNÙKÁ§cëûÀá=ï —ßv}@{åYžï>­Ðùœ%YåyÄèyöÄòxÛäÜ7˜ÌÇ§ÔvaŸë„#5bP^Þ¾ÿA{Dv�p<ädƒÿƒ¾1ßG¼®ßù«qMý§ Â•O	š³�Ãc#á;�Ð{�ˆüÏ�„¹=GÆRŒ™|H^Ä,-¶±Â\(¢£#1ÄÌ°	L”Ä	%�”‘"uÖ6¢Ù-´bZVåwWZåu×[ww:ÝÖí*#,#5Ýˆ00}¡õøî8axBý>§Ôî‹ýœíøç#×»ññ²ˆ[XsTð àWpÌW$�£$ÿ#,eþ·ó1cI?„BÞÈ´õD¹”	F@DÀMÇ´ãgbg8´3oN‘�ˆ�”\.UKei Å!$È#52Ø«AÌhÆ‡nôÓÎ¹·»zó±ŽWJ»¸Ù&“hŽ(¤˜·ZXÚ�$jªB¶Ô(+\·<Ä™„bDb2f39£8+"%ÈSPÑ¸’Ý‘KQ‹q-![Q„"mœØ™bJa¡‘?˜Ü1ö:r°/ŒÍ˜#e#,)¨ée`4E6œ�*â õ?«µ=«ØŽý›wÁ=†!“©™6¥UP ú’Å¢¤Ç��:8Æa?1$¯<øùV¢Äà¡]N2=xs“aJYüòR—V—q½­Ýû‹ny¨õù+‚¾2zÊ56I,¢‹i4j#U)Nÿf	�”D8Î£Ì´Å)„Òdd�Gˆ�9§ñž‡ÞXhÖÄù“‡¨�${‚�K…nh*®pý~ÃáŒpæµLköpë1¸$h?À0Œc%ª#5Î2tób`5#,dTuuŸ£uiš©^¢×ÁI‰¶64Û÷ÉˆWé×Çð±È½™l¥‡‰!ºÅÍ2ÁvE¤jvù&!5�Ò`ØL:ð>zm‹µC5;°g’e±GïôçŒ£9�çŒpåÇ—@‡X0Do R€hHÁ>¡xQ Ï5Ç™Ý.åJyá1nºíI@éha²sÛ!ãûjl§î~-fò·«ÁÐçýˆãP¥ºu&[�‰8|íf<2ÒqX0ô.§‚ÑC@¨tµ›ý¶2ÙFb;Ëûñ$Bƒg\»�Ù�ÕDMŠ Áv}Ò�nÆ#5µ¶½·ŽáÓlú÷Î,~Z†™´¤p]ÿ¯Òµ«£gqÝÇ¿†š�RÃ<t“QlÄkÉXŠÏSÓùÏ°ö„ú¾a'¦ Ÿ¡çÌæ�ež)ú²}þÒªT¥…D©*9Ž¥Y®Ý3V5møÃSÂ#6Í˜ÓôP‡«€R†í�v³3~ê)RôÈšµ®¿wÙ"ŽÚ&Ží}œq'šIà’(¡“ë¡×áÇ¹­üCð‡.=r>·ÏŽ}©ÔN¦Øû}‡CN=�!‹’‡=b6sÞ›ãK{0Ì¾kh·i£i£	èkPà{-#5Râˆ�Á’ˆ¢ ¦ 5ŠJPÔIökê¼ðãQ¤R‘4~ÏŒK|Ë„@pÒ>ˆDÙøBá%ÏlÂÒ,ÀÀxˆ€=Ï¯€a©ý[n>,°l'ÞÏ$âÇÉŠ�Š¡TÆCî 1A†´L„n²J�L1"°ŠñF¹•SÇI–îíååÕð¦à•FdÂá�‚Óèb!‘’TL*3D'ùý†½åaÖt1ë*øÃ¤:A’xg™§¬3¼(ô¨SiªŽ¼I=×Q1ó„ûÂß2k È'Ã»‡·C¡Å÷Ûs“éŸ_¾«ßñLNt½èevfH�dRÇ*U°ˆ9�/!TÎ&‘ÛE+ j%u(u_á`¤ïNˆüïÇí¡B�+õ�Ë>ó»»¶bo±CÄÈìŒ#,2EÁd�V¤Â0W#(Ac}hR…,JÀL¤ÈŒ’¡ $XªR[m£i€ “Qš²'B§8QI! A¸Jú¼Ã¾W}Sä]$Cò=>ßŠ-Húæ,”åÃ–fèG ä('ÕØS@&”�ØÉò_uêÄ¹yý¶jUL¼Éúßô(ç\aÇué²ÓÖÐ-h>F‚Ðæ$åA�½›ã}M^¥é\·´ìiEðF†‘²´°©B´	¶mvvÎâ;0D=!m–	ÝE¿´/î7µÔêŸ äÃw:=>qyÊÙ4*;x¼xk™ºðkŸ{‡3¿�å>ãr|À©mùi9f,ÉôÅ�×#,÷?Ðî0Òå¤|ÿ/\ô>üÑáõ ,#5-Ü¿Y·�ãÚýÏ.@PàF&Q¯Ã¢=Ûõ#,s}¶kTMàŒ¢A!‰(‘ì÷û¾Œ÷ToÄ�?×ïþ¿=�˜4 ¹½U9°1À’/ÒuØµÀa´Øëë@"ô„bðÍ�•!ŠŸÚú‹€X#5ÖoÚ>Ã÷~ŸþéÊ e²ŠY#5­Y9¸ßS¡|¤÷H}ü]e`R�A€˜‰n6ÐÃ,gÞd8f#,?nsm‡á4�xÛ#l<Ä–lÓj¬ã&0%®¥cÊåøVaõñ>g4xÄ1ÏO&TFŠ*¬×y¬£¬�:3ßn9ýNs�<M÷üÓèÅö$XQºåÔ<Ú^+«IÃ!x×[_(ºn¨Œ8ÉLôóqòÉ	±ˆ’âDÀÃ%‡zrN,0d¢€šË›u³±¡<Ï²v‹#5¡||±03¹…÷äwfñõM&æó'Òæ j~–=K¥ÈìÈA˜À-–	`výcOv¾e/´o-�]:kGbM%^Àæõ_~Œþjšóå‡P&Ù)~?«È°ÒÕ¯†2JC|-L„„t$àÐÎxÖ2Þ#5X#,Ã!Ø,5¿s�-³,Ýre2oðéCbÌv69b~âŸíÁEè)¶f}‡µš"5þØ#5Is}6ã}/_;ýõ~QFð`P_ÚÌ ì•2Vƒµ}©ãÞ›re¾t†áôÉ�4jrÉ/DtBDÐ‘ ©@ƒAJ‰JU¬R™Ìˆi1%L�BãŸÀìÏ¿·ã×õì“Ñ�Ø‘3ö;.Íí¼Á~Iìï�{òà%Eß…v¸ÌÑlhnh7"m¾ <•;rOÙ&øžþŸÕê¼Ù›>§RÂ{¶Üò… ÀOÈ¸ý½å—Ù£ó_ �›n‘g‡×¤B²/b4I#,{dÙ� úøaˆ>øŸÂúÜoï›ÎÏŸû?g�¡T!¡¦.,£åX’^ZY�Ý< ™`S.#,yr«í>à'ÍU7i§:!…ÞÖ�éjýþŸ`	/S¤aú±*ì=|r××Gëe`œ’IZgKÆ�GŽ•ØC2Ñ˜„ŽZâ�=Œ8±ý9S`$4 j§gQ¤œ_EšÌ_ÇôÉ_¡\_"ï û}_ÁïìÞÍ�„Ž¤)uƒ™ãŽfRÐ>³ÏÎìÅÇÎÌ‘"!¯�Uz°FŽX!§˜õ©'[¬8¢º¸‹ÈÈ”¿a0C HY ŽÃ]·%4ºçHÃž0i±‰¥ŒlgÕŒW.R	ªeÑugî÷Æ´/hà2ˆ‚qJ¥ *P¥Tn{;ßCÒ±xFü0ŽÔÔ¬|ªgN]aê³…äšÅåÎÌ7¿Â:V¬!·q¤õ`Ó�ta§ú½?Oí†d—ßU°fÞ ÎWÃæÌÃ_ác­Ë<ë=L›|6‰>ŸhCm¦23vRA¬•íãC�#Q¡‘ï €?‹V©–ƒ!8»Ôƒ’2ÜÕÿ¡—œY˜¦‘#5i¨%UÖrB3˜Ä¹kDP4©¢R%Ë!i±Œº&ÿ&‚aºV‚ð>.³T™iÜ³mÝ.-F¥w²($s|”ÆÆ2E#"i14BDmÍCPÐ›£U=P³”da#0�šú°ÂF#5m–è¸Ž¿£“lddÃþmw ÜžC�pÈB(U ÕÒÛLîëq;·]5%*Vv�°ÑkB())ª8ÇP6··ž^+ÌÊf5R^t»WZÁcPÒ±£e-¡"*”MXJTÍ†L–kdªL:u¦“‡m¸›«Ûº�¦‚™Ñ‰†øí0ÍØ7�È&8b.em²!¡Ž4‰”(îª‚bÒT² ò0cJ4±LÞb¤A:á70ÖèÖÑ¦0i‘XCcƒ#5Ù|Jd6XôžJÛb†HkSêdf69 ÍFÓŠï84™5aÀÅC^Ú‰MƒÓ¬AˆÄeE¬Ç?¦”¤ž£ðKÐi€Ú‘¨ÆHÂöpg]MS]dz®–;«#5ªJ‘&Ò¬¼&2hW�yíÛz—MÄ‹Úî1†�02˜BWŽ6ŠÐ Ê4›4=8`B–b4á¨À`Äž›z°#5iÑèÄ]<a£I¦9uð¥	’Õ„ZÈÒÕ(P©kc[xfÃE 30eGQÃz±iÀÒ„cw!X#,´àÒÍiÐ±f[äþ¯å‡gÑéÏ¶*Î¬SÝ#,s€ÐS4;L¸k“T�ûyÖ±€86Ã–Sˆ¡ú×"Éi‡£ÑÂŒÜ¤�pVt‰»mö'BÏ-Ñºläßa¨‚ÛNQo­% 1‰PŠ•,Å~u2‰?!¥¥üH”ˆMþ›ÈP8ß Ý‘ü>BØãð©ˆ°]1áke‰<Ÿž¸B�üdt"jfZÀR”:ò¹gcDÆ¥Ô«tP6KaÆD†V’­4-˜4VK\èÝëHh:Òò—g#,š¼XJG<ä:ñ—ì†¶>F8Q›QÛ_)Y�?‡7–r¥88Õ¥æÚÄ Œ`šÆŠšÄŒ"Z`RƒåT‹¸¸b8šé¡Í}ºº\(a¤0%ÄÔL éæìš1pq4ØÆB0JˆÆUj˜PÖ°ži�‰0î~ä�ñUƒÇ¿¿ò¯±÷ñàÎ%#5—ê7/¶¾ô¼™Xa8}†Ÿ;ñrŒìf›ñ#,PûpWÑÓ4"‰”¼”LBoœÞR�ç=~î¹œÐ›o™,J&&ðw‘Ž!B1ÍýÅŽ"Ñ×ý¿n¢wÝ¸ßÓ¯¼²>Yéyábvª9“ôÔ.òQGw‹Qúf‰ˆ%žÏí%¯tq³ŠKa/w|~µ"!@î™	&»;”‹.þ¨óð6tÊ±>”æ¹Æí¹ùPÛ›:Iƒ¿WœzÁ�td9ß¡¢w¦Œ÷àé°tƒ#,åÁ~2;a„×.Í$2Ÿ¼‘Ñn‰Ë¦0/,e­Rµq•êSzÓ¯XýV@G�w¹¥…”šgæ[ÝŽ1tßÁfn¬øúqêiüåœ¨†Ñ¿÷×�RÞ§›îqk™KaF¶c²2ÉŠÿë7½ìÿ÷vdÓ÷*PIã¤µ¼Ÿ¯hÊfÇÆóêOÁž(Þtc*fz)âfZõwÓ¶<óªµýµâ#HRöÑghJ–‘€³mì‚Ìn Z¶ÐéÓ.Æ	C¾bjb?ŸÎçgö¯”>öˆt´��]ÚU€‹ÞdÃ4e8¨rËPàÍ�Ï$í‡Ìø²Œý<zvãwÓÚø¼¸á^#GëÜ¯Ë¼„î<1…¥ª (‚XÀ6<X4:6ÒiýŸÂCB	ÞŽÂJ€bp/d¸†�ääáf¬*Ãg	¥¤p–GˆÈL‚†„¥Û«]%DmUç�Ût µ!Il¥«²Ôk55£!9°h�¦…iÑa3†´š©R”]0øïA­�fkY›æ;Ô4§·WÎÃÉ¥¬iµ!l„õ„u£âÇi÷Ù¼f_íÑ°r (q	qÇ"©""PY˜À4"0h\#,*šü#5–´)°d+ã'yÂ»Œê€3t4…ÊL2.”<±Áê°wŽ	ˆ³…Á	quÐ©J´„‘)D³3Uðnë­ÊF#5b¨ÑªAJ6KmF„Ñ™“e-b�Ý»±‘4™FÙ±¶ƒkE™CºéJÉ!‹ƒúÑÆ¶%Ðâ¾èõ3¼öc…Ì˜r˜�` iÔSM%#5D´¢±þ�·»l}O¯Ø`ôõNrý#5�K¿J0=­�\¿Ýny<›EÚS#5Ä˜/ðpç»33Á! Ÿ1L(Ð…?6…\_Y ÷J8¡©ÂŠÃJÑ[*Ô¯ê•’’Ûªš�öÉ=T=Ìc»~Hð¦=n;%h0ÞÇP‘!î19Jv§nê�X� ¸ÅN÷��Õãì<ÏÍGË^ÍûÇè^ NïÀ½Üw*îëˆï0Œ�ì7ý]Ùê;cÄ…öÐQïæO£šë»~ïEQÝÃ?jÔvIi×"4ÿ6…Œ—¥‡ëé‹Í¬úüíg.¾š$}oäfPÑ¬»wîÑe—RÚªc…$#@©¾µa¨ÆÓ}�W¹†H{#,¿Ý‹Ùûm$3*�è´o¶¨BMbd’Yís”fØ4÷#��Ý|sCD£×Ý¨,ðÙã“Â•PCŽŒÍ¹b�k¢ ŒÂXÊý�©3Í|Å8Æ¡Nñ²·lôW–m€²¤Æè”ï?*œ‡Ì˜WoYWóxÁpH”ÍKË5yZ¨¬í* j”Î;îªð§ñ†{E]íœëÖ�2†#íI8ÁØ<ãÊþ1id‰¼™Ý»†�80šŒòÑúÊ|~­ƒ{ê¥,s‚ç8¬yÄÖÚ:}þ_�P�}sã>ä™€c‡tïO±|#,úŠ�÷ÒZ�ýÄÄ ÄD”4½	]AQt…6„Üƒj…Þ6•L‚…#5W%ˆ È "HS –�}�øðšwYÌ9cœ|>Oè€*” Qç"ë—†��Ïñ÷ÈŒgÛ 4T& "“ã#5œ‚BÏRj_·gE†ÙŒ&ú6Ôæ8`zrû�•ëügº	2ÊrD7PWÂ‘ –�:›¥©d™Û «Æ8�P£#,d¼ Dš#c&�sZWIš4.Q£(m ñ¢ºÊÅI7˜ð©`Ñ-M‘PI´(Ä«1×cqÉa3#5›Uƒm�™€´æ¢†ˆXñ‹FÅ» ÜYœF5¡±À•Ø`—Ìkƒl``%e?µ¢$5‡	T '"0IgH(ÒA#,±�ÄfFePÄÄÊãñtb môð}×/¡ÀŒ‰;ìõR(xƒ.b`Æ(óv1âv†Òl&è¹'ÏbÃ…dÈ0À"›§í²N¤0@8)UG¸�@#,*ú+€!© w![ÔßóÉúýá�—Ü v”òv'”@ªÁf`GZD«vte	$!<œ~Ð@¯îbÃRÓ¦C³ T<LûÿT­¸±%<ŒãuìÛ†v~s}:.Öc}’}6Ã¤šü´þÒˆÆ,="Œ<¶™:òàbuÕ¸‹;º¾¸‰¤F…H!ø;xš^ï@©¨Ã½.ø&ä‡úó*¼¸C©dîpQ	÷8¦ˆD‡X¹÷ ¿Ä=%d‘?Wßèôõ¨^ïÙ Çµ¿‘‹ù´h#65�~Íþ<Qú‹ëúˆƒ“³;²§f“û]‡‹»ÑC:mÕ0žý¿j¡õè$ódÈ0s3OHRÌ'î…t;0z†â'p]Ça¥ýY’F‰lÄØywëª‹Ô>?ØsL…íùß�íþ~aõö!�â®20R˜ÂL!Þ~ÎÁûá‚(J­±\Y31%‹SñWŠ™b×’¯;š J»7f,RlXåãr^;»u\‚�j]Jhƒ!™% §!É2E…ˆB˜*sÈÌ¦ìK3m�F±s]™£#?¼âš…t“(Á9�pÂ`ƒ¥ ïOº°æ=‡#þa€}9ÈvÃ§äÉªO¨=ÒR@¸<@Ô±b„Z((„÷à‡å@CB£Ï�á_¥ANÞ™èÐ'd0kÜ¨l	 â£î�¡HYÿ'Èñ_,+×ã¨õ÷= D&9¸sø§"Ðj@Å#5l@‰USJ5#,¥?½øìŸŸÚ÷Úñ;Øõ>caTð˜*�X©‰Xî	ÃuAõ�GcåÈ4PI¬6æ—òõ�#	H~0*ÌŠ¥A-D4¢‘ò?“’~B/·,£2¨é”¯W—xéšToŠñ¦j5¾ï�æD–Œ›~–W ã£êÌç.I–E'„¢s�"Uâã�Ó˜àP¡Å´˜Ê#ÐÃ¿T®å¬·°Lm%iÌª—1zÈÊ?+hÈC}­­dPR	†"b³‚pK „Á(A48³Î:ŸÝìMþ`+Û!—wñkÕü£ÚTCh 2+R�­:+ûÓs>üèv+æ1{GÚH %"‚US	ÄÈÈl*»n~‡¥3âõ³€�s"U  ‰X 	,§‰£Ù¥Ø(b 	XP>túCëþÏÕãÌGÃ�=Ò ŸÅTÂE1LJèÝQîTÙHWZÈþÛcpD€µ5` ï4Ï_å0‹÷~O�A¢#,#,�EŒâ�ˆ#,ü36ÓðÌ=F'R\Øù|uØÅ€j‡æ�1"~CƒOÎ|¼LÀKL.(Ú¦¤å�¶0ž !‘+÷o:é(æá™”Ÿ¬„„‚ÑN¦ÚQË÷ÃÀD5#,ú�‘'í¢T¯„"y�|=8È©¡{5?é £^3þ¤Ó€�ó.ñ%Ž#55§F#cb%‚Y�¶)å/Rð¤ÚÑ·:Z¯%Œ„"iu™MvÈjVu›ÊãZŽåEm6!¸àÑfòÚ6^4U’e•bCu‘¡PQ‹jD€Ô™·¤ùx÷ŸÏ¹¾a·’4Ú\$Ž!')Cn*AÊ×î�i•äLÕqé$PƒÜ© mÿA©*Ó4$Â°4š‡ †„JP7”¤Ù°1”ÉHëCf.-´‘üWN��=‚AÇ1�Ý¨k0™²|&ècÑ0˜žØ.:OÇ+E¶¡\«Ë%1«"‹ï�bW)" F1¬Š#,¡7#@†¹,<ï#5=gœ¼ý¿¸“fë¨v$¯¾˜Ä�{}‡³àuÖIí²P#,Àü—„öœü¢íÃÞvîo(°&�ô_àø_€~Lý3&ðU�Õlyƒ‘´ÔÜç8Ð¢saü¨aŠºpN'ºMÆŠé]c#,#‹#, aI–£³ZÐ7E1–£û4e‘¶Øä„cÓCsQÚmLXñåu%#q‡W¶‡CTçÇi Ç$Ö›a£§#5‚Æ„Ö6ïn9XNK.6í†ôR—S²¾¾©ë«†Çäw#ç’üáê¨Ê²7Cd;ÍSBqaG ~:ëýI”µ	ò‘Ä‚Bfƒ¦8BD‡ÏÝéÜþ~ÇCÌ¥Š®D)#,H	H!íLQ:zƒàëì?&Q7Äüâ_ò„ï<ø�>iïë‹k§NÂtãë‡Sõ2uþXz$>ö,DT0? W¬)úCÝ¸�°(‡ô'ó@,ØŸ¬÷ŠÃÙõu^uÃRˆdø¢ v$J“çOç FÞ•VZ3ç¥±è;*_­‡uøêµÆÉ‹9¾Çw½QpßÛ;6	¤téo ÓüÒ9äÁõë%¸àô~¹�$›þ)œ¿&ÊXWƒmnKÓç»©£šû3?>izZ˜e89ò]ZÆaêÄˆV¦àºt‹£LiÔ1!q£†…8_C8Aü~€$õùÎ:!÷JÉ>ž£Æƒòÿ€,·õB~0`†Ø©=Ì�Ï&$û‚ pö¾g¿�Ë�å÷ÖÉ†q³$W>?Ÿ¾.bê5& ð.ê*ÒÕiûîbªû#dÙGð—cò6röædÊoW9#b›ðêÍz(ùKìD`JÝ¢¡€âÁ�±¡�˜ÈIQ°º!i•AP%Í'ï¹ÖdÔ,àfÞqºˆÊµOF//½Æýðç¢9eE1ÜÌ‘ö#Éa2]Z½3Ž¾Å£e„afeº{ÞÞÌ£½€íš¡4Ô£3Ç–êNØÏã<õçðäßŽ|‚mÓÂààÿìO‡â£h8Oñäf5(HÕò„’'áßãÞ®Ï!åêC¯é´ødQ²M9ê™™:7™ÚVÅ\p~|ÀcMVqFsÇ5è½¼äÂÙÌ� '‡�j}ƒ2®^ÎÇ‘6	í¨lŸVóC—f$‰AºKêBçT]áƒ€ÃI²hY&N¦=;¡é	äzÆo|L”UW¥­QtÝýw­Æï0ž«¥Êt'—‡v¡¹#,ÅTáþŸÈTÄêŒ“¬, ö (w#	5 øá‰·ÓÌõc‘ú™cÄ&äÜ©±àf°±:R ÀÕÍ~7@ê˜”&G)2õräâ^"ñ‚¼À€Ö0è¦qExy¸ÛKKZ c„ƒi÷ßCƒëû`pïþ4¯Øô�¶Û¾*Ú¶¢-§.îÜï;’wvd\5Êùï®¾™¾‹Ûä(½‘ó›ž÷ç“dlý]`fÉªEoeZ©óÇ”ò32øÑ\|ê<·ÕÌ3qå›yðÚê<Ã’„ SŒu„«Yf5Žäc#,¨H”l£‚­6T{­ ³&5ŠÁÈ£ŒàÈH¨ÞIb�Z2Ë¯NÜ®J>ÉvŸ½Þb“J‚]Õéê<"\oRû&Êö{áè¼GGÒáŒÂ¶/ía�È…pÐÀ`×‡Aãø9Ò)«Ðy­Î	q•@¦â§Ÿ–ë‡#-éC€IÀ8ÔÑ7#,ÜxÑ×n�+g‹€LôÅC G¬)»aæR!ç]iF¾zÅ·[íÇjÞÏAOÂ²Ùs{�›u®“ìK‚F[Â!¼Ö!l[¥eM÷e›úõÅœÎZEŸM1;v*z0XW9ØöüU{åúL¹ËŒ³.�‘G_VN¹†o	ô‘TÉ4ïVªgðròøÄ¬IN=F¢Õ‚ÑÚ2>&e!vêGQ#Þz#,ôAÉ#5Î’x¨ÓyKJD¸P\–—B® "¦Ü3Íxuþo¬þ-Š>?¡#5#Ý¿Ìš~²5AŒP’–~LÞ1ëâH> }«ùð~ò‚ŒX]€>$B´Ÿ‡—�ËqN#,y5�=eÉžýU~›çÝEOÐéò'¦ºÕQq½Æ~îîyöF3Ä8ž£S5$'ù�Î?ÁËß1>ïj‚é³ÀÃ {d¹ÛÙ˜$ßnêÁì}ûžžï_¬â¶¾€õ'´	 I‰ƒ·qEŒ�ñ#YG21ˆŒ‡áà‰o@áíem¯x3äc�á {¢I(ñ ö¢ë§ø+í^­#<sès#,D ñ=ÛŽP„“¡GÓæà ˆå«^êÊ­ÅY@([ai€ðØ5ˆAi#58 =4#£óøô‡=ÍøõQó S�Âà‰†èÐ(.s±bÁÐè~ë³n’SEä	rAž:µf°<ÛmÔëôèg÷|ÈúW{.qEY†ÚÚ‚ÈÄ^t{¯åp¦7`MË2eÃDÆ‚þ=Ÿ@p*ƒˆ2‚/!|”;ê£Ð*R‚†‘ƒïùë4/å±åç=wÿ“ÈÏw›ˆØûä‚y2.¡k^àŽfÐ¡š®w8æ£b1á ZËç`b•¹ä#X|¢Y÷¾íWŸÐ2ÎJpX2;{-†ÃžG‹ÍÚí’2#^È <#5SöáèIî}½üd³[ R>:÷�ve=³þ#Ïé>º©t\Œ¢ºù{¡ŒáAkÈ=£¢KGßô¾×ÎyÇGÂNò¥Çt—4ê†s?µì÷m†”ÝÛ°Grr{ å÷DþpÄÄä†l(äNç°è]5ÂÈd™m´ !\,ŠFkw¦Ë	¡3?×óÀ~×áš÷Æn~%iÆ9�Ht}^9	ñ@¦:%ÁÐÝV0AM§%˜€†¬Žz “Ù¿gä+„b#¦´‰"sû0@üöv‚¸•É¥Ñýè$±*¸ˆ.œ@GÄùlàÈ1¶�‘Mš�£ò4¶•�˜ÖÓh¬³6&’³l¦ÉL�B¬A!Ì!ðžÞ¸¯ká€›q‡\x÷ëòöáE�†,UÅ#,Id£E“iD7¾k§ßôíÈ@ÉLK"S(Œ@)£ ”"h‹2#,24¢dÅQ"Y°ñíêú/Îý°˜€xWLû-1#ò˜ª_Ïl‡ûž\Á?¡¾+fBbY`“0Ì‘#,a0¾—b§�ÙòÎÞ[3–û¿B¦Œþé™' äJqT@¡Ä‘¢Úà=”0tläœŸÆ	¥å9S�!<=#,§9ó%ÂÁK`€…°5­#Ï¥Õ¼LŒ�Ä¨p™Àù=VÅÔU7qTÅ<¶Çà’2ŸOraÇCG‚mõ�¦ßyÅÛ\K�“©¥†§«Œ.�¹Á€³qy2P3?w§ö2è×³`@!³B`€ç#5¦E²2Ú@ ë Ô#–#,¦(Ó\"Œû•i4Üã3PbŽí[·]T’j-.n›§—w— �IFëÈYY¸»%\´%UD¦¨ðBQ¦ÁV€ûól¨KLH|aD©¸�¹{Âb4ÃØëj1£$ Ô¼è›1ˆAÛŒiïÐ#fÓOòéˆè©¶©F{ñ˜S `T�HÈqÄ£)k#,:¼kVÀŽÒQFÛ~£–.h8†5‰äµ¸o&3£I\hÃ¬3‚Á „à€u+b¤¤“!SW³c´­ÒíN–£]IŒíl:�h�±ÃZÔÚlWJ(ZˆP¦f	ÚŽ$ÐH1¦8âŽ©a[i„S)ñCÊÈÔ¤Q46T4G]’·Rc�¬�©`;h9`â””c­ƒP„­ŠB2¡F‚ƒI±�ÛaHÛ4Ñ1Á„Ôt¦¢�‘F‰B „2a�rž2d-‰“WL441ƒf+Yû-²k(Þ–±ësC5¼Ê2=[Všoú‰¸%¤ßôÌï©MìŽôÔK¦‰Öy!†=²I8ã§˜bå¨Gš-4Ñ\ÕÂ#,æ2°˜›ŽDÍ¹fzª:5Œ�•ì%P…}ÏÆšŒÁ¡Fe0/™Ñ£1TU	ÜÒ&­.(R¡4p±#,Z1ŒÚÀá¢okTÛ#5�27*V¨®4ÖŠ©@Ðv›È÷¡ØÊöÍ+Ö˜DŒS8TÚ)mÊ°‘¡š‰›�°uÑ´PšN2´Œ…)Ë©ƒ#5L:få]9}I,®®Y‘yöË»ºx)»ÝµÚªª®ãLPRJšÐäŒACˆYŒ7 ‰Q“"¬lrpÄ‘6#vâ0ÊŠ†Å:åcK#‰(Æ4¼›±Z?Õ(öÒá¡î!åM‡F­!6=.u4dHtÂ�#5QÑ£†LqbÐ&Rì0Ra%Û(®È’¬¡ ­¼’¨Êì&QÊ®FH�Õk_“0g)†6GlgÕK+ŒîÃµ5'›©•Æqaì0˜0ìÄNfì×0þ7GY;ðl¬RH1†>i‹#VÕd`ü!˜É¬Í"ÈO£»ùé•qºåÖnn1bãž…ÍÈ¸OeM)�Øl�È‡�#ÉÀt(pGSFÌ&Ên„ Ùc‚Í#ˆi Ø©$Ò02K…��¤”*Ì‚‚Ã CTl *OŒ?êUQJªÙUBÝ-¤jr	°PamŽÖ#,¯ðH¬�³p�&X!–AµÐýa…†Ã¡Ô}„%E1 ÐTÌ¬JA,ÅQÀ‘3?‡ëùÏ_ì%Î:ˆÿlèž}TNojÍüž'¨4©(C tÉÌ9‡–¡x~”_ð9l½×$Ÿ*©…„‰w�;>¼v‹ôö3G7·p¼>RÑ@!B½Ã)¡;XÂB–‡‰SCÒìÛå£•ÒD„pü ?Ò…®Ø3xÈìƒ œ’­aÚc¤is„)Hã‚J©ÆÄ66$Ó@F ’©B;A¢ Õ¬ËN2]ßkyä¼íÚÆWRU²¥_{)“ü%‚_Á·ï@{€^UQ•1«ÜMÁ–ZB1¾£!¯éÔØ¬\4¨3M)ÁÞO1µN¶·z”7 Œ5ž²6H€%Ý%úQŒ×Êª~'TDÍkSÎØð¸;$Ì&	°¸"ˆÏ‡#5]ê ‘ºäq¸I;ÏÒôa¨ÅJ_#èvcÙÎt#,„0ÎL!�è`9}H.ýÆ®ßSÀÜ2(R¾gsÆE°ºåª)Ž–ª«Ó¸Ã&³wõ`mA!J¿áÓ¥5‰ Šª°ŠR'¸$âl7ª.S¯*sŠ»òvG¯7Ü{€þU?_ñû8ÝúQ|�v×©àD’·ƒj7Jƒ¿·Îâþ‡é›ø~ø¾þ£ûß­œa¼¶xØÚ6gâº>œ"hŠ~Xb´!kFÃ5I”ÉlÄ­.{CÛÀz%rQz�3^>¼•ûÅn{\ÎK‰NOÒ{üœS³_Ž�È ãexž�t@TÅ³Zö	kî¤ B'ti Âìà*ªiMJ „d†£õòîßn:0A)Bûç:ëf;þŽÇè­tÚÜNµ(!”‚Š#5"‡"Ï¬²ŒŽŠßZÃÒ9×E6ª‹úê¡£FÞw(Í}Yð'“Ð¯¢î‰å'”Ej¸h‘¦Ë©�#,¥ŒGÏGóÆT/¤œJé†ŠDäÔ·"Ø·-Í¢×ž]ïë·ˆ®EA�×5zë±i(Ú4lUâØ¨·7JÝÝÊò^4—’ü¡\7Ž€›45�×7{væ½¼êÃ!L#5ÃSoéj[†oC¤;xPÈC'h)Ð6SË�›Yô¿YòˆÙ5 ?²@ç+¤DL    5Û€}Š[nÖ.æ�‡¯gvg‡·�œõ�ä¨~¨_ ?5C»�¢ïâôÀy'àDØ%“¬‘.@ûý#,�0nî:ìÀÂ.­�K1,Y†f#XF2�†�ˆ¶Á…}ˆšc–ò	ƒ˜ ‹)€2¥ ñ­$é`­Fkƒ� !‹&¸W`;�Íð{$�WñR(B*T€å¡?Â~ø¨›sà:PðÖ=/ÊÌz”2m@Q<¾Ý:ãÆïPUÝÏ†ã¯â	ÿ$ J0wã¸ŸY¤ìÆwT WÝŽÚÜ\éÆÀå¥O›Õ@6U?Á,T¥4Ô)1cX±dÔd°m“Y)¦±lLKCljÌÆÌ#,+(Ä(ÍŠÀõ¶pv5.°­ˆ1¡A¹lhŒ*>‹…2(›h¶–"6ÓË1ÈÅ£J6ÐÆòG^�Zcm„qÑµDUtóØØCQÝZ†ÂÈFØÆ‚F�¦1š´JJ´)„DÈ0,•6ØLpÁ3i` 2 %P�]„=¡·ºBÄ L+˜ƒ~œþžy´ˆ»ÆXË`Q‰E A	�“ šÛÇDÏ€1ÞA	êCH0pg½Yá_ÉÛ+òñ=çÑŸN“ÙÄT`YUà¿P	I*¿!ˆá5YÐ�€C“!Š’dÔIŒ þ¹þ1–Á”ˆcM8=$»ÅX&#9Š™îúÄºèìú‘Ê:nu¶—zwñ¾IÑ=§¸CJ¾ì*j^®�s±�^^W’º1æœÙ±´Q™…›`f„rV€ ÉTÈ!2))#,¤¥L³Y°kR%ïT£=°óð£õï -µ8iTªéš…«IŠeÇ’N6ß#5F»ñ=Ò—>ß¦|™®a�˜o3Äß'€ÈÊ½jÅV¹'Xãé.a3ç¡E¿Sw.&Y�³£ð’úðƒf¸Ž×r[bØWÜq'éÒ7Fõ Úù!$4úv6‘é†.$ËåPÏÅ4ÆthV!óŒGáARà”Oœ‚ÈÑeaÕr†ÖHŽè´½&tÆAšø°ÂÏcRËÙuõ}XxkÓ!ä�–¢ès$M˜Xæ¬<ÅãŠ*OŠ^:´ržÓ‘jz¹zx^JLfïr²fð§·àú(±I„ø±÷·µ«kyô°zsƒŸ.ÝqM@Ö»„1âš #,z´#¼Ä"‚9Ö£¡ã·m6–ZÄñ½XÞûÎW·—ÐÇ½°óìŠFšWBcíÒºo©ØOE <Ý¬z†o!Ç÷¸†i³<ŸEaÃö<ôÍ³¿�ì›®Õ­ü:xÆ=“#,ÙG_&®¯–�Ÿ§ßdiYs�oî'ù¦cAáðÌ#]ø¦�|`ðÃæÍ*�aw%�Íêƒ¢f€ï¦×ü~µ->ªÍïµñ|#5_Á\õÉg›yNà ì ÜLâKHnU�2dõÔxu¿¤Žë7}ì#/™CmíÐn¢a7ÑUk�5ŽžÍ~4‡N?Æóºø/-cîœ‰r9N¼O„F�ä,GDó´ÅiZëT)-o~&Í¬±â9á‰Ó:Ös¿øÚ;Í™òîý|Ÿ2�÷“ÎÛ¦GmX{·|AÀÒoá·;ù*8ß7ÿ]¦›YÞÏrP‚®m#,µìC#5ì×ÊvH.û‘M i7	‘ržnwAñ{ë.ä}|ét÷%®�ÂªêÓÑaéâ®É¡Ë(I²ùaP¥`gpÝ¨J‡#,±ƒ‰V5°åù£YÐ‹Œ$<ü²×¼t~³F8¾Äº½¯åV‹rGXë€:'ÝÞQq#‹jrø JY¸FHbåmHV@â2‹Û2ŽÉ±Åô¥×dñúZ£ã=^Å¾IäsŒzoÄ-Ém€Íï‰#,d"­U‘¹ÒËl–›yjƒÞgcYmî¸þNbçß®êù\àwÍB'FkÙxÓ¤-¼ãÉÌøÍ‹¢lu:Ú{…ŠMÅ=TM-–Äê,r‡õ#5@ÝÊ¹6æŽ˜ïlqÃeaºM†ž�Ž�1®pA°þ�xraãWòB³©ò»©¸¸V¡ÝÅÛ‹ï¿-ÑõZ½â#,uÝß{Þ¨�¨†ªxÇ=dŠ¨Ÿô¶HvæÎÄ[êúX§·Qàž^L µÙ¼'¯vyàßIL/ [ÐœsIŠ•(žB13dºll~¤²cM”ŒD÷'ãFšÔSéfèu¦6ÀýS²Ìs£("´Ï¹‚a²—•,4²Ã`œbåÞÂd/JQí¦«2ªi:šQi@7…b±›\¶ÃmÜteu5ë¦Ç�%¼Dh`£L†êÖ8f §ÇsÃµ…}Ãó¸]tç‡:ÓŒ—kx×„¥!qÂ�êçmØp]ÄcÝyÆ“;j±ˆp†æN5OL††(¸ÒJY&64Mk¢Iš==#5Ž "Ì8p€2@#,»0¹–�&X02	À\&�¶$-#™¡lì.ˆ†s›Ïß·6öÔtœ×IÕ0N’jË�ÐÊN‚TàßK¦Mç£kÅÞdCš¥jhªSïÒ{Ž÷‡xeÑÊtž»€” *L&Ää¥{SŽ¤„Ì#,qß×…úô×–•Œdx@£“–´¼ö(�yà‘-†ùàžÝ¥ïåÂ6M$‚ôc	#,½–¶|ºÇuÂIÚó6â  	´Ø,ƒÞè`ÐeÃªwtœì»‰ÀBØlÂ"M*ƒ„;Ž+óÛtÄwpòá‘6CÆîÊãøöÎKz«1àå®òîÞ›Èýe÷5EX¹}´L—iP—œA®\åpaJz—w�¯#,ž´C¢W/ˆë¶¡—6#«ãQ˜·R+¯Äá8š�¯Gªòw×ÑÊÖG‹‰Üq#,ÑBß­àÊ+—{wµ%úÉÎüÏ á÷|zßsgl=óÚ«oä“n¤ß¸ü”xW„s|\ŠØµù‰�'y¼È9QEªõšö“ÁX£¾¢zîBnütî6«Í¸ç¦¨Ÿ;Ë¿¶×ù?)™¶ÚÒkÚI<éÕ¨Ûh–‹¹HÅ!.ùÓ|¶=jk¹ûìÏ-Ò×ÉÄy:²:ûv·f1´ù�²9¤:]5¦_)Mr¶[•´\	V¹4­Æ>V(0m‘êÈi;Æf'i¤…Ô¾5»›7Ž ÃsQ£�.k”f ^�ðõÖÎÐòæ­[±X„÷Vî:Ùû­[=¶†å[WwÓ¼’»)·/ÚyëeQÏ~ŸË“–ß“Û¤6Á ß³„Žö4QÜßng�·LíY/Ú5™ÉW¨­ŽÝGêäcÃÃq^³/�J¡Åxw§IŒù“gÅ/BzüXÒPƒüu:£žcñ#5©DOÞ|=‘ïôÛ3M+ L�]a�zpA]&“Ö"gêÝÜÞãQ²ç®›:ím6È˜;›·£Gˆí›Zø»àH£ÉO½XR!ÓãµÍ¾`0‡fhÀÃ2&Siõ�6-Hí‡ÈðÈQŽ¨ô?9Ã˜É2tRN”N^TìfeÙ¤øxÙŸáÖ�ƒ TÓ¢e‘d‘è’{�CŸQ;Î¯mç	†¨º›8›Åµô­Ð…ÙMŒ1/S•Èr´ªí‰�0hKZT#,®ìgh9åò]Ì¶�r˜\.z6=|ÏˆÜ’N™g’×µð] ‡Eä#Ú¯G½x"<Âv;†âzvU‰Ð‘(ëD;€Ù €g_Ô‘ESû`Dp³²©4MÅ`7RmUvö¿xê!pEfaýµG�µ½è·ñãòóÿŸ+>'_cß^‡é…LÊ¥ÝÙŠf¢�ÉT‘ÚyGb¨ï:êz|™¼êáýuAØÑ°?A¿¥™“39ÅÇ<âùóù�‘o)ÝÎNÎ=¹œ6ù°TX?]@R4›íŸiRB~‰pp›cÒÍÒè/^^Y,—9™UÈÜ¥Ý·FëuwyÐÞ9¨ÑlçÊ¤§š[u­^J-¢´m3…Ð´ P#,)8HîlÀ; îÁá¹½å¢åf‹ý£u#,V:†ùÔw€‘6xûhbýˆ²CnŠ!m]UÐ”•„L1+ú‰\‘ÙdJÕƒeM>FÓÏï×Ö6¹Ú®Ã8X•J�Û#ÇY+á¨	¬˜†Ão]š„á(h�ÇœczbÎ‘`÷ õ'ä„Œç™ÆÆiGHXóËCƒ(:H¿~­Á…©Èªã‘„em˜“ ØÐVpÓgX·wz(Üv‘í¡1ØãZ|0¶$)M¥Èi)Ì¨¤Ý0ÖÎ†kdÔZÈµÈL{œ$–¤ºµÄß&åRs«‘ÈÔsšå:5ƒ¡�¹,s0`Ð´Ða £2rb$#5B’ÌÂ$¬5Ê]÷ß\Î+D§�‘R)&Vd–èdv#, pØÆ„Ef#,f–G*s&g#+Õ²S†pYbÕqƒ#,8Ë$„r±Ë·„¼É™ŒÄÑþ]ñXÍ.ƒI1p6�å‡/›•^ÏmÑeŽÒk ^ÖŒÔí7°Âê²±kD9X®Áæ¡™1ÖS&`Æ’†éO·daÏSYCè,ƒLènp9•�ÕY‚`D[MŠ…À[X#,b¨Ô,®V2ñ%Ý†Ü:­qBA3Pç²šcæšdC¡"Lr&DÇ±Õ2•tf«vsrZ1…¢Å!¸ÕÐtCCDçiÉ¤BŒ¦±(øÀ¤q6å­nqKÒÒ×þì¼ˆ|õ…g.<�§c°ÒéÄ]¥Ò5Ç5\$á Ã‚„�+WGB£c	ù	SÝŠ!ä²Õ!+Bm²0NÌSyËSZ5	œè‘÷pj­#w¯­¶ÜLXNÏ{J*˜*æ-ÒÈ¼èÆJI‘.ô`’Pz+!ÌL�:"Q§J 5×xV9]f—ªÈ÷MWÆúºá¥ÂfÛç\.ÙUREJ÷ÚÛ[É¶TphÃfß&Qƒ{0sY-FæF ¸Ãb`Þ¹ÆñnØms±  ®œŽÁÂì„™³;RëH55ØÐK´*k[P3¶»˜¸º­·­–ÞÅ¹ªÞÌ²—+ÑÀòðšú?0r©wRAE.%#5áß¼ÎiÏ¯·Œ¢Ï‰úNü¢"’‘(qs½Sò�XÃ˜2OvÁ>Íï/mÌLÉgxÇsîÉp°ÇéšŽ`[DQ;¦Òg9+¹[hã9j'�d¨³žóÍõ®ªèÚ-)ŒÃ“<F�Ù“pk­N8°—Äúô˜%¿>æ} +Ï—~QÖìéÃú¾�sÒüzâú¡d®	6ž×ÃÙ$ÔÕ'¡<{@ÔÈuî_0ÀwQ Hå¬oC»¼üÿT•E,ÁÙ`½ŒH(,‡mÙ‘7öcÛ�Mû8å5iœ¹úã>Hïù_zÎø�±Ôà’Î4`öÔ%sÕ¢šªŒ¢OÏ0Baáç•4;�ì}Üú€ûÇç>~ò“$øçÏìNö¬q(äŒ@ŒK(HÄ¢ÉLeC*£R¢>·�ñ[¿B);Î6/áIØ¾�@ü˜@ ‚‚±†–-„¨#fZÔ¥š&²’2ÉQ"Ä„SM�ÔÙ($ÒR!¤ÕŠÉ­&£d¢ŒR–6Û4´cP™”Íhb[a°WÁ€˜Vˆ1D¡Àç! %Ïå·Ÿn‡-íµÇãØ{$é,ÞX@üÄ=&¼:@áë�#À#,4Uù]§Á™�=HÐÐYêû¥RÝä{çÄE¬²iâIÃcé|^h´vèÈ03ã7Îàî9�’[¼ãk`q4»>^Ï³°YêÜÃ9°q¹±Ûnw Ó¸eÓ‚	0®]5Ó4ô¯¼ƒ46Æføâ¹¹�gë,ânh«©éV]ÇÊq_ë-™Ê§¸]<T=;=˜� ÅÈE}I ˜B`¤jšað1Æd�‰dV†#ÐcEÏA‰#5d o©öú8ü»5†o‚5�™{ðŸ!=äUX�¥êèá¼>ãÕúõ½Ÿ‘-$�iÒªN¹ƒÔÁÊÙ:B-¤C49C�%,tœY…¶ÌW!Á!�I´¡¦©lÍ´e¬¡]¥BÀuíd@_ªÐ÷8ØW1Èˆlså²æÙÒ7'¡Á%ÊÄ˜¤×VMXjš´:éŒcD5äBD–°$$;\ÚQdú³4žG§Rî®}+[.Ñ¨ÆOÓy@ê6²C¬N³@J¾.mËo$M ¨‰&¤žB87&Š^MpÖ	íèäæzJ4Ò*höo02ð…šu%„�P“¼L‰Á7‚h—Ì>'CuÝ�‰]Î„»§Ä6Ý¤é/  ’�Z‚²5Ø¸_vbŽžy­g5}Œ›}Û÷›¡º§ €{ùÃhn¡*µHYp²�»Ú$)¯…ìùÈÐ(#,*Ê£Ì",€t ”0©¼�QÈ?VO°d*ùöw`I�gB¼k&ðCñäÁ*4Òå	Î)<úzs6Ñ‡>a|YÔ4ŸG¸'f‡.DS|8XƒÀ)ŒÙGƒwD›Oß¸WÀJ^™’pàBlMpÛæRbàÝHbiNcK[p8 ŠAGÖª9t;yt9WDWL'²¨�Ó»–±¾ì�Á¾a)x.fN}AïïÕMO;;Há48¿DiùÖåÐëÔ;¤•'·CIˆkÄ)âgáÓÔ?ãÜ<C_SÌÖÖWŠ¦÷q™�Ô¸ÙJoFªÜ3‚ÒùõØDÒCgFˆQŠ#bPª^í(tÌØú¯�—¨v}=qöhw1_Œ>p®Î¦Mà9<½ß$(’�ëßß©»¯¯œ�‰b1i~bÁÓù|«nž\ò	:çê.‹�–xñ¥ûÔ=ëæH´^ù·€±öë¾ü¸»0¢j>ûí$‘¿ …$7Dÿz´Ÿ£ë—#,‡æå0b¾`>L	!Iä÷Ñ¤ü<¿	ˆJˆ�öû”½^¾Þ™È-ye÷ûô¤WíêçÍ;-’#,1�Àý¼å€ž$™+½‚­0#úåÏÚdË“FçšKÂókêóÒbÑ8ë÷‡Ö†7ôü¢3ðj‹#GÐí>ù†l5™d†ÓÁg˜§ð±ó¯�õrË,ˆY!Ä¹H¼[å6gY¦~ýçógW[ƒÄ¢5ÚS²Žu$�Ù8zî–Ò„éÛò.öÙ³Ç‰ÑCÂ”è„Ž¨M'f#0”Z…`S0N[è3÷–¤«A¦ ‚ÿTI@ ÐD”ƒåw#,�ûv¼0Ö!jöØD{†4L1dbàÅÁ€)a`8—�ZFQA»�¡Ï^˜€i!­H™Öäßë–µ�ÐëÒ	k�`±ˆÄÞ1È„^8�Ìz\áøudTo#,V2j SîìY7¼§"ëdõìÜ9ÓI$’½ŸÝ ÑälôbˆxÆ†úCt"�|II½¾Í[!‡o7_:�c8Ith:ñ1HAœAœc”IM/'w(ÔˆÉ!Ìéš$…"š2ÀjÐ[½5¹pI‡<LI®ª÷†„Ö*ójîÀSœ”÷S‡_Ö¼»Ì×aúô+	™ŽEn�½Ó¥äR%|t#X¼N^§qm=#5/Ð²Ìàm.xE­ƒþ«m�´â°Q‚·åø%œk°•ß‡yÆ£]&#eºß¾º“‹£<êg|§4g,*ëÈ„ö§F‘¦ƒ–Trb!¸ò×95‚JÖ‡¤AÔœêÀÀg8š°Bj)#,BÎ	IíÚL"ËYÐõSCÚÏÝ»•Uj—aÄÒÍñÐ|êqmn7'¸²AA¬m©e‚02pä)à:�ƒ~œŽ†Û‹c!˜¨ÅßBZ5k1ijµÂ x™Ì{ÞbÐÇ¤j#y4éÆ*€�.ŒF¨ûÉƒædÕQ±¯CK@‹a:€øe9‘�ÞƒØ¡ÎåÝa´”½Ú,#³gX¦#5gtåà�e<œqƒU´m}fÄõÁ‹â“D"Ñ´C^UöÚ®MàZ¾ ŒF·N�.­mŠRb¡¹/#,qâÅt#,b¸îâ<¤5ÅW©�UÄÊc†ªåt†iImø¹ñzR½TÊ[6kYô?zñÉ„ŠV"ñ4<³º„ð˜[fÇ–B´Áe„%º	*\$rkœC]2º}>¶–ü�;­”^aÕŒsœÇ™Y\w)S¾R³OWg}U¦62qN0#ë#,[¨9VÙ„ÔÑ�U!ÛM\±cSrçT$V\†9gÌ2C*I÷¦1Û•û:ý»7ÆèOU+ã¢¹	©P]Š·ã�ËwbF‡Ñb–Âg¯äK’dðÛ´öAÆŽ$ÏmÎªSjÎÑœ6ÀA�)ävÅìpÖøœÞ#,ÅéÓ^Yù¢Ð:œÄ�Ò°sgžm¼“Mœ‚\84Èj´PîÈ�n@ÂbÑ¢Éãì¼öxÚ�r½…à©¹ ë½è„Y�N™H.%Ô1Þ‹~¶iD&~€àïÀfð3Œ‘¯lHh­wk0Ìð,4‰¬Ððü�tšl¼Ï(,f'Þ»Ùzó´±áM&p`kn>#,F\ÃJ=‹·NNDp�±±ëþŽ�³–Îwq–t#°ÿ•>m–ô“üoiçL#,ãb‘Ñ'…³LBJ2Ca)V+bÇ2�®/�îxÏ†æ©ŒÖ"L3D)·2+«³Œµ§¦*æ©©@ÛdCxÑveÓ…‘³5§Ó¦L·�¾'žŽë ±SI½6£)~®÷|fÑ&Q3;1dÃ§	2Š	VzY,…¡™[­Ûa¡Y Ôq¨DvÐ¾­jÃ¡;eöÕœíøÓˆ3<¶‹fî[¹ª¶VY<ÚÃÃ÷ìâk¿[¥+Bá…9Ø4èd•Â•VeÈ•CŒ$è/†ôÍBã±#5Í×x¹ªÆŒ[JòŠ�”åÌ;µŒ»t×ULÖëƒy(ô9cZ�XWI×Ù×[‹‹ƒáVj=51jæ¥GsiÕ©Ã~ã,•pT¸¶ÅQÑ“‚†¦µ|Ž›Ú_;—¥GfÇ†F÷ÀèìÎ#,ä†Øy“«:L3µÙI}¸ÃÂÒ¥bC;”†Ž¨bïóètÛ(ð�öNÚÂ*]a‘#,LÚÃ§e†çˆÜ}ŒÍÄä¸°í½;gË\¥¤3�€è.šÑ(4�Öœ„;²‘œžˆ˜Š-&œÀƒ‘†ÎÆ+ÐÃL¯f)D…�"jEµØ7³DÎ¥AC€hðÈ\SƒŒ…D{XšP^½tücg°´xvÔ;!!y»ŽFƒ :ðÆÌJ‡Uƒ"äÃTà;°Nî rÞ‰¨á!ì÷K2É¡4&âA�ðõ%0‘œ ÓEäíÕ�fÁØÔ7 ÙcÙ™ƒL8aEÂ˜›�@Ó¥˜F ¡Ìå•É5¡`³ ½/(´Ã4;"¡mJ$uÂ�…Xy)ì"`ÉÈü:ñëŸÚ�?�•°Ü¢ˆ‰Bˆ ÇÙ³‰À><¡#5'�Øîãä÷ï¨Ý[ó&ˆŒ(”zÏxçíÝÚiu!Âþï°w.ÐàùƒÌT(¦ôò…ÿD°öm­�ÏÍm{#5¯�a“Á^Ob_™;kFÃë#ÌuVƒñ4¸9y®¤g¹3­‡éýr‡^§3HøpÀr €Üpýq×òÅ�kÝÎ›øKY×ðý—7»øëRøzxÈºu_£ñúŠ$SN“\ÏÔ„ŸÎÒ¬œÊ5Õ¬¦Š’p„ßoojš0Jv4¨¡ª°ê¨‡VF×¼¢ÍEš ó9Û0^´IœØÕÝªÛ´6o\,Ð“WÁ3 ]°wpê·ÝÈˆxk`ÆJQÈš—úObM\ÝEÓî‚T xsq$¬º%u1¾m/‡ñzž^.î•ò\Ž‘Í»6ÊÊ°ã‡Á. „„7aÁB+:¿À‘#,ÕY`¢Ájœûqr×<#W‡˜éü�†¤SãS)bk#52Úº¡®šÝ*t•˜{ÔDûWÕTz3´ÞSÉä^uìFÒÇ0Íúòtaîf ¨¿¢(,H¿yûf/ö”GÌ <b½ð'ã`"&¢ŸŒ�ç äDL8e‡*ñpqER »^›½ÝP¯ZÛ¶ÌÐÑŒÐìºËRÂuw4k"Í2H4ÊRÉLakx­Âª˜¤PiX#50`ÌD`À"¦2"´’ dQF‹³#,ffâÇ°g.i-=E3Ì#2FfSO	Ýíh‚\=Â…Q„H	ÐóÙÞxzƒéS$õxh|Zqèz÷ñäB~D'ƒd�	§ß•â�thåMŠÈÐ[hcF�¤×%äˆ\5¯¼TBv�x°,øPqÃ‹&`A³e�ír7Á�z»¤|Ã7}L<\æi£âP<ûèûMð³ÌMx!®¹ì–=Ù¤aé µñ‚%È�ÜöNjˆˆÒéd4¿Sx5‰¨ÅJ üþ$;à¢p}�ôKÓ´öödöåÑ8QLi•lº²ˆBq<MÕø~ÉPrT)5ÂÏ,^„‘à¿`…5ICóÊ†0JÐ¬ŠPP#5P/È%“í�Câ�¤ à…)ˆNÃ¡€›ÂpòâM( mìÂr]ØÓÙ"ëAŠ˜’)±'#5ö(|Ö$Öúø{ùBHFÞìqÝ¾ïQ>²I!Ëª¾ŠtÝÈ}w%õU¿ðñ¯†ÓS¬ê�(I	Z@¥¤N¿?Ã¼ò7íkÇÛ� ùÕ$”&#,~G%øÇ‘º»Y5Ü4p~L¹>ÐN>üô›¨M#ÊÔM�Á$�¶2UÒ­K”ˆJ#,"»Q`KÓ Q:CBE9éBM,¦#F�hÐ�Œ#5ØÏ�Ó—"""Q¿v>ïcïÕ´;ƒ³:72Ãk¢AÂiù,Û³ˆ\ôÎù?Š^Óâ{þƒóügÔmO¤( màåÆœ�	µþý›§³H`a�‹tÇÙ ­8Füvâ7uëÉ$�]!‰vÌM€ÚPž™RGT¿n,'Ý32„ý?ÇßË;•×¸ù!aoÞŠ,GqiûÇ âaY5gùbÝfj_¼¹LY“öòÕdÏ3ƒàšX†ê#5‹|Îì{íÚïx½šŒ�ŸdìÐ–#,ÇÚJHSðNpw)rÒí¹ yñ£3®¾§Öû.l¨D‰MÎB’HêlûBê 4ÍÄ¤„UB#,!I?†ý‡!Å›œ²ÖÏá5÷û#,´ŸPŸg_© €óqˆAíW»ž˜¥I(¥²jTJlKŠ•Z‚I¤l¶TkôËW5WF�"J•p;�4ø§¡â|xåD)=Ì‰†d¢M€ñí±ÜkÄÙxK½½Ü@#hº:]-]Ãï7øøÉ$ãÌIÙ¤œ÷3¼­X�Â¯0ô“ ázIòöû=ÁÕÅîñÁ€)PóüŸÀü¿-Õ@ôóŒ¹NBhÚ°&µ[Ü©Ç¾‘åë³Ãôöd¤~…kï¯TØÃ3({´––µH}›â×±&¤|·«�#…a Ò� H™¦S–�°Çbì3—�àÃ«3¢‡CrY ›vµ�âØhfÑ¢dth†s‚ëª®ã�d“1¤#,Ý¨¶ckÝ°V ¶i²¡›Ã–‘{Bß\éšÀ¥ÌÔ.ÍkM PPí¬¶‹©²ñÏ\+ïNJÿO.l}_@¿\-5hÊCÜyÞ3¢økS(ñ¦`a`¤�–Tî0Ó‡XÏtäóA‡‹; §˜hñ[7ò!1FM¯Þv ýð‚£ ú¾l*}{ùôò¿Ÿ«Ã¤5òÚþÄ;Ô8ûC¸´”R	€^HDíå>Ÿ§øqøó~2™éÛâž“–eˆáxlvzVQT¤9§Í:ÒAK«në2>ƒÉú›êÔ’�GFVýLô$.ð9°^`Øcønpj}’?¿ß»�p(d¤¦ÉîŽã.ô¨Zú?¥EÈ„z,Ä�T¢Â’Ù0&ïB‹œ½ØÀ`¤Ã6Ÿ#$O)¨é=u·æ}€ò@}È¤¯ßv#&œ ösä…³åkš½+¦¸b2*îîÌS»™–ióo+È+•È<wŸ ¼^k×–Þµå1I¬,ÌhJfÆl¯W],�yF™¬¥Q‘3¡´Õ&¬EUu²ŸÌ#Û£MÚ@?¸Bv��ðÜù}¼¾¯HyÄŸ2½F€v‹ÂKí�×¸‡glaHŒÑ1)	«²ß7Íô[kìû€6-#,´–´ÊB‘ïwƒÇ—æU4«DR‹SPFÒ‘£m4¦’!ï°èOÆr_t s'üðÇŸrÜ±ndšíîˆ‰¤hÜÃ®\�3a´Ô•S"ÅCóæÀDs=Øªn’!#,a:Ü4< üý5i�/0=_#¶ ›@(ð‰Zk’ÿ�$ðÊ4}"Bi(Šýj‡íý´äðYË§gëÍ� êFcÜºæ÷Žò�¥îP9.Ûœ-ì²¹ýjƒîŸéÌÂGè›X‹ñŠAIÖ»úŠ~ºÒËLhü"K`j40à½×Óä{~ÜH¬]kÑ3sElöA%þ2 o²´ö$bö¨ªúèG]e|ý]¥[˜æU´Ë-•Œ�£’@b”4(láÙïù¿“OuóøôDA:ùdI�ñ„L”Ð÷¶QX)MRÔ`•¼äí§‡ŸÔQ—0Ý‡0�|†öŸÂÂj Èæ¥‘iöQ‚Ñ¸/»èxðc"�Ÿ‚"}èüßÈ'ýá ÃÞ1ï^”TKîÌ	¦Üæb�5+6ÉQ�$iË‹b“XŒ†5*6ûõyåÑŸŸpj™b�gŽ -J[ó}k¬­-�>K¹Ý¬–qÁRwaût”Â¹ä‘Ô`#,Û`ßÁ~ß¹Û[pBË^˜u ÿT"L� �âƒJ„Y5&ÅR›@–Òš1¶ JPfVBö�šñó|N<î¹•U™ý¿VÂ%/Ù#5žQû´f¿fr¾ŒbÄ�Ž.€š<ÿU$†‰¿ß[Æoý÷; µR\…20€ÈP»BmÐkmhP®Ba‹÷ÓuqÇ–†ðjÒ¼a¶úºõÙ2$"3•ƒA@q"m›fÎ“2pŸ3  Ø’a —bxéq­�ÊsîÊN­†˜’éJn ÎG=òG® èÝ’j×C6ë?Œ\&@SIl£Âm¸*Æ4#µ“~ËÀ6XF�«E%ØHk~5ncA×1;Ö4hÂ‰Xa› Á§N� h¦–].——«ÆuÒUÞyn—™,LC`ÓVR¡F&ŠqB‰¦‘d	0rÌÀ É*ƒl\œÅÀ“O6g@êR6,…¨¨¤#,­h0ÞÁb­´¸m€f±qÄÆ¢ fb$fTÔŽ†¥À6ìvƒB›0ºÌ{ƒ{?_NÓe€™÷ªóÿaÛÓû›¯ñÏÁ‡‘ùôSÞÕthóÍmöšŠ‘¡úærvÀ–a²î>ÿsô"ûÜ³|ü‘^e‹íñx2‰Â Ã3Ez'bÆÓ…DX*•\*ªªœôÝØ±4I‚çk6ž[ì:�€ðBÔ'BCy›­“ËDB!Þ+©AY¹˜„§pbœŽß¬�Œz\¤¹}?Ž¨cðX7[eÙHÇ›£5KT\ˆú}´ñiÄ9Þ�þ>Þ^(Ë‡ L¿u[8Ž�PÝš —P¸xcS›'¹ÞË&é@Šw£�10ÀÌ©ÓBƒÈ`sp�±�ñ­ç�^†lØêvü–�iÞ.#,ÊZVÐÓcØd�Ç— ð¦(H§cì_ŽÀØÐ¿¼ºlq4øvW×îãÄQ�•‚a•TBã™×F£gu‡B$0ÇfÊÁW—ÔŒ­€7<Aõ3…îW¤1+Ç×Áw<I).¼Š Ãš((0!ËÌñ÷PMéúY#5WÛ†ðüü—À‡;Ùë8Ý´¡íé Nœò¤VÙ˜k‰œWî‰H¡EÔ�åçë¦Ûo4E€YTÅÙbõ}ýMª}và)c•7é,ò¸üÒþÕW„¨ÒP¨šìWÛê8ô{ó)?#,+Óg!µT-¹ô¤´aæ†,îÿãž2dúV¿§¯¯ÀÃä‘6¾ûRØ’ÐBûÑ·wCS¸ötT†1:Ítš#­JžÌî�Ü+Â^1õ&#°þz‘ƒ#,¨Tv‰ L@Ô�BI#|¨"zc-C¦(2Ô5%�ªË–°ˆ€]@y¸ØÌCÙ˜fÈÇ‹0k	{nðí“ÖžŸn�øý½¦×…�þoGû?áÿ»ÿÃÿ_öÿ�úýê8ÿËü>O÷ðÿ/û?Ûñýñ—ü¿ÿÏ÷Ãìô?«‡ü¿çGÁþ>_îÿü[ýßàôþÿïðù§þÏ/Áñÿ‡üÿÇþz}¿ÕøT´’°Î÷÷ Ý�ÿÍ‡÷ô™3–DlŸèá_±º'PÏë‘ýx+ð Ç�ögøýôr'æ ö3Ú¡þ%öBV¿5^¾Ë7~^_˜;H"ªÝêx‚`rýº«èGl×ü'ùS§“ÕÆ7}}z¢æÿ?ÿñ¾]vBP}£þ¿.½ƒ¡ó ùÀ1\ãÐ‡±2�ý)8ºè¼|ˆA¿©ÁÑÓKßRFà‘Á4«µI$ŽDÈ&AËmL×Ž>�~y>‰É!&G—y�DÕ§Bšz&ÇO|’vùâ?é?{ç.0FÃ	•.™îþìLb¿¸þçÖÂ„Ž›ä›Ðk¦˜º`l¦ˆÉïøESw;_‹Õ5¿ý+K5¿&K½tÄi€ØŸù\Ó™Î)#57XYYeŠ±3(ÎS45š…´%9,¹eç#5»x'¬ÐÇ¸ŠzÎæ<8dÆ2"ã™V¦'£ŽÀ‹]bìÛçS(Þ7Nî�Ç#,%­Tˆ²`ÒDÊt4fÆPÉÊ­mcT¤­6TÙRñ½ØÍ=ö'Ž³æðØJnyµ4™�vÕ®PÈlÃn¡¤–Cô—R˜áÑuö8Sz]úeØNR»toÌø ¿é)C½€›2ÄéØœŽu¬qrƒ–HS°Ö9¢Jµ¦j–¹M^/5x>£Ú#5IÑyéÔ8uðuðÖžý.ÊãP¡…º²JH¦ï#,#Ø°��ž×Ÿ=/’ÀNIuîxº�PÝ�ä”œÜ\¬ˆ	ïH$a`åç´€”®OqÝÉ#,Õ3³‹y2¯Ó~“MUU~·¯ÿÄ7–ôÐé&%üq^”¨thê`ÿØ€ê¦†mú­žÏf,9yoÇ@=“B©U!Â0ÄÄIY%1²|÷(b(¤ô•¯¬Ÿ^	ÈóÅOõËÿ<”õq™��#©CÛ.ÚÊ³,À€&b±únõ}„ ÷ý¡þËªª¡O£ð¹BÏÚ¾3kêÕŸè‡ú±p]ï*øŒi¿œq8Ñkóëî™Æ·8�·ˆŒ1«~ü·66PQ„oÔóˆ¬9}Iƒ­ÌÁ]YY¦l ô%¯”3æîæ.ºœ_<ÏÄ�§ÏöDFa4£Âvz@Û™á ÅdpÊ·Á”Fvài_¾, †¶ƒ'×Íµ÷2½þžFúÃäùrÌiï€O’dJDdC!â�¦€#5(S!Gµ—ºqµ$`//�ÏfÅ… FÒ˜ôï <î`ô!Ú‰,2‹�¦<3;8šeGØï('u„}<¼#5Ðl9ž$ 7		ÐÁA7Tø³�iêDO�>û‡‡Ñ¼�þrªª"(N¡Îp‡û„&\ý?¨ýnwô<Päÿkð}ØïO <¿Qðú$BPb ì{í:"ü1°³TÈ±!D’F&’„Éh•Â¯®Í$°D˜p«²€}PDÍ2% '2øŸîñÄù}½®ß°OÌD÷#,�|´~#,÷o¾ØY ½¯q]§Ð¿™7@Œ�úH„^þÏØ_ôÿÒ#5®ÒJùô€ùÍÂCÉ�¯t£þ}Ü_ý#üiÿßóôy¬NÏýM²i»Õƒ?×šzÌ%Ê…ÿàP(‘©@èyˆÌg+™‡O“Whåf_ü»=C–#5 å?WŠ—Ä4K†„¶�õç sUT#ãP;J"â�ÒPv%%?ïù"óJ³ÊÞÌItý›�çóŸñÿçÚ­”‘èÓŸü²»�÷Cþ*7ÿoÏ�=œñð¹6ò;ÞÏð}(ÊclbìUw¹CˆI#5ù¬4Ò_ýÜ8Ò˜•ŒbÖ«ø9a÷×ý®µ›uË„#„p’?º®ÇK×*—£7%¿¿2 3�ï½,Ò·ÊðÍTÁZ¯ØÒ@Ic�lº¨]÷{4Ü§ZœåŽ‘DT`$8»Ùõ`¡!çøþØD þ.äŠp¡ yÃû†
-#<==
diff -Naur ns-3.19/src/bridge/bindings/modulegen__gcc_ILP32.py ns-3.20/src/bridge/bindings/modulegen__gcc_ILP32.py
--- ns-3.19/src/bridge/bindings/modulegen__gcc_ILP32.py	2014-06-17 10:34:00.492636245 -0700
+++ ns-3.20/src/bridge/bindings/modulegen__gcc_ILP32.py	2014-06-17 10:33:13.822996510 -0700
@@ -62,6 +62,8 @@
     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-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]
@@ -74,6 +76,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')
     ## 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]
@@ -178,12 +182,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
     
@@ -221,6 +225,7 @@
     register_Ns3ObjectFactory_methods(root_module, root_module['ns3::ObjectFactory'])
     register_Ns3SimpleRefCount__Ns3Object_Ns3ObjectBase_Ns3ObjectDeleter_methods(root_module, root_module['ns3::SimpleRefCount< ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter >'])
     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'])
@@ -1177,6 +1182,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('!=')
@@ -1374,62 +1387,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('==')
@@ -1438,6 +1407,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]
@@ -1478,6 +1449,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_Ns3Object_methods(root_module, cls):
@@ -1619,13 +1592,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('==')
@@ -1652,6 +1627,11 @@
     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', 
diff -Naur ns-3.19/src/bridge/bindings/modulegen__gcc_LP64.py ns-3.20/src/bridge/bindings/modulegen__gcc_LP64.py
--- ns-3.19/src/bridge/bindings/modulegen__gcc_LP64.py	2014-06-17 10:34:00.494636229 -0700
+++ ns-3.20/src/bridge/bindings/modulegen__gcc_LP64.py	2014-06-17 10:33:13.824996494 -0700
@@ -62,6 +62,8 @@
     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-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]
@@ -74,6 +76,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')
     ## 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]
@@ -178,12 +182,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
     
@@ -221,6 +225,7 @@
     register_Ns3ObjectFactory_methods(root_module, root_module['ns3::ObjectFactory'])
     register_Ns3SimpleRefCount__Ns3Object_Ns3ObjectBase_Ns3ObjectDeleter_methods(root_module, root_module['ns3::SimpleRefCount< ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter >'])
     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'])
@@ -1177,6 +1182,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('!=')
@@ -1374,62 +1387,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('==')
@@ -1438,6 +1407,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]
@@ -1478,6 +1449,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_Ns3Object_methods(root_module, cls):
@@ -1619,13 +1592,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('==')
@@ -1652,6 +1627,11 @@
     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', 
diff -Naur ns-3.19/src/bridge/model/bridge-channel.cc ns-3.20/src/bridge/model/bridge-channel.cc
--- ns-3.19/src/bridge/model/bridge-channel.cc	2014-06-17 10:34:00.496636214 -0700
+++ ns-3.20/src/bridge/model/bridge-channel.cc	2014-06-17 10:33:13.826996479 -0700
@@ -23,8 +23,7 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (BridgeChannel)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (BridgeChannel);
 
 TypeId 
 BridgeChannel::GetTypeId (void)
diff -Naur ns-3.19/src/bridge/model/bridge-net-device.cc ns-3.20/src/bridge/model/bridge-net-device.cc
--- ns-3.19/src/bridge/model/bridge-net-device.cc	2014-06-17 10:34:00.497636206 -0700
+++ ns-3.20/src/bridge/model/bridge-net-device.cc	2014-06-17 10:33:13.827996471 -0700
@@ -28,8 +28,7 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (BridgeNetDevice)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (BridgeNetDevice);
 
 
 TypeId
diff -Naur ns-3.19/src/bridge/waf ns-3.20/src/bridge/waf
--- ns-3.19/src/bridge/waf	2014-06-17 10:34:00.498636198 -0700
+++ ns-3.20/src/bridge/waf	1969-12-31 16:00:00.000000000 -0800
@@ -1 +0,0 @@
-exec "`dirname "$0"`"/../../../waf "$@"
diff -Naur ns-3.19/src/brite/helper/brite-topology-helper.cc ns-3.20/src/brite/helper/brite-topology-helper.cc
--- ns-3.19/src/brite/helper/brite-topology-helper.cc	2014-06-17 10:34:00.503636160 -0700
+++ ns-3.20/src/brite/helper/brite-topology-helper.cc	2014-06-17 10:33:13.833996425 -0700
@@ -456,7 +456,7 @@
       // Set the link delay
       // The brite value for delay is given in milliseconds
       m_britePointToPointHelper.SetChannelAttribute ("Delay",
-                                                     TimeValue (MilliSeconds ((*it).delay)));
+                                                     TimeValue (Seconds ((*it).delay/1000.0)));
 
       // The brite value for data rate is given in Mbps
       m_britePointToPointHelper.SetDeviceAttribute ("DataRate",
diff -Naur ns-3.19/src/brite/test/brite-test-topology.cc ns-3.20/src/brite/test/brite-test-topology.cc
--- ns-3.19/src/brite/test/brite-test-topology.cc	2014-06-17 10:34:00.504636152 -0700
+++ ns-3.20/src/brite/test/brite-test-topology.cc	2014-06-17 10:33:13.834996417 -0700
@@ -29,7 +29,7 @@
 #include <iostream>
 #include <fstream>
 
-namespace ns3 {
+using namespace ns3;
 
 class BriteTopologyStructureTestCase : public TestCase
 {
@@ -196,5 +196,3 @@
     AddTestCase (new BriteTopologyFunctionTestCase, TestCase::QUICK);
   }
 } g_briteTestSuite;
-
-} // namespace ns3
diff -Naur ns-3.19/src/brite/wscript ns-3.20/src/brite/wscript
--- ns-3.19/src/brite/wscript	2014-06-17 10:34:00.505636144 -0700
+++ ns-3.20/src/brite/wscript	2014-06-17 10:33:13.835996409 -0700
@@ -14,33 +14,39 @@
 def configure(conf):
     conf.env['ENABLE_BRITE'] = False
 
+    lib_to_check = 'libbrite.so'
     if Options.options.with_brite:
-        if os.path.isdir(Options.options.with_brite):
-            conf.msg("Checking BRITE location", ("%s (given)" % Options.options.with_brite))
+        conf.msg("Checking BRITE location", ("%s (given)" % Options.options.with_brite))
+        brite_dir = Options.options.with_brite
+        if os.path.exists(os.path.join(brite_dir, lib_to_check)):
             conf.env['WITH_BRITE'] = os.path.abspath(Options.options.with_brite)
         else:
-            brite_dir = os.path.join('..','BRITE')
-            if os.path.isdir(brite_dir):
-                conf.msg("Checking for BRITE location", ("%s (guessed)" % brite_dir))
-                conf.env['WITH_BRITE'] = os.path.abspath(brite_dir)
-                del brite_dir
-            if not conf.env['WITH_BRITE']:
-                conf.msg("Checking for BRITE location", False)
-                conf.report_optional_feature("brite", "BRITE Integration", False,
-                                     "BRITE not found (see option --with-brite)")
-                # Add this module to the list of modules that won't be built
-                # if they are enabled.
-                conf.env['MODULES_NOT_BUILT'].append('brite')
-
-                return
+            conf.report_optional_feature("brite", "BRITE Integration", False,
+                                 "BRITE not found at requested location")
+            # Add this module to the list of modules that won't be built
+            # if they are enabled.
+            conf.env['MODULES_NOT_BUILT'].append('brite')
+            return
     else:
-        conf.report_optional_feature("brite", "BRITE Integration", False, 'BRITE not enabled (see option --with-brite)')
-
-        # Add this module to the list of modules that won't be built
-        # if they are enabled.
-        conf.env['MODULES_NOT_BUILT'].append('brite')
+        # No user specified '--with-brite' option, try to guess
+        # bake.py uses ../../build, while ns-3-dev uses ../click
+        brite_dir = os.path.join('..','BRITE')
+        brite_bake_build_dir = os.path.join('..', '..', 'build') 
+        brite_bake_lib_dir = os.path.join(brite_bake_build_dir, 'lib')
+        if os.path.exists(os.path.join(brite_dir, lib_to_check)):
+            conf.msg("Checking for BRITE location", ("%s (guessed)" % brite_dir))
+            conf.env['WITH_BRITE'] = os.path.abspath(brite_dir)
+# Below is not yet ready (bake does not install BRITE yet, just builds it)
+#        elif os.path.exists(os.path.join(brite_bake_lib_dir, lib_to_check)):
+#            conf.msg("Checking for BRITE location", ("%s (guessed)" % brite_bake_lib_dir))
+#            conf.env['WITH_BRITE'] = os.path.abspath(brite_bake_lib_dir)
+        else:
+            conf.report_optional_feature("brite", "BRITE Integration", False, 'BRITE not enabled (see option --with-brite)')
 
-        return
+            # Add this module to the list of modules that won't be built
+            # if they are enabled.
+            conf.env['MODULES_NOT_BUILT'].append('brite')
+            return
 
     test_code = '''
 #include "Brite.h"
diff -Naur ns-3.19/src/buildings/bindings/modulegen__gcc_ILP32.py ns-3.20/src/buildings/bindings/modulegen__gcc_ILP32.py
--- ns-3.19/src/buildings/bindings/modulegen__gcc_ILP32.py	2014-06-17 10:34:00.508636121 -0700
+++ ns-3.20/src/buildings/bindings/modulegen__gcc_ILP32.py	2014-06-17 10:33:13.838996386 -0700
@@ -72,6 +72,8 @@
     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-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]
@@ -88,6 +90,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')
     ## 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]
@@ -268,17 +272,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'])
-    typehandlers.add_type_alias('ns3::Vector3D', 'ns3::Vector')
-    typehandlers.add_type_alias('ns3::Vector3D*', 'ns3::Vector*')
-    typehandlers.add_type_alias('ns3::Vector3D&', 'ns3::Vector&')
+    typehandlers.add_type_alias(u'ns3::Vector3D', u'ns3::Vector')
+    typehandlers.add_type_alias(u'ns3::Vector3D*', u'ns3::Vector*')
+    typehandlers.add_type_alias(u'ns3::Vector3D&', u'ns3::Vector&')
     module.add_typedef(root_module['ns3::Vector3D'], 'Vector')
-    typehandlers.add_type_alias('ns3::Vector3DValue', 'ns3::VectorValue')
-    typehandlers.add_type_alias('ns3::Vector3DValue*', 'ns3::VectorValue*')
-    typehandlers.add_type_alias('ns3::Vector3DValue&', 'ns3::VectorValue&')
+    typehandlers.add_type_alias(u'ns3::Vector3DValue', u'ns3::VectorValue')
+    typehandlers.add_type_alias(u'ns3::Vector3DValue*', u'ns3::VectorValue*')
+    typehandlers.add_type_alias(u'ns3::Vector3DValue&', u'ns3::VectorValue&')
     module.add_typedef(root_module['ns3::Vector3DValue'], 'VectorValue')
-    typehandlers.add_type_alias('ns3::Vector3DChecker', 'ns3::VectorChecker')
-    typehandlers.add_type_alias('ns3::Vector3DChecker*', 'ns3::VectorChecker*')
-    typehandlers.add_type_alias('ns3::Vector3DChecker&', 'ns3::VectorChecker&')
+    typehandlers.add_type_alias(u'ns3::Vector3DChecker', u'ns3::VectorChecker')
+    typehandlers.add_type_alias(u'ns3::Vector3DChecker*', u'ns3::VectorChecker*')
+    typehandlers.add_type_alias(u'ns3::Vector3DChecker&', u'ns3::VectorChecker&')
     module.add_typedef(root_module['ns3::Vector3DChecker'], 'VectorChecker')
     
     ## Register a nested module for the namespace FatalImpl
@@ -302,12 +306,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
     
@@ -348,6 +352,7 @@
     register_Ns3ObjectFactory_methods(root_module, root_module['ns3::ObjectFactory'])
     register_Ns3SimpleRefCount__Ns3Object_Ns3ObjectBase_Ns3ObjectDeleter_methods(root_module, root_module['ns3::SimpleRefCount< ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter >'])
     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'])
@@ -1480,6 +1485,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('!=')
@@ -1707,62 +1720,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('==')
@@ -1771,6 +1740,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]
@@ -1811,6 +1782,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_Ns3Object_methods(root_module, cls):
@@ -2324,13 +2297,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('==')
@@ -2357,6 +2332,11 @@
     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', 
@@ -3398,12 +3378,12 @@
     cls.add_method('SetSystemLoss', 
                    'void', 
                    [param('double', 'systemLoss')])
-    ## propagation-loss-model.h (module 'propagation'): void ns3::FriisPropagationLossModel::SetMinDistance(double minDistance) [member function]
-    cls.add_method('SetMinDistance', 
+    ## propagation-loss-model.h (module 'propagation'): void ns3::FriisPropagationLossModel::SetMinLoss(double minLoss) [member function]
+    cls.add_method('SetMinLoss', 
                    'void', 
-                   [param('double', 'minDistance')])
-    ## propagation-loss-model.h (module 'propagation'): double ns3::FriisPropagationLossModel::GetMinDistance() const [member function]
-    cls.add_method('GetMinDistance', 
+                   [param('double', 'minLoss')])
+    ## propagation-loss-model.h (module 'propagation'): double ns3::FriisPropagationLossModel::GetMinLoss() const [member function]
+    cls.add_method('GetMinLoss', 
                    'double', 
                    [], 
                    is_const=True)
diff -Naur ns-3.19/src/buildings/bindings/modulegen__gcc_LP64.py ns-3.20/src/buildings/bindings/modulegen__gcc_LP64.py
--- ns-3.19/src/buildings/bindings/modulegen__gcc_LP64.py	2014-06-17 10:34:00.511636098 -0700
+++ ns-3.20/src/buildings/bindings/modulegen__gcc_LP64.py	2014-06-17 10:33:13.841996363 -0700
@@ -72,6 +72,8 @@
     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-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]
@@ -88,6 +90,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')
     ## 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]
@@ -268,17 +272,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'])
-    typehandlers.add_type_alias('ns3::Vector3D', 'ns3::Vector')
-    typehandlers.add_type_alias('ns3::Vector3D*', 'ns3::Vector*')
-    typehandlers.add_type_alias('ns3::Vector3D&', 'ns3::Vector&')
+    typehandlers.add_type_alias(u'ns3::Vector3D', u'ns3::Vector')
+    typehandlers.add_type_alias(u'ns3::Vector3D*', u'ns3::Vector*')
+    typehandlers.add_type_alias(u'ns3::Vector3D&', u'ns3::Vector&')
     module.add_typedef(root_module['ns3::Vector3D'], 'Vector')
-    typehandlers.add_type_alias('ns3::Vector3DValue', 'ns3::VectorValue')
-    typehandlers.add_type_alias('ns3::Vector3DValue*', 'ns3::VectorValue*')
-    typehandlers.add_type_alias('ns3::Vector3DValue&', 'ns3::VectorValue&')
+    typehandlers.add_type_alias(u'ns3::Vector3DValue', u'ns3::VectorValue')
+    typehandlers.add_type_alias(u'ns3::Vector3DValue*', u'ns3::VectorValue*')
+    typehandlers.add_type_alias(u'ns3::Vector3DValue&', u'ns3::VectorValue&')
     module.add_typedef(root_module['ns3::Vector3DValue'], 'VectorValue')
-    typehandlers.add_type_alias('ns3::Vector3DChecker', 'ns3::VectorChecker')
-    typehandlers.add_type_alias('ns3::Vector3DChecker*', 'ns3::VectorChecker*')
-    typehandlers.add_type_alias('ns3::Vector3DChecker&', 'ns3::VectorChecker&')
+    typehandlers.add_type_alias(u'ns3::Vector3DChecker', u'ns3::VectorChecker')
+    typehandlers.add_type_alias(u'ns3::Vector3DChecker*', u'ns3::VectorChecker*')
+    typehandlers.add_type_alias(u'ns3::Vector3DChecker&', u'ns3::VectorChecker&')
     module.add_typedef(root_module['ns3::Vector3DChecker'], 'VectorChecker')
     
     ## Register a nested module for the namespace FatalImpl
@@ -302,12 +306,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
     
@@ -348,6 +352,7 @@
     register_Ns3ObjectFactory_methods(root_module, root_module['ns3::ObjectFactory'])
     register_Ns3SimpleRefCount__Ns3Object_Ns3ObjectBase_Ns3ObjectDeleter_methods(root_module, root_module['ns3::SimpleRefCount< ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter >'])
     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'])
@@ -1480,6 +1485,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('!=')
@@ -1707,62 +1720,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('==')
@@ -1771,6 +1740,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]
@@ -1811,6 +1782,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_Ns3Object_methods(root_module, cls):
@@ -2324,13 +2297,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('==')
@@ -2357,6 +2332,11 @@
     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', 
@@ -3398,12 +3378,12 @@
     cls.add_method('SetSystemLoss', 
                    'void', 
                    [param('double', 'systemLoss')])
-    ## propagation-loss-model.h (module 'propagation'): void ns3::FriisPropagationLossModel::SetMinDistance(double minDistance) [member function]
-    cls.add_method('SetMinDistance', 
+    ## propagation-loss-model.h (module 'propagation'): void ns3::FriisPropagationLossModel::SetMinLoss(double minLoss) [member function]
+    cls.add_method('SetMinLoss', 
                    'void', 
-                   [param('double', 'minDistance')])
-    ## propagation-loss-model.h (module 'propagation'): double ns3::FriisPropagationLossModel::GetMinDistance() const [member function]
-    cls.add_method('GetMinDistance', 
+                   [param('double', 'minLoss')])
+    ## propagation-loss-model.h (module 'propagation'): double ns3::FriisPropagationLossModel::GetMinLoss() const [member function]
+    cls.add_method('GetMinLoss', 
                    'double', 
                    [], 
                    is_const=True)
diff -Naur ns-3.19/src/buildings/helper/building-allocator.cc ns-3.20/src/buildings/helper/building-allocator.cc
--- ns-3.19/src/buildings/helper/building-allocator.cc	2014-06-17 10:34:00.516636059 -0700
+++ ns-3.20/src/buildings/helper/building-allocator.cc	2014-06-17 10:33:13.846996324 -0700
@@ -31,8 +31,7 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (GridBuildingAllocator)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (GridBuildingAllocator);
 
 GridBuildingAllocator::GridBuildingAllocator ()
   : m_current (0)
diff -Naur ns-3.19/src/buildings/helper/building-position-allocator.cc ns-3.20/src/buildings/helper/building-position-allocator.cc
--- ns-3.19/src/buildings/helper/building-position-allocator.cc	2014-06-17 10:34:00.518636044 -0700
+++ ns-3.20/src/buildings/helper/building-position-allocator.cc	2014-06-17 10:33:13.847996317 -0700
@@ -35,10 +35,9 @@
 
 NS_LOG_COMPONENT_DEFINE ("BuildingPositionAllocator");
 
-namespace ns3 {
+using namespace ns3;
 
-NS_OBJECT_ENSURE_REGISTERED (RandomBuildingPositionAllocator)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (RandomBuildingPositionAllocator);
 
 
 RandomBuildingPositionAllocator::RandomBuildingPositionAllocator ()
@@ -105,8 +104,7 @@
 }
 
 
-NS_OBJECT_ENSURE_REGISTERED (RandomRoomPositionAllocator)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (RandomRoomPositionAllocator);
 
 
 RandomRoomPositionAllocator::RandomRoomPositionAllocator ()
@@ -194,8 +192,7 @@
 
 
 
-NS_OBJECT_ENSURE_REGISTERED (SameRoomPositionAllocator)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (SameRoomPositionAllocator);
 
 SameRoomPositionAllocator::SameRoomPositionAllocator ()
 {
@@ -285,8 +282,7 @@
   return 1;
 }
 
-NS_OBJECT_ENSURE_REGISTERED (FixedRoomPositionAllocator)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (FixedRoomPositionAllocator);
 
 
 FixedRoomPositionAllocator::FixedRoomPositionAllocator (
@@ -348,6 +344,3 @@
   m_rand->SetStream (stream);
   return 1;
 }
-
-
-} // namespace ns3
diff -Naur ns-3.19/src/buildings/model/building.cc ns-3.20/src/buildings/model/building.cc
--- ns-3.19/src/buildings/model/building.cc	2014-06-17 10:34:00.520636028 -0700
+++ ns-3.20/src/buildings/model/building.cc	2014-06-17 10:33:13.850996293 -0700
@@ -34,8 +34,7 @@
 namespace ns3 {
 
 
-NS_OBJECT_ENSURE_REGISTERED (Building)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (Building);
 
 TypeId
 Building::GetTypeId (void)
diff -Naur ns-3.19/src/buildings/model/building-list.cc ns-3.20/src/buildings/model/building-list.cc
--- ns-3.19/src/buildings/model/building-list.cc	2014-06-17 10:34:00.520636028 -0700
+++ ns-3.20/src/buildings/model/building-list.cc	2014-06-17 10:33:13.849996301 -0700
@@ -30,8 +30,7 @@
 
 namespace ns3 {
 
-NS_LOG_COMPONENT_DEFINE ("BuildingList")
-  ;
+NS_LOG_COMPONENT_DEFINE ("BuildingList");
 
 /**
  * \brief private implementation detail of the BuildingList API.
@@ -58,8 +57,7 @@
   std::vector<Ptr<Building> > m_buildings;
 };
 
-NS_OBJECT_ENSURE_REGISTERED (BuildingListPriv)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (BuildingListPriv);
 
 TypeId
 BuildingListPriv::GetTypeId (void)
diff -Naur ns-3.19/src/buildings/model/buildings-propagation-loss-model.cc ns-3.20/src/buildings/model/buildings-propagation-loss-model.cc
--- ns-3.19/src/buildings/model/buildings-propagation-loss-model.cc	2014-06-17 10:34:00.521636021 -0700
+++ ns-3.20/src/buildings/model/buildings-propagation-loss-model.cc	2014-06-17 10:33:13.851996286 -0700
@@ -35,8 +35,7 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (BuildingsPropagationLossModel)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (BuildingsPropagationLossModel);
 
 BuildingsPropagationLossModel::ShadowingLoss::ShadowingLoss ()
 {
diff -Naur ns-3.19/src/buildings/model/hybrid-buildings-propagation-loss-model.cc ns-3.20/src/buildings/model/hybrid-buildings-propagation-loss-model.cc
--- ns-3.19/src/buildings/model/hybrid-buildings-propagation-loss-model.cc	2014-06-17 10:34:00.522636013 -0700
+++ ns-3.20/src/buildings/model/hybrid-buildings-propagation-loss-model.cc	2014-06-17 10:33:13.851996286 -0700
@@ -41,8 +41,7 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (HybridBuildingsPropagationLossModel)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (HybridBuildingsPropagationLossModel);
 
 
 
diff -Naur ns-3.19/src/buildings/model/itu-r-1238-propagation-loss-model.cc ns-3.20/src/buildings/model/itu-r-1238-propagation-loss-model.cc
--- ns-3.19/src/buildings/model/itu-r-1238-propagation-loss-model.cc	2014-06-17 10:34:00.523636005 -0700
+++ ns-3.20/src/buildings/model/itu-r-1238-propagation-loss-model.cc	2014-06-17 10:33:13.852996278 -0700
@@ -32,8 +32,7 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (ItuR1238PropagationLossModel)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (ItuR1238PropagationLossModel);
 
 
 TypeId
diff -Naur ns-3.19/src/buildings/model/mobility-building-info.cc ns-3.20/src/buildings/model/mobility-building-info.cc
--- ns-3.19/src/buildings/model/mobility-building-info.cc	2014-06-17 10:34:00.524635997 -0700
+++ ns-3.20/src/buildings/model/mobility-building-info.cc	2014-06-17 10:33:13.853996270 -0700
@@ -30,8 +30,7 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (MobilityBuildingInfo)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (MobilityBuildingInfo);
 
 TypeId
 MobilityBuildingInfo::GetTypeId (void)
diff -Naur ns-3.19/src/buildings/model/oh-buildings-propagation-loss-model.cc ns-3.20/src/buildings/model/oh-buildings-propagation-loss-model.cc
--- ns-3.19/src/buildings/model/oh-buildings-propagation-loss-model.cc	2014-06-17 10:34:00.524635997 -0700
+++ ns-3.20/src/buildings/model/oh-buildings-propagation-loss-model.cc	2014-06-17 10:33:13.853996270 -0700
@@ -35,8 +35,7 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (OhBuildingsPropagationLossModel)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (OhBuildingsPropagationLossModel);
 
 
 
diff -Naur ns-3.19/src/buildings/test/building-position-allocator-test.cc ns-3.20/src/buildings/test/building-position-allocator-test.cc
--- ns-3.19/src/buildings/test/building-position-allocator-test.cc	2014-06-17 10:34:00.525635990 -0700
+++ ns-3.20/src/buildings/test/building-position-allocator-test.cc	2014-06-17 10:33:13.854996262 -0700
@@ -34,8 +34,7 @@
 
 NS_LOG_COMPONENT_DEFINE ("BuildingPositionAllocatorTest");
 
-namespace ns3 {
-
+using namespace ns3;
 
 
 struct Room
@@ -242,6 +241,3 @@
 }
 
 static BuildingPositionAllocatorTestSuite buildingsPositionAllocatorTestSuiteInstance;
-
-} // namespace ns3
-
diff -Naur ns-3.19/src/buildings/test/buildings-helper-test.cc ns-3.20/src/buildings/test/buildings-helper-test.cc
--- ns-3.19/src/buildings/test/buildings-helper-test.cc	2014-06-17 10:34:00.526635982 -0700
+++ ns-3.20/src/buildings/test/buildings-helper-test.cc	2014-06-17 10:33:13.855996255 -0700
@@ -31,7 +31,7 @@
 
 NS_LOG_COMPONENT_DEFINE ("BuildingsHelperTest");
 
-namespace ns3 {
+using namespace ns3;
 
 
 struct PositionInBuilding
@@ -325,6 +325,3 @@
 }
 
 static BuildingsHelperTestSuite buildingsHelperAntennaTestSuiteInstance;
-
-} // namespace ns3
-
diff -Naur ns-3.19/src/buildings/test/buildings-pathloss-test.cc ns-3.20/src/buildings/test/buildings-pathloss-test.cc
--- ns-3.19/src/buildings/test/buildings-pathloss-test.cc	2014-06-17 10:34:00.526635982 -0700
+++ ns-3.20/src/buildings/test/buildings-pathloss-test.cc	2014-06-17 10:33:13.855996255 -0700
@@ -36,7 +36,7 @@
 
 NS_LOG_COMPONENT_DEFINE ("BuildingsPathlossTest");
 
-namespace ns3 {
+using namespace ns3;
 
 
 /**
@@ -271,7 +271,3 @@
   BuildingsHelper::MakeConsistent (mm); 
   return mm;
 }
-
-
-
-} // namespace ns3
diff -Naur ns-3.19/src/buildings/test/buildings-pathloss-test.h ns-3.20/src/buildings/test/buildings-pathloss-test.h
--- ns-3.19/src/buildings/test/buildings-pathloss-test.h	2014-06-17 10:34:00.527635974 -0700
+++ ns-3.20/src/buildings/test/buildings-pathloss-test.h	2014-06-17 10:33:13.856996247 -0700
@@ -25,7 +25,7 @@
 #include <ns3/hybrid-buildings-propagation-loss-model.h>
 
 
-namespace ns3 {
+using namespace ns3;
 
 /**
 * Test 1.1 pathloss calculation
@@ -58,6 +58,3 @@
 
 
 #endif /* BUILDING_PATHLOSS_TEST_H */
-
-
-} // namespace ns3
diff -Naur ns-3.19/src/buildings/test/buildings-shadowing-test.cc ns-3.20/src/buildings/test/buildings-shadowing-test.cc
--- ns-3.19/src/buildings/test/buildings-shadowing-test.cc	2014-06-17 10:34:00.527635974 -0700
+++ ns-3.20/src/buildings/test/buildings-shadowing-test.cc	2014-06-17 10:33:13.856996247 -0700
@@ -36,7 +36,7 @@
 NS_LOG_COMPONENT_DEFINE ("BuildingsShadowingTest");
 
 
-namespace ns3 {
+using namespace ns3;
 
 
 
@@ -228,8 +228,3 @@
   BuildingsHelper::MakeConsistent (mm); 
   return mm;
 }
-
-
-
-
-} // namespace ns3
diff -Naur ns-3.19/src/buildings/test/buildings-shadowing-test.h ns-3.20/src/buildings/test/buildings-shadowing-test.h
--- ns-3.19/src/buildings/test/buildings-shadowing-test.h	2014-06-17 10:34:00.528635967 -0700
+++ ns-3.20/src/buildings/test/buildings-shadowing-test.h	2014-06-17 10:33:13.857996239 -0700
@@ -25,7 +25,7 @@
 
 
 
-namespace ns3 {
+using namespace ns3;
 
 /**
  * Test shadowing calculation
@@ -55,5 +55,3 @@
 };
 
 #endif /*BUILDINGS_SHADOWING_TEST_H*/
-
-} // namespace ns3
diff -Naur ns-3.19/src/click/bindings/modulegen__gcc_ILP32.py ns-3.20/src/click/bindings/modulegen__gcc_ILP32.py
--- ns-3.19/src/click/bindings/modulegen__gcc_ILP32.py	2014-06-17 10:34:00.533635928 -0700
+++ ns-3.20/src/click/bindings/modulegen__gcc_ILP32.py	2014-06-17 10:33:13.861996209 -0700
@@ -46,8 +46,6 @@
     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')
-    ## event-id.h (module 'core'): ns3::EventId [class]
-    module.add_class('EventId', import_from_module='ns.core')
     ## hash.h (module 'core'): ns3::Hasher [class]
     module.add_class('Hasher', import_from_module='ns.core')
     ## inet6-socket-address.h (module 'network'): ns3::Inet6SocketAddress [class]
@@ -58,34 +56,6 @@
     module.add_class('InetSocketAddress', import_from_module='ns.network')
     ## inet-socket-address.h (module 'network'): ns3::InetSocketAddress [class]
     root_module['ns3::InetSocketAddress'].implicitly_converts_to(root_module['ns3::Address'])
-    ## int-to-type.h (module 'core'): ns3::IntToType<0> [struct]
-    module.add_class('IntToType', import_from_module='ns.core', template_parameters=['0'])
-    ## int-to-type.h (module 'core'): ns3::IntToType<0>::v_e [enumeration]
-    module.add_enum('v_e', ['value'], outer_class=root_module['ns3::IntToType< 0 >'], import_from_module='ns.core')
-    ## int-to-type.h (module 'core'): ns3::IntToType<1> [struct]
-    module.add_class('IntToType', import_from_module='ns.core', template_parameters=['1'])
-    ## int-to-type.h (module 'core'): ns3::IntToType<1>::v_e [enumeration]
-    module.add_enum('v_e', ['value'], outer_class=root_module['ns3::IntToType< 1 >'], import_from_module='ns.core')
-    ## int-to-type.h (module 'core'): ns3::IntToType<2> [struct]
-    module.add_class('IntToType', import_from_module='ns.core', template_parameters=['2'])
-    ## int-to-type.h (module 'core'): ns3::IntToType<2>::v_e [enumeration]
-    module.add_enum('v_e', ['value'], outer_class=root_module['ns3::IntToType< 2 >'], import_from_module='ns.core')
-    ## int-to-type.h (module 'core'): ns3::IntToType<3> [struct]
-    module.add_class('IntToType', import_from_module='ns.core', template_parameters=['3'])
-    ## int-to-type.h (module 'core'): ns3::IntToType<3>::v_e [enumeration]
-    module.add_enum('v_e', ['value'], outer_class=root_module['ns3::IntToType< 3 >'], import_from_module='ns.core')
-    ## int-to-type.h (module 'core'): ns3::IntToType<4> [struct]
-    module.add_class('IntToType', import_from_module='ns.core', template_parameters=['4'])
-    ## int-to-type.h (module 'core'): ns3::IntToType<4>::v_e [enumeration]
-    module.add_enum('v_e', ['value'], outer_class=root_module['ns3::IntToType< 4 >'], import_from_module='ns.core')
-    ## int-to-type.h (module 'core'): ns3::IntToType<5> [struct]
-    module.add_class('IntToType', import_from_module='ns.core', template_parameters=['5'])
-    ## int-to-type.h (module 'core'): ns3::IntToType<5>::v_e [enumeration]
-    module.add_enum('v_e', ['value'], outer_class=root_module['ns3::IntToType< 5 >'], import_from_module='ns.core')
-    ## int-to-type.h (module 'core'): ns3::IntToType<6> [struct]
-    module.add_class('IntToType', import_from_module='ns.core', template_parameters=['6'])
-    ## int-to-type.h (module 'core'): ns3::IntToType<6>::v_e [enumeration]
-    module.add_enum('v_e', ['value'], outer_class=root_module['ns3::IntToType< 6 >'], 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]
@@ -100,12 +70,6 @@
     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-interface-address.h (module 'internet'): ns3::Ipv6InterfaceAddress [class]
-    module.add_class('Ipv6InterfaceAddress', import_from_module='ns.internet')
-    ## ipv6-interface-address.h (module 'internet'): ns3::Ipv6InterfaceAddress::State_e [enumeration]
-    module.add_enum('State_e', ['TENTATIVE', 'DEPRECATED', 'PREFERRED', 'PERMANENT', 'HOMEADDRESS', 'TENTATIVE_OPTIMISTIC', 'INVALID'], outer_class=root_module['ns3::Ipv6InterfaceAddress'], import_from_module='ns.internet')
-    ## ipv6-interface-address.h (module 'internet'): ns3::Ipv6InterfaceAddress::Scope_e [enumeration]
-    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')
     ## log.h (module 'core'): ns3::LogComponent [class]
@@ -114,8 +78,6 @@
     module.add_class('ObjectBase', allow_subclassing=True, import_from_module='ns.core')
     ## object.h (module 'core'): ns3::ObjectDeleter [struct]
     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]
@@ -136,22 +98,12 @@
     module.add_enum('TagData_e', ['MAX_SIZE'], outer_class=root_module['ns3::PacketTagList::TagData'], import_from_module='ns.network')
     ## 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'))
-    ## simulator.h (module 'core'): ns3::Simulator [class]
-    module.add_class('Simulator', destructor_visibility='private', import_from_module='ns.core')
     ## system-wall-clock-ms.h (module 'core'): ns3::SystemWallClockMs [class]
     module.add_class('SystemWallClockMs', import_from_module='ns.core')
     ## 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')
-    ## timer.h (module 'core'): ns3::Timer [class]
-    module.add_class('Timer', import_from_module='ns.core')
-    ## timer.h (module 'core'): ns3::Timer::DestroyPolicy [enumeration]
-    module.add_enum('DestroyPolicy', ['CANCEL_ON_DESTROY', 'REMOVE_ON_DESTROY', 'CHECK_ON_DESTROY'], outer_class=root_module['ns3::Timer'], import_from_module='ns.core')
-    ## timer.h (module 'core'): ns3::Timer::State [enumeration]
-    module.add_enum('State', ['RUNNING', 'EXPIRED', 'SUSPENDED'], outer_class=root_module['ns3::Timer'], import_from_module='ns.core')
-    ## timer-impl.h (module 'core'): ns3::TimerImpl [class]
-    module.add_class('TimerImpl', allow_subclassing=True, 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]
@@ -162,8 +114,6 @@
     module.add_class('TraceSourceInformation', import_from_module='ns.core', outer_class=root_module['ns3::TypeId'])
     ## 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]
-    module.add_class('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]
@@ -174,10 +124,6 @@
     module.add_enum('DscpType', ['DscpDefault', 'DSCP_CS1', 'DSCP_AF11', 'DSCP_AF12', 'DSCP_AF13', 'DSCP_CS2', 'DSCP_AF21', 'DSCP_AF22', 'DSCP_AF23', 'DSCP_CS3', 'DSCP_AF31', 'DSCP_AF32', 'DSCP_AF33', 'DSCP_CS4', 'DSCP_AF41', 'DSCP_AF42', 'DSCP_AF43', 'DSCP_CS5', 'DSCP_EF', 'DSCP_CS6', 'DSCP_CS7'], outer_class=root_module['ns3::Ipv4Header'], import_from_module='ns.internet')
     ## ipv4-header.h (module 'internet'): ns3::Ipv4Header::EcnType [enumeration]
     module.add_enum('EcnType', ['ECN_NotECT', 'ECN_ECT1', 'ECN_ECT0', 'ECN_CE'], outer_class=root_module['ns3::Ipv4Header'], import_from_module='ns.internet')
-    ## ipv6-header.h (module 'internet'): ns3::Ipv6Header [class]
-    module.add_class('Ipv6Header', import_from_module='ns.internet', parent=root_module['ns3::Header'])
-    ## ipv6-header.h (module 'internet'): ns3::Ipv6Header::NextHeader_e [enumeration]
-    module.add_enum('NextHeader_e', ['IPV6_EXT_HOP_BY_HOP', 'IPV6_IPV4', 'IPV6_TCP', 'IPV6_UDP', 'IPV6_IPV6', 'IPV6_EXT_ROUTING', 'IPV6_EXT_FRAGMENTATION', 'IPV6_EXT_CONFIDENTIALITY', 'IPV6_EXT_AUTHENTIFICATION', 'IPV6_ICMPV6', 'IPV6_EXT_END', 'IPV6_EXT_DESTINATION', 'IPV6_SCTP', 'IPV6_EXT_MOBILITY', 'IPV6_UDP_LITE'], outer_class=root_module['ns3::Ipv6Header'], import_from_module='ns.internet')
     ## 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]
@@ -190,8 +136,6 @@
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::AttributeValue', 'ns3::empty', 'ns3::DefaultDeleter<ns3::AttributeValue>'], 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::CallbackImplBase, ns3::empty, ns3::DefaultDeleter<ns3::CallbackImplBase> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::CallbackImplBase', 'ns3::empty', 'ns3::DefaultDeleter<ns3::CallbackImplBase>'], 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::EventImpl, ns3::empty, ns3::DefaultDeleter<ns3::EventImpl> > [class]
-    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::Ipv4MulticastRoute, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4MulticastRoute> > [class]
@@ -224,12 +168,6 @@
     module.add_class('SocketIpv6TclassTag', import_from_module='ns.network', parent=root_module['ns3::Tag'])
     ## socket.h (module 'network'): ns3::SocketSetDontFragmentTag [class]
     module.add_class('SocketSetDontFragmentTag', import_from_module='ns.network', parent=root_module['ns3::Tag'])
-    ## nstime.h (module 'core'): ns3::Time [class]
-    module.add_class('Time', import_from_module='ns.core')
-    ## nstime.h (module 'core'): ns3::Time::Unit [enumeration]
-    module.add_enum('Unit', ['S', 'MS', 'US', 'NS', 'PS', 'FS', 'LAST'], outer_class=root_module['ns3::Time'], import_from_module='ns.core')
-    ## nstime.h (module 'core'): ns3::Time [class]
-    root_module['ns3::Time'].implicitly_converts_to(root_module['ns3::int64x64_t'])
     ## trace-source-accessor.h (module 'core'): ns3::TraceSourceAccessor [class]
     module.add_class('TraceSourceAccessor', import_from_module='ns.core', parent=root_module['ns3::SimpleRefCount< ns3::TraceSourceAccessor, ns3::empty, ns3::DefaultDeleter<ns3::TraceSourceAccessor> >'])
     ## trailer.h (module 'network'): ns3::Trailer [class]
@@ -248,12 +186,6 @@
     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'])
-    ## 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> >'])
-    ## ip-l4-protocol.h (module 'internet'): ns3::IpL4Protocol [class]
-    module.add_class('IpL4Protocol', import_from_module='ns.internet', parent=root_module['ns3::Object'])
-    ## ip-l4-protocol.h (module 'internet'): ns3::IpL4Protocol::RxStatus [enumeration]
-    module.add_enum('RxStatus', ['RX_OK', 'RX_CSUM_FAILED', 'RX_ENDPOINT_CLOSED', 'RX_ENDPOINT_UNREACH'], outer_class=root_module['ns3::IpL4Protocol'], import_from_module='ns.internet')
     ## ipv4.h (module 'internet'): ns3::Ipv4 [class]
     module.add_class('Ipv4', import_from_module='ns.internet', parent=root_module['ns3::Object'])
     ## ipv4-address.h (module 'network'): ns3::Ipv4AddressChecker [class]
@@ -278,8 +210,6 @@
     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-interface.h (module 'internet'): ns3::Ipv6Interface [class]
-    module.add_class('Ipv6Interface', import_from_module='ns.internet', parent=root_module['ns3::Object'])
     ## 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]
@@ -290,16 +220,10 @@
     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> >'])
-    ## object-factory.h (module 'core'): ns3::ObjectFactoryChecker [class]
-    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'])
     ## output-stream-wrapper.h (module 'network'): ns3::OutputStreamWrapper [class]
     module.add_class('OutputStreamWrapper', import_from_module='ns.network', parent=root_module['ns3::SimpleRefCount< ns3::OutputStreamWrapper, ns3::empty, ns3::DefaultDeleter<ns3::OutputStreamWrapper> >'])
     ## 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> >'])
-    ## nstime.h (module 'core'): ns3::TimeValue [class]
-    module.add_class('TimeValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## type-id.h (module 'core'): ns3::TypeIdChecker [class]
     module.add_class('TypeIdChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## type-id.h (module 'core'): ns3::TypeIdValue [class]
@@ -376,27 +300,17 @@
     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_Ns3EventId_methods(root_module, root_module['ns3::EventId'])
     register_Ns3Hasher_methods(root_module, root_module['ns3::Hasher'])
     register_Ns3Inet6SocketAddress_methods(root_module, root_module['ns3::Inet6SocketAddress'])
     register_Ns3InetSocketAddress_methods(root_module, root_module['ns3::InetSocketAddress'])
-    register_Ns3IntToType__0_methods(root_module, root_module['ns3::IntToType< 0 >'])
-    register_Ns3IntToType__1_methods(root_module, root_module['ns3::IntToType< 1 >'])
-    register_Ns3IntToType__2_methods(root_module, root_module['ns3::IntToType< 2 >'])
-    register_Ns3IntToType__3_methods(root_module, root_module['ns3::IntToType< 3 >'])
-    register_Ns3IntToType__4_methods(root_module, root_module['ns3::IntToType< 4 >'])
-    register_Ns3IntToType__5_methods(root_module, root_module['ns3::IntToType< 5 >'])
-    register_Ns3IntToType__6_methods(root_module, root_module['ns3::IntToType< 6 >'])
     register_Ns3Ipv4Address_methods(root_module, root_module['ns3::Ipv4Address'])
     register_Ns3Ipv4InterfaceAddress_methods(root_module, root_module['ns3::Ipv4InterfaceAddress'])
     register_Ns3Ipv4Mask_methods(root_module, root_module['ns3::Ipv4Mask'])
     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_Ns3LogComponent_methods(root_module, root_module['ns3::LogComponent'])
     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'])
@@ -405,28 +319,22 @@
     register_Ns3PacketTagList_methods(root_module, root_module['ns3::PacketTagList'])
     register_Ns3PacketTagListTagData_methods(root_module, root_module['ns3::PacketTagList::TagData'])
     register_Ns3SimpleRefCount__Ns3Object_Ns3ObjectBase_Ns3ObjectDeleter_methods(root_module, root_module['ns3::SimpleRefCount< ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter >'])
-    register_Ns3Simulator_methods(root_module, root_module['ns3::Simulator'])
     register_Ns3SystemWallClockMs_methods(root_module, root_module['ns3::SystemWallClockMs'])
     register_Ns3Tag_methods(root_module, root_module['ns3::Tag'])
     register_Ns3TagBuffer_methods(root_module, root_module['ns3::TagBuffer'])
-    register_Ns3Timer_methods(root_module, root_module['ns3::Timer'])
-    register_Ns3TimerImpl_methods(root_module, root_module['ns3::TimerImpl'])
     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_Ns3Empty_methods(root_module, root_module['ns3::empty'])
-    register_Ns3Int64x64_t_methods(root_module, root_module['ns3::int64x64_t'])
     register_Ns3Chunk_methods(root_module, root_module['ns3::Chunk'])
     register_Ns3Header_methods(root_module, root_module['ns3::Header'])
     register_Ns3Ipv4Header_methods(root_module, root_module['ns3::Ipv4Header'])
-    register_Ns3Ipv6Header_methods(root_module, root_module['ns3::Ipv6Header'])
     register_Ns3Object_methods(root_module, root_module['ns3::Object'])
     register_Ns3ObjectAggregateIterator_methods(root_module, root_module['ns3::Object::AggregateIterator'])
     register_Ns3SimpleRefCount__Ns3AttributeAccessor_Ns3Empty_Ns3DefaultDeleter__lt__ns3AttributeAccessor__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::AttributeAccessor, ns3::empty, ns3::DefaultDeleter<ns3::AttributeAccessor> >'])
     register_Ns3SimpleRefCount__Ns3AttributeChecker_Ns3Empty_Ns3DefaultDeleter__lt__ns3AttributeChecker__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::AttributeChecker, ns3::empty, ns3::DefaultDeleter<ns3::AttributeChecker> >'])
     register_Ns3SimpleRefCount__Ns3AttributeValue_Ns3Empty_Ns3DefaultDeleter__lt__ns3AttributeValue__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::AttributeValue, ns3::empty, ns3::DefaultDeleter<ns3::AttributeValue> >'])
     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__Ns3Ipv4MulticastRoute_Ns3Empty_Ns3DefaultDeleter__lt__ns3Ipv4MulticastRoute__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Ipv4MulticastRoute, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4MulticastRoute> >'])
     register_Ns3SimpleRefCount__Ns3Ipv4Route_Ns3Empty_Ns3DefaultDeleter__lt__ns3Ipv4Route__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Ipv4Route, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4Route> >'])
@@ -441,7 +349,6 @@
     register_Ns3SocketIpv6HopLimitTag_methods(root_module, root_module['ns3::SocketIpv6HopLimitTag'])
     register_Ns3SocketIpv6TclassTag_methods(root_module, root_module['ns3::SocketIpv6TclassTag'])
     register_Ns3SocketSetDontFragmentTag_methods(root_module, root_module['ns3::SocketSetDontFragmentTag'])
-    register_Ns3Time_methods(root_module, root_module['ns3::Time'])
     register_Ns3TraceSourceAccessor_methods(root_module, root_module['ns3::TraceSourceAccessor'])
     register_Ns3Trailer_methods(root_module, root_module['ns3::Trailer'])
     register_Ns3AttributeAccessor_methods(root_module, root_module['ns3::AttributeAccessor'])
@@ -451,8 +358,6 @@
     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_Ns3EventImpl_methods(root_module, root_module['ns3::EventImpl'])
-    register_Ns3IpL4Protocol_methods(root_module, root_module['ns3::IpL4Protocol'])
     register_Ns3Ipv4_methods(root_module, root_module['ns3::Ipv4'])
     register_Ns3Ipv4AddressChecker_methods(root_module, root_module['ns3::Ipv4AddressChecker'])
     register_Ns3Ipv4AddressValue_methods(root_module, root_module['ns3::Ipv4AddressValue'])
@@ -465,16 +370,12 @@
     register_Ns3Ipv4RoutingProtocol_methods(root_module, root_module['ns3::Ipv4RoutingProtocol'])
     register_Ns3Ipv6AddressChecker_methods(root_module, root_module['ns3::Ipv6AddressChecker'])
     register_Ns3Ipv6AddressValue_methods(root_module, root_module['ns3::Ipv6AddressValue'])
-    register_Ns3Ipv6Interface_methods(root_module, root_module['ns3::Ipv6Interface'])
     register_Ns3Ipv6PrefixChecker_methods(root_module, root_module['ns3::Ipv6PrefixChecker'])
     register_Ns3Ipv6PrefixValue_methods(root_module, root_module['ns3::Ipv6PrefixValue'])
     register_Ns3NetDevice_methods(root_module, root_module['ns3::NetDevice'])
     register_Ns3NixVector_methods(root_module, root_module['ns3::NixVector'])
-    register_Ns3ObjectFactoryChecker_methods(root_module, root_module['ns3::ObjectFactoryChecker'])
-    register_Ns3ObjectFactoryValue_methods(root_module, root_module['ns3::ObjectFactoryValue'])
     register_Ns3OutputStreamWrapper_methods(root_module, root_module['ns3::OutputStreamWrapper'])
     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'])
@@ -965,51 +866,6 @@
                    is_static=True, visibility='protected')
     return
 
-def register_Ns3EventId_methods(root_module, cls):
-    cls.add_binary_comparison_operator('!=')
-    cls.add_binary_comparison_operator('==')
-    ## event-id.h (module 'core'): ns3::EventId::EventId(ns3::EventId const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::EventId const &', 'arg0')])
-    ## event-id.h (module 'core'): ns3::EventId::EventId() [constructor]
-    cls.add_constructor([])
-    ## event-id.h (module 'core'): ns3::EventId::EventId(ns3::Ptr<ns3::EventImpl> const & impl, uint64_t ts, uint32_t context, uint32_t uid) [constructor]
-    cls.add_constructor([param('ns3::Ptr< ns3::EventImpl > const &', 'impl'), param('uint64_t', 'ts'), param('uint32_t', 'context'), param('uint32_t', 'uid')])
-    ## event-id.h (module 'core'): void ns3::EventId::Cancel() [member function]
-    cls.add_method('Cancel', 
-                   'void', 
-                   [])
-    ## event-id.h (module 'core'): uint32_t ns3::EventId::GetContext() const [member function]
-    cls.add_method('GetContext', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    ## event-id.h (module 'core'): uint64_t ns3::EventId::GetTs() const [member function]
-    cls.add_method('GetTs', 
-                   'uint64_t', 
-                   [], 
-                   is_const=True)
-    ## event-id.h (module 'core'): uint32_t ns3::EventId::GetUid() const [member function]
-    cls.add_method('GetUid', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    ## event-id.h (module 'core'): bool ns3::EventId::IsExpired() const [member function]
-    cls.add_method('IsExpired', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## event-id.h (module 'core'): bool ns3::EventId::IsRunning() const [member function]
-    cls.add_method('IsRunning', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## event-id.h (module 'core'): ns3::EventImpl * ns3::EventId::PeekEventImpl() const [member function]
-    cls.add_method('PeekEventImpl', 
-                   'ns3::EventImpl *', 
-                   [], 
-                   is_const=True)
-    return
-
 def register_Ns3Hasher_methods(root_module, cls):
     ## hash.h (module 'core'): ns3::Hasher::Hasher(ns3::Hasher const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::Hasher const &', 'arg0')])
@@ -1125,55 +981,6 @@
                    [param('uint16_t', 'port')])
     return
 
-def register_Ns3IntToType__0_methods(root_module, cls):
-    ## int-to-type.h (module 'core'): ns3::IntToType<0>::IntToType() [constructor]
-    cls.add_constructor([])
-    ## int-to-type.h (module 'core'): ns3::IntToType<0>::IntToType(ns3::IntToType<0> const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::IntToType< 0 > const &', 'arg0')])
-    return
-
-def register_Ns3IntToType__1_methods(root_module, cls):
-    ## int-to-type.h (module 'core'): ns3::IntToType<1>::IntToType() [constructor]
-    cls.add_constructor([])
-    ## int-to-type.h (module 'core'): ns3::IntToType<1>::IntToType(ns3::IntToType<1> const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::IntToType< 1 > const &', 'arg0')])
-    return
-
-def register_Ns3IntToType__2_methods(root_module, cls):
-    ## int-to-type.h (module 'core'): ns3::IntToType<2>::IntToType() [constructor]
-    cls.add_constructor([])
-    ## int-to-type.h (module 'core'): ns3::IntToType<2>::IntToType(ns3::IntToType<2> const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::IntToType< 2 > const &', 'arg0')])
-    return
-
-def register_Ns3IntToType__3_methods(root_module, cls):
-    ## int-to-type.h (module 'core'): ns3::IntToType<3>::IntToType() [constructor]
-    cls.add_constructor([])
-    ## int-to-type.h (module 'core'): ns3::IntToType<3>::IntToType(ns3::IntToType<3> const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::IntToType< 3 > const &', 'arg0')])
-    return
-
-def register_Ns3IntToType__4_methods(root_module, cls):
-    ## int-to-type.h (module 'core'): ns3::IntToType<4>::IntToType() [constructor]
-    cls.add_constructor([])
-    ## int-to-type.h (module 'core'): ns3::IntToType<4>::IntToType(ns3::IntToType<4> const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::IntToType< 4 > const &', 'arg0')])
-    return
-
-def register_Ns3IntToType__5_methods(root_module, cls):
-    ## int-to-type.h (module 'core'): ns3::IntToType<5>::IntToType() [constructor]
-    cls.add_constructor([])
-    ## int-to-type.h (module 'core'): ns3::IntToType<5>::IntToType(ns3::IntToType<5> const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::IntToType< 5 > const &', 'arg0')])
-    return
-
-def register_Ns3IntToType__6_methods(root_module, cls):
-    ## int-to-type.h (module 'core'): ns3::IntToType<6>::IntToType() [constructor]
-    cls.add_constructor([])
-    ## int-to-type.h (module 'core'): ns3::IntToType<6>::IntToType(ns3::IntToType<6> const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::IntToType< 6 > const &', 'arg0')])
-    return
-
 def register_Ns3Ipv4Address_methods(root_module, cls):
     cls.add_binary_comparison_operator('<')
     cls.add_binary_comparison_operator('!=')
@@ -1510,10 +1317,11 @@
                    'bool', 
                    [param('ns3::Ipv6Address const &', 'other')], 
                    is_const=True)
-    ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsIpv4MappedAddress() [member function]
+    ## 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', 
@@ -1604,61 +1412,6 @@
                    [param('uint8_t *', 'address')])
     return
 
-def register_Ns3Ipv6InterfaceAddress_methods(root_module, cls):
-    cls.add_binary_comparison_operator('!=')
-    cls.add_output_stream_operator()
-    cls.add_binary_comparison_operator('==')
-    ## ipv6-interface-address.h (module 'internet'): ns3::Ipv6InterfaceAddress::Ipv6InterfaceAddress() [constructor]
-    cls.add_constructor([])
-    ## ipv6-interface-address.h (module 'internet'): ns3::Ipv6InterfaceAddress::Ipv6InterfaceAddress(ns3::Ipv6Address address) [constructor]
-    cls.add_constructor([param('ns3::Ipv6Address', 'address')])
-    ## ipv6-interface-address.h (module 'internet'): ns3::Ipv6InterfaceAddress::Ipv6InterfaceAddress(ns3::Ipv6Address address, ns3::Ipv6Prefix prefix) [constructor]
-    cls.add_constructor([param('ns3::Ipv6Address', 'address'), param('ns3::Ipv6Prefix', 'prefix')])
-    ## ipv6-interface-address.h (module 'internet'): ns3::Ipv6InterfaceAddress::Ipv6InterfaceAddress(ns3::Ipv6InterfaceAddress const & o) [copy constructor]
-    cls.add_constructor([param('ns3::Ipv6InterfaceAddress const &', 'o')])
-    ## ipv6-interface-address.h (module 'internet'): ns3::Ipv6Address ns3::Ipv6InterfaceAddress::GetAddress() const [member function]
-    cls.add_method('GetAddress', 
-                   'ns3::Ipv6Address', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface-address.h (module 'internet'): uint32_t ns3::Ipv6InterfaceAddress::GetNsDadUid() const [member function]
-    cls.add_method('GetNsDadUid', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface-address.h (module 'internet'): ns3::Ipv6Prefix ns3::Ipv6InterfaceAddress::GetPrefix() const [member function]
-    cls.add_method('GetPrefix', 
-                   'ns3::Ipv6Prefix', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface-address.h (module 'internet'): ns3::Ipv6InterfaceAddress::Scope_e ns3::Ipv6InterfaceAddress::GetScope() const [member function]
-    cls.add_method('GetScope', 
-                   'ns3::Ipv6InterfaceAddress::Scope_e', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface-address.h (module 'internet'): ns3::Ipv6InterfaceAddress::State_e ns3::Ipv6InterfaceAddress::GetState() const [member function]
-    cls.add_method('GetState', 
-                   'ns3::Ipv6InterfaceAddress::State_e', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface-address.h (module 'internet'): void ns3::Ipv6InterfaceAddress::SetAddress(ns3::Ipv6Address address) [member function]
-    cls.add_method('SetAddress', 
-                   'void', 
-                   [param('ns3::Ipv6Address', 'address')])
-    ## ipv6-interface-address.h (module 'internet'): void ns3::Ipv6InterfaceAddress::SetNsDadUid(uint32_t uid) [member function]
-    cls.add_method('SetNsDadUid', 
-                   'void', 
-                   [param('uint32_t', 'uid')])
-    ## ipv6-interface-address.h (module 'internet'): void ns3::Ipv6InterfaceAddress::SetScope(ns3::Ipv6InterfaceAddress::Scope_e scope) [member function]
-    cls.add_method('SetScope', 
-                   'void', 
-                   [param('ns3::Ipv6InterfaceAddress::Scope_e', 'scope')])
-    ## ipv6-interface-address.h (module 'internet'): void ns3::Ipv6InterfaceAddress::SetState(ns3::Ipv6InterfaceAddress::State_e state) [member function]
-    cls.add_method('SetState', 
-                   'void', 
-                   [param('ns3::Ipv6InterfaceAddress::State_e', 'state')])
-    return
-
 def register_Ns3Ipv6Prefix_methods(root_module, cls):
     cls.add_binary_comparison_operator('!=')
     cls.add_output_stream_operator()
@@ -1720,8 +1473,8 @@
 def register_Ns3LogComponent_methods(root_module, cls):
     ## log.h (module 'core'): ns3::LogComponent::LogComponent(ns3::LogComponent const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::LogComponent const &', 'arg0')])
-    ## log.h (module 'core'): ns3::LogComponent::LogComponent(char const * name) [constructor]
-    cls.add_constructor([param('char const *', 'name')])
+    ## log.h (module 'core'): ns3::LogComponent::LogComponent(std::string const & name) [constructor]
+    cls.add_constructor([param('std::string const &', 'name')])
     ## log.h (module 'core'): void ns3::LogComponent::Disable(ns3::LogLevel level) [member function]
     cls.add_method('Disable', 
                    'void', 
@@ -1730,10 +1483,10 @@
     cls.add_method('Enable', 
                    'void', 
                    [param('ns3::LogLevel', 'level')])
-    ## log.h (module 'core'): void ns3::LogComponent::EnvVarCheck(char const * name) [member function]
+    ## log.h (module 'core'): void ns3::LogComponent::EnvVarCheck(std::string const & name) [member function]
     cls.add_method('EnvVarCheck', 
                    'void', 
-                   [param('char const *', 'name')])
+                   [param('std::string const &', 'name')])
     ## log.h (module 'core'): std::string ns3::LogComponent::GetLevelLabel(ns3::LogLevel const level) const [member function]
     cls.add_method('GetLevelLabel', 
                    'std::string', 
@@ -1829,42 +1582,6 @@
                    is_static=True)
     return
 
-def register_Ns3ObjectFactory_methods(root_module, cls):
-    cls.add_output_stream_operator()
-    ## object-factory.h (module 'core'): ns3::ObjectFactory::ObjectFactory(ns3::ObjectFactory const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::ObjectFactory const &', 'arg0')])
-    ## object-factory.h (module 'core'): ns3::ObjectFactory::ObjectFactory() [constructor]
-    cls.add_constructor([])
-    ## object-factory.h (module 'core'): ns3::ObjectFactory::ObjectFactory(std::string typeId) [constructor]
-    cls.add_constructor([param('std::string', 'typeId')])
-    ## object-factory.h (module 'core'): ns3::Ptr<ns3::Object> ns3::ObjectFactory::Create() const [member function]
-    cls.add_method('Create', 
-                   'ns3::Ptr< ns3::Object >', 
-                   [], 
-                   is_const=True)
-    ## object-factory.h (module 'core'): ns3::TypeId ns3::ObjectFactory::GetTypeId() const [member function]
-    cls.add_method('GetTypeId', 
-                   'ns3::TypeId', 
-                   [], 
-                   is_const=True)
-    ## object-factory.h (module 'core'): void ns3::ObjectFactory::Set(std::string name, ns3::AttributeValue const & value) [member function]
-    cls.add_method('Set', 
-                   'void', 
-                   [param('std::string', 'name'), param('ns3::AttributeValue const &', 'value')])
-    ## object-factory.h (module 'core'): void ns3::ObjectFactory::SetTypeId(ns3::TypeId tid) [member function]
-    cls.add_method('SetTypeId', 
-                   'void', 
-                   [param('ns3::TypeId', 'tid')])
-    ## object-factory.h (module 'core'): void ns3::ObjectFactory::SetTypeId(char const * tid) [member function]
-    cls.add_method('SetTypeId', 
-                   'void', 
-                   [param('char const *', 'tid')])
-    ## object-factory.h (module 'core'): void ns3::ObjectFactory::SetTypeId(std::string tid) [member function]
-    cls.add_method('SetTypeId', 
-                   'void', 
-                   [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')])
@@ -2068,86 +1785,6 @@
                    is_static=True)
     return
 
-def register_Ns3Simulator_methods(root_module, cls):
-    ## simulator.h (module 'core'): ns3::Simulator::Simulator(ns3::Simulator const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::Simulator const &', 'arg0')])
-    ## simulator.h (module 'core'): static void ns3::Simulator::Cancel(ns3::EventId const & id) [member function]
-    cls.add_method('Cancel', 
-                   'void', 
-                   [param('ns3::EventId const &', 'id')], 
-                   is_static=True)
-    ## simulator.h (module 'core'): static void ns3::Simulator::Destroy() [member function]
-    cls.add_method('Destroy', 
-                   'void', 
-                   [], 
-                   is_static=True)
-    ## simulator.h (module 'core'): static uint32_t ns3::Simulator::GetContext() [member function]
-    cls.add_method('GetContext', 
-                   'uint32_t', 
-                   [], 
-                   is_static=True)
-    ## simulator.h (module 'core'): static ns3::Time ns3::Simulator::GetDelayLeft(ns3::EventId const & id) [member function]
-    cls.add_method('GetDelayLeft', 
-                   'ns3::Time', 
-                   [param('ns3::EventId const &', 'id')], 
-                   is_static=True)
-    ## simulator.h (module 'core'): static ns3::Ptr<ns3::SimulatorImpl> ns3::Simulator::GetImplementation() [member function]
-    cls.add_method('GetImplementation', 
-                   'ns3::Ptr< ns3::SimulatorImpl >', 
-                   [], 
-                   is_static=True)
-    ## simulator.h (module 'core'): static ns3::Time ns3::Simulator::GetMaximumSimulationTime() [member function]
-    cls.add_method('GetMaximumSimulationTime', 
-                   'ns3::Time', 
-                   [], 
-                   is_static=True)
-    ## simulator.h (module 'core'): static uint32_t ns3::Simulator::GetSystemId() [member function]
-    cls.add_method('GetSystemId', 
-                   'uint32_t', 
-                   [], 
-                   is_static=True)
-    ## simulator.h (module 'core'): static bool ns3::Simulator::IsExpired(ns3::EventId const & id) [member function]
-    cls.add_method('IsExpired', 
-                   'bool', 
-                   [param('ns3::EventId const &', 'id')], 
-                   is_static=True)
-    ## simulator.h (module 'core'): static bool ns3::Simulator::IsFinished() [member function]
-    cls.add_method('IsFinished', 
-                   'bool', 
-                   [], 
-                   is_static=True)
-    ## simulator.h (module 'core'): static ns3::Time ns3::Simulator::Now() [member function]
-    cls.add_method('Now', 
-                   'ns3::Time', 
-                   [], 
-                   is_static=True)
-    ## simulator.h (module 'core'): static void ns3::Simulator::Remove(ns3::EventId const & id) [member function]
-    cls.add_method('Remove', 
-                   'void', 
-                   [param('ns3::EventId const &', 'id')], 
-                   is_static=True)
-    ## simulator.h (module 'core'): static void ns3::Simulator::SetImplementation(ns3::Ptr<ns3::SimulatorImpl> impl) [member function]
-    cls.add_method('SetImplementation', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::SimulatorImpl >', 'impl')], 
-                   is_static=True)
-    ## simulator.h (module 'core'): static void ns3::Simulator::SetScheduler(ns3::ObjectFactory schedulerFactory) [member function]
-    cls.add_method('SetScheduler', 
-                   'void', 
-                   [param('ns3::ObjectFactory', 'schedulerFactory')], 
-                   is_static=True)
-    ## simulator.h (module 'core'): static void ns3::Simulator::Stop() [member function]
-    cls.add_method('Stop', 
-                   'void', 
-                   [], 
-                   is_static=True)
-    ## simulator.h (module 'core'): static void ns3::Simulator::Stop(ns3::Time const & time) [member function]
-    cls.add_method('Stop', 
-                   'void', 
-                   [param('ns3::Time const &', 'time')], 
-                   is_static=True)
-    return
-
 def register_Ns3SystemWallClockMs_methods(root_module, cls):
     ## system-wall-clock-ms.h (module 'core'): ns3::SystemWallClockMs::SystemWallClockMs(ns3::SystemWallClockMs const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::SystemWallClockMs const &', 'arg0')])
@@ -2273,90 +1910,6 @@
                    [param('uint8_t', 'v')])
     return
 
-def register_Ns3Timer_methods(root_module, cls):
-    ## timer.h (module 'core'): ns3::Timer::Timer(ns3::Timer const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::Timer const &', 'arg0')])
-    ## timer.h (module 'core'): ns3::Timer::Timer() [constructor]
-    cls.add_constructor([])
-    ## timer.h (module 'core'): ns3::Timer::Timer(ns3::Timer::DestroyPolicy destroyPolicy) [constructor]
-    cls.add_constructor([param('ns3::Timer::DestroyPolicy', 'destroyPolicy')])
-    ## timer.h (module 'core'): void ns3::Timer::Cancel() [member function]
-    cls.add_method('Cancel', 
-                   'void', 
-                   [])
-    ## timer.h (module 'core'): ns3::Time ns3::Timer::GetDelay() const [member function]
-    cls.add_method('GetDelay', 
-                   'ns3::Time', 
-                   [], 
-                   is_const=True)
-    ## timer.h (module 'core'): ns3::Time ns3::Timer::GetDelayLeft() const [member function]
-    cls.add_method('GetDelayLeft', 
-                   'ns3::Time', 
-                   [], 
-                   is_const=True)
-    ## timer.h (module 'core'): ns3::Timer::State ns3::Timer::GetState() const [member function]
-    cls.add_method('GetState', 
-                   'ns3::Timer::State', 
-                   [], 
-                   is_const=True)
-    ## timer.h (module 'core'): bool ns3::Timer::IsExpired() const [member function]
-    cls.add_method('IsExpired', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## timer.h (module 'core'): bool ns3::Timer::IsRunning() const [member function]
-    cls.add_method('IsRunning', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## timer.h (module 'core'): bool ns3::Timer::IsSuspended() const [member function]
-    cls.add_method('IsSuspended', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## timer.h (module 'core'): void ns3::Timer::Remove() [member function]
-    cls.add_method('Remove', 
-                   'void', 
-                   [])
-    ## timer.h (module 'core'): void ns3::Timer::Resume() [member function]
-    cls.add_method('Resume', 
-                   'void', 
-                   [])
-    ## timer.h (module 'core'): void ns3::Timer::Schedule() [member function]
-    cls.add_method('Schedule', 
-                   'void', 
-                   [])
-    ## timer.h (module 'core'): void ns3::Timer::Schedule(ns3::Time delay) [member function]
-    cls.add_method('Schedule', 
-                   'void', 
-                   [param('ns3::Time', 'delay')])
-    ## timer.h (module 'core'): void ns3::Timer::SetDelay(ns3::Time const & delay) [member function]
-    cls.add_method('SetDelay', 
-                   'void', 
-                   [param('ns3::Time const &', 'delay')])
-    ## timer.h (module 'core'): void ns3::Timer::Suspend() [member function]
-    cls.add_method('Suspend', 
-                   'void', 
-                   [])
-    return
-
-def register_Ns3TimerImpl_methods(root_module, cls):
-    ## timer-impl.h (module 'core'): ns3::TimerImpl::TimerImpl() [constructor]
-    cls.add_constructor([])
-    ## timer-impl.h (module 'core'): ns3::TimerImpl::TimerImpl(ns3::TimerImpl const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::TimerImpl const &', 'arg0')])
-    ## timer-impl.h (module 'core'): void ns3::TimerImpl::Invoke() [member function]
-    cls.add_method('Invoke', 
-                   'void', 
-                   [], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## timer-impl.h (module 'core'): ns3::EventId ns3::TimerImpl::Schedule(ns3::Time const & delay) [member function]
-    cls.add_method('Schedule', 
-                   'ns3::EventId', 
-                   [param('ns3::Time const &', 'delay')], 
-                   is_pure_virtual=True, is_virtual=True)
-    return
-
 def register_Ns3TypeId_methods(root_module, cls):
     cls.add_binary_comparison_operator('<')
     cls.add_binary_comparison_operator('!=')
@@ -2553,113 +2106,6 @@
     cls.add_constructor([param('ns3::empty const &', 'arg0')])
     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_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_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_output_stream_operator()
-    cls.add_binary_comparison_operator('<=')
-    cls.add_binary_comparison_operator('==')
-    cls.add_binary_comparison_operator('>=')
-    ## int64x64-double.h (module 'core'): ns3::int64x64_t::int64x64_t() [constructor]
-    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(int v) [constructor]
-    cls.add_constructor([param('int', 'v')])
-    ## int64x64-double.h (module 'core'): ns3::int64x64_t::int64x64_t(long int v) [constructor]
-    cls.add_constructor([param('long int', 'v')])
-    ## int64x64-double.h (module 'core'): ns3::int64x64_t::int64x64_t(long long int v) [constructor]
-    cls.add_constructor([param('long long int', 'v')])
-    ## int64x64-double.h (module 'core'): ns3::int64x64_t::int64x64_t(unsigned int v) [constructor]
-    cls.add_constructor([param('unsigned int', 'v')])
-    ## int64x64-double.h (module 'core'): ns3::int64x64_t::int64x64_t(long unsigned int v) [constructor]
-    cls.add_constructor([param('long unsigned int', 'v')])
-    ## int64x64-double.h (module 'core'): ns3::int64x64_t::int64x64_t(long long unsigned int v) [constructor]
-    cls.add_constructor([param('long long unsigned int', 'v')])
-    ## int64x64-double.h (module 'core'): ns3::int64x64_t::int64x64_t(int64_t hi, uint64_t lo) [constructor]
-    cls.add_constructor([param('int64_t', 'hi'), param('uint64_t', 'lo')])
-    ## int64x64-double.h (module 'core'): ns3::int64x64_t::int64x64_t(ns3::int64x64_t const & o) [copy constructor]
-    cls.add_constructor([param('ns3::int64x64_t const &', 'o')])
-    ## int64x64-double.h (module 'core'): double ns3::int64x64_t::GetDouble() const [member function]
-    cls.add_method('GetDouble', 
-                   'double', 
-                   [], 
-                   is_const=True)
-    ## int64x64-double.h (module 'core'): int64_t ns3::int64x64_t::GetHigh() const [member function]
-    cls.add_method('GetHigh', 
-                   'int64_t', 
-                   [], 
-                   is_const=True)
-    ## int64x64-double.h (module 'core'): uint64_t ns3::int64x64_t::GetLow() const [member function]
-    cls.add_method('GetLow', 
-                   'uint64_t', 
-                   [], 
-                   is_const=True)
-    ## int64x64-double.h (module 'core'): static ns3::int64x64_t ns3::int64x64_t::Invert(uint64_t v) [member function]
-    cls.add_method('Invert', 
-                   'ns3::int64x64_t', 
-                   [param('uint64_t', 'v')], 
-                   is_static=True)
-    ## int64x64-double.h (module 'core'): void ns3::int64x64_t::MulByInvert(ns3::int64x64_t const & o) [member function]
-    cls.add_method('MulByInvert', 
-                   'void', 
-                   [param('ns3::int64x64_t const &', 'o')])
-    return
-
 def register_Ns3Chunk_methods(root_module, cls):
     ## chunk.h (module 'network'): ns3::Chunk::Chunk() [constructor]
     cls.add_constructor([])
@@ -2887,106 +2333,6 @@
                    [param('uint8_t', 'ttl')])
     return
 
-def register_Ns3Ipv6Header_methods(root_module, cls):
-    ## ipv6-header.h (module 'internet'): ns3::Ipv6Header::Ipv6Header(ns3::Ipv6Header const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::Ipv6Header const &', 'arg0')])
-    ## ipv6-header.h (module 'internet'): ns3::Ipv6Header::Ipv6Header() [constructor]
-    cls.add_constructor([])
-    ## ipv6-header.h (module 'internet'): uint32_t ns3::Ipv6Header::Deserialize(ns3::Buffer::Iterator start) [member function]
-    cls.add_method('Deserialize', 
-                   'uint32_t', 
-                   [param('ns3::Buffer::Iterator', 'start')], 
-                   is_virtual=True)
-    ## ipv6-header.h (module 'internet'): ns3::Ipv6Address ns3::Ipv6Header::GetDestinationAddress() const [member function]
-    cls.add_method('GetDestinationAddress', 
-                   'ns3::Ipv6Address', 
-                   [], 
-                   is_const=True)
-    ## ipv6-header.h (module 'internet'): uint32_t ns3::Ipv6Header::GetFlowLabel() const [member function]
-    cls.add_method('GetFlowLabel', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    ## ipv6-header.h (module 'internet'): uint8_t ns3::Ipv6Header::GetHopLimit() const [member function]
-    cls.add_method('GetHopLimit', 
-                   'uint8_t', 
-                   [], 
-                   is_const=True)
-    ## ipv6-header.h (module 'internet'): ns3::TypeId ns3::Ipv6Header::GetInstanceTypeId() const [member function]
-    cls.add_method('GetInstanceTypeId', 
-                   'ns3::TypeId', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## ipv6-header.h (module 'internet'): uint8_t ns3::Ipv6Header::GetNextHeader() const [member function]
-    cls.add_method('GetNextHeader', 
-                   'uint8_t', 
-                   [], 
-                   is_const=True)
-    ## ipv6-header.h (module 'internet'): uint16_t ns3::Ipv6Header::GetPayloadLength() const [member function]
-    cls.add_method('GetPayloadLength', 
-                   'uint16_t', 
-                   [], 
-                   is_const=True)
-    ## ipv6-header.h (module 'internet'): uint32_t ns3::Ipv6Header::GetSerializedSize() const [member function]
-    cls.add_method('GetSerializedSize', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## ipv6-header.h (module 'internet'): ns3::Ipv6Address ns3::Ipv6Header::GetSourceAddress() const [member function]
-    cls.add_method('GetSourceAddress', 
-                   'ns3::Ipv6Address', 
-                   [], 
-                   is_const=True)
-    ## ipv6-header.h (module 'internet'): uint8_t ns3::Ipv6Header::GetTrafficClass() const [member function]
-    cls.add_method('GetTrafficClass', 
-                   'uint8_t', 
-                   [], 
-                   is_const=True)
-    ## ipv6-header.h (module 'internet'): static ns3::TypeId ns3::Ipv6Header::GetTypeId() [member function]
-    cls.add_method('GetTypeId', 
-                   'ns3::TypeId', 
-                   [], 
-                   is_static=True)
-    ## ipv6-header.h (module 'internet'): void ns3::Ipv6Header::Print(std::ostream & os) const [member function]
-    cls.add_method('Print', 
-                   'void', 
-                   [param('std::ostream &', 'os')], 
-                   is_const=True, is_virtual=True)
-    ## ipv6-header.h (module 'internet'): void ns3::Ipv6Header::Serialize(ns3::Buffer::Iterator start) const [member function]
-    cls.add_method('Serialize', 
-                   'void', 
-                   [param('ns3::Buffer::Iterator', 'start')], 
-                   is_const=True, is_virtual=True)
-    ## ipv6-header.h (module 'internet'): void ns3::Ipv6Header::SetDestinationAddress(ns3::Ipv6Address dst) [member function]
-    cls.add_method('SetDestinationAddress', 
-                   'void', 
-                   [param('ns3::Ipv6Address', 'dst')])
-    ## ipv6-header.h (module 'internet'): void ns3::Ipv6Header::SetFlowLabel(uint32_t flow) [member function]
-    cls.add_method('SetFlowLabel', 
-                   'void', 
-                   [param('uint32_t', 'flow')])
-    ## ipv6-header.h (module 'internet'): void ns3::Ipv6Header::SetHopLimit(uint8_t limit) [member function]
-    cls.add_method('SetHopLimit', 
-                   'void', 
-                   [param('uint8_t', 'limit')])
-    ## ipv6-header.h (module 'internet'): void ns3::Ipv6Header::SetNextHeader(uint8_t next) [member function]
-    cls.add_method('SetNextHeader', 
-                   'void', 
-                   [param('uint8_t', 'next')])
-    ## ipv6-header.h (module 'internet'): void ns3::Ipv6Header::SetPayloadLength(uint16_t len) [member function]
-    cls.add_method('SetPayloadLength', 
-                   'void', 
-                   [param('uint16_t', 'len')])
-    ## ipv6-header.h (module 'internet'): void ns3::Ipv6Header::SetSourceAddress(ns3::Ipv6Address src) [member function]
-    cls.add_method('SetSourceAddress', 
-                   'void', 
-                   [param('ns3::Ipv6Address', 'src')])
-    ## ipv6-header.h (module 'internet'): void ns3::Ipv6Header::SetTrafficClass(uint8_t traffic) [member function]
-    cls.add_method('SetTrafficClass', 
-                   'void', 
-                   [param('uint8_t', 'traffic')])
-    return
-
 def register_Ns3Object_methods(root_module, cls):
     ## object.h (module 'core'): ns3::Object::Object() [constructor]
     cls.add_constructor([])
@@ -3101,18 +2447,6 @@
                    is_static=True)
     return
 
-def register_Ns3SimpleRefCount__Ns3EventImpl_Ns3Empty_Ns3DefaultDeleter__lt__ns3EventImpl__gt___methods(root_module, cls):
-    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::EventImpl, ns3::empty, ns3::DefaultDeleter<ns3::EventImpl> >::SimpleRefCount() [constructor]
-    cls.add_constructor([])
-    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::EventImpl, ns3::empty, ns3::DefaultDeleter<ns3::EventImpl> >::SimpleRefCount(ns3::SimpleRefCount<ns3::EventImpl, ns3::empty, ns3::DefaultDeleter<ns3::EventImpl> > const & o) [copy constructor]
-    cls.add_constructor([param('ns3::SimpleRefCount< ns3::EventImpl, ns3::empty, ns3::DefaultDeleter< ns3::EventImpl > > const &', 'o')])
-    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::EventImpl, ns3::empty, ns3::DefaultDeleter<ns3::EventImpl> >::Cleanup() [member function]
-    cls.add_method('Cleanup', 
-                   'void', 
-                   [], 
-                   is_static=True)
-    return
-
 def register_Ns3SimpleRefCount__Ns3HashImplementation_Ns3Empty_Ns3DefaultDeleter__lt__ns3HashImplementation__gt___methods(root_module, cls):
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::SimpleRefCount() [constructor]
     cls.add_constructor([])
@@ -3808,177 +3142,6 @@
                    is_const=True, is_virtual=True)
     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_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_output_stream_operator()
-    cls.add_binary_comparison_operator('<=')
-    cls.add_binary_comparison_operator('==')
-    cls.add_binary_comparison_operator('>=')
-    ## nstime.h (module 'core'): ns3::Time::Time() [constructor]
-    cls.add_constructor([])
-    ## nstime.h (module 'core'): ns3::Time::Time(ns3::Time const & o) [copy constructor]
-    cls.add_constructor([param('ns3::Time const &', 'o')])
-    ## nstime.h (module 'core'): ns3::Time::Time(double v) [constructor]
-    cls.add_constructor([param('double', 'v')])
-    ## nstime.h (module 'core'): ns3::Time::Time(int v) [constructor]
-    cls.add_constructor([param('int', 'v')])
-    ## nstime.h (module 'core'): ns3::Time::Time(long int v) [constructor]
-    cls.add_constructor([param('long int', 'v')])
-    ## nstime.h (module 'core'): ns3::Time::Time(long long int v) [constructor]
-    cls.add_constructor([param('long long int', 'v')])
-    ## nstime.h (module 'core'): ns3::Time::Time(unsigned int v) [constructor]
-    cls.add_constructor([param('unsigned int', 'v')])
-    ## nstime.h (module 'core'): ns3::Time::Time(long unsigned int v) [constructor]
-    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(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'): 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]
-    cls.add_method('From', 
-                   'ns3::Time', 
-                   [param('ns3::int64x64_t const &', 'from'), param('ns3::Time::Unit', 'timeUnit')], 
-                   is_static=True)
-    ## 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 &', 'value')], 
-                   is_static=True)
-    ## nstime.h (module 'core'): static ns3::Time ns3::Time::FromDouble(double value, ns3::Time::Unit timeUnit) [member function]
-    cls.add_method('FromDouble', 
-                   'ns3::Time', 
-                   [param('double', 'value'), param('ns3::Time::Unit', 'timeUnit')], 
-                   is_static=True)
-    ## nstime.h (module 'core'): static ns3::Time ns3::Time::FromInteger(uint64_t value, ns3::Time::Unit timeUnit) [member function]
-    cls.add_method('FromInteger', 
-                   'ns3::Time', 
-                   [param('uint64_t', 'value'), param('ns3::Time::Unit', 'timeUnit')], 
-                   is_static=True)
-    ## nstime.h (module 'core'): double ns3::Time::GetDouble() const [member function]
-    cls.add_method('GetDouble', 
-                   'double', 
-                   [], 
-                   is_const=True)
-    ## nstime.h (module 'core'): int64_t ns3::Time::GetFemtoSeconds() const [member function]
-    cls.add_method('GetFemtoSeconds', 
-                   'int64_t', 
-                   [], 
-                   is_const=True)
-    ## nstime.h (module 'core'): int64_t ns3::Time::GetInteger() const [member function]
-    cls.add_method('GetInteger', 
-                   'int64_t', 
-                   [], 
-                   is_const=True)
-    ## nstime.h (module 'core'): int64_t ns3::Time::GetMicroSeconds() const [member function]
-    cls.add_method('GetMicroSeconds', 
-                   'int64_t', 
-                   [], 
-                   is_const=True)
-    ## nstime.h (module 'core'): int64_t ns3::Time::GetMilliSeconds() const [member function]
-    cls.add_method('GetMilliSeconds', 
-                   'int64_t', 
-                   [], 
-                   is_const=True)
-    ## nstime.h (module 'core'): int64_t ns3::Time::GetNanoSeconds() const [member function]
-    cls.add_method('GetNanoSeconds', 
-                   'int64_t', 
-                   [], 
-                   is_const=True)
-    ## nstime.h (module 'core'): int64_t ns3::Time::GetPicoSeconds() const [member function]
-    cls.add_method('GetPicoSeconds', 
-                   'int64_t', 
-                   [], 
-                   is_const=True)
-    ## nstime.h (module 'core'): static ns3::Time::Unit ns3::Time::GetResolution() [member function]
-    cls.add_method('GetResolution', 
-                   'ns3::Time::Unit', 
-                   [], 
-                   is_static=True)
-    ## nstime.h (module 'core'): double ns3::Time::GetSeconds() const [member function]
-    cls.add_method('GetSeconds', 
-                   'double', 
-                   [], 
-                   is_const=True)
-    ## nstime.h (module 'core'): int64_t ns3::Time::GetTimeStep() const [member function]
-    cls.add_method('GetTimeStep', 
-                   'int64_t', 
-                   [], 
-                   is_const=True)
-    ## nstime.h (module 'core'): bool ns3::Time::IsNegative() const [member function]
-    cls.add_method('IsNegative', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## nstime.h (module 'core'): bool ns3::Time::IsPositive() const [member function]
-    cls.add_method('IsPositive', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## nstime.h (module 'core'): bool ns3::Time::IsStrictlyNegative() const [member function]
-    cls.add_method('IsStrictlyNegative', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## nstime.h (module 'core'): bool ns3::Time::IsStrictlyPositive() const [member function]
-    cls.add_method('IsStrictlyPositive', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## nstime.h (module 'core'): bool ns3::Time::IsZero() const [member function]
-    cls.add_method('IsZero', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## nstime.h (module 'core'): static ns3::Time ns3::Time::Max() [member function]
-    cls.add_method('Max', 
-                   'ns3::Time', 
-                   [], 
-                   is_static=True)
-    ## nstime.h (module 'core'): static ns3::Time ns3::Time::Min() [member function]
-    cls.add_method('Min', 
-                   'ns3::Time', 
-                   [], 
-                   is_static=True)
-    ## nstime.h (module 'core'): static void ns3::Time::SetResolution(ns3::Time::Unit resolution) [member function]
-    cls.add_method('SetResolution', 
-                   'void', 
-                   [param('ns3::Time::Unit', 'resolution')], 
-                   is_static=True)
-    ## nstime.h (module 'core'): static bool ns3::Time::StaticInit() [member function]
-    cls.add_method('StaticInit', 
-                   'bool', 
-                   [], 
-                   is_static=True)
-    ## nstime.h (module 'core'): ns3::int64x64_t ns3::Time::To(ns3::Time::Unit timeUnit) const [member function]
-    cls.add_method('To', 
-                   'ns3::int64x64_t', 
-                   [param('ns3::Time::Unit', 'timeUnit')], 
-                   is_const=True)
-    ## nstime.h (module 'core'): double ns3::Time::ToDouble(ns3::Time::Unit timeUnit) const [member function]
-    cls.add_method('ToDouble', 
-                   'double', 
-                   [param('ns3::Time::Unit', 'timeUnit')], 
-                   is_const=True)
-    ## nstime.h (module 'core'): int64_t ns3::Time::ToInteger(ns3::Time::Unit timeUnit) const [member function]
-    cls.add_method('ToInteger', 
-                   'int64_t', 
-                   [param('ns3::Time::Unit', 'timeUnit')], 
-                   is_const=True)
-    return
-
 def register_Ns3TraceSourceAccessor_methods(root_module, cls):
     ## trace-source-accessor.h (module 'core'): ns3::TraceSourceAccessor::TraceSourceAccessor(ns3::TraceSourceAccessor const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::TraceSourceAccessor const &', 'arg0')])
@@ -4199,87 +3362,6 @@
                    is_const=True, visibility='private', is_virtual=True)
     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')])
-    ## event-impl.h (module 'core'): ns3::EventImpl::EventImpl() [constructor]
-    cls.add_constructor([])
-    ## event-impl.h (module 'core'): void ns3::EventImpl::Cancel() [member function]
-    cls.add_method('Cancel', 
-                   'void', 
-                   [])
-    ## event-impl.h (module 'core'): void ns3::EventImpl::Invoke() [member function]
-    cls.add_method('Invoke', 
-                   'void', 
-                   [])
-    ## event-impl.h (module 'core'): bool ns3::EventImpl::IsCancelled() [member function]
-    cls.add_method('IsCancelled', 
-                   'bool', 
-                   [])
-    ## event-impl.h (module 'core'): void ns3::EventImpl::Notify() [member function]
-    cls.add_method('Notify', 
-                   'void', 
-                   [], 
-                   is_pure_virtual=True, visibility='protected', is_virtual=True)
-    return
-
-def register_Ns3IpL4Protocol_methods(root_module, cls):
-    ## ip-l4-protocol.h (module 'internet'): ns3::IpL4Protocol::IpL4Protocol() [constructor]
-    cls.add_constructor([])
-    ## ip-l4-protocol.h (module 'internet'): ns3::IpL4Protocol::IpL4Protocol(ns3::IpL4Protocol const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::IpL4Protocol const &', 'arg0')])
-    ## ip-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::IpL4Protocol::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 >', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## ip-l4-protocol.h (module 'internet'): 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> ns3::IpL4Protocol::GetDownTarget6() const [member function]
-    cls.add_method('GetDownTarget6', 
-                   '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 >', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## ip-l4-protocol.h (module 'internet'): int ns3::IpL4Protocol::GetProtocolNumber() const [member function]
-    cls.add_method('GetProtocolNumber', 
-                   'int', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## ip-l4-protocol.h (module 'internet'): static ns3::TypeId ns3::IpL4Protocol::GetTypeId() [member function]
-    cls.add_method('GetTypeId', 
-                   'ns3::TypeId', 
-                   [], 
-                   is_static=True)
-    ## ip-l4-protocol.h (module 'internet'): ns3::IpL4Protocol::RxStatus ns3::IpL4Protocol::Receive(ns3::Ptr<ns3::Packet> p, ns3::Ipv4Header const & header, 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')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## ip-l4-protocol.h (module 'internet'): ns3::IpL4Protocol::RxStatus ns3::IpL4Protocol::Receive(ns3::Ptr<ns3::Packet> p, ns3::Ipv6Header const & header, 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')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## ip-l4-protocol.h (module 'internet'): void ns3::IpL4Protocol::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', 
-                   'void', 
-                   [param('ns3::Ipv4Address', 'icmpSource'), param('uint8_t', 'icmpTtl'), param('uint8_t', 'icmpType'), param('uint8_t', 'icmpCode'), param('uint32_t', 'icmpInfo'), param('ns3::Ipv4Address', 'payloadSource'), param('ns3::Ipv4Address', 'payloadDestination'), param('uint8_t const *', 'payload')], 
-                   is_virtual=True)
-    ## ip-l4-protocol.h (module 'internet'): void ns3::IpL4Protocol::ReceiveIcmp(ns3::Ipv6Address icmpSource, uint8_t icmpTtl, uint8_t icmpType, uint8_t icmpCode, uint32_t icmpInfo, ns3::Ipv6Address payloadSource, ns3::Ipv6Address payloadDestination, uint8_t const * payload) [member function]
-    cls.add_method('ReceiveIcmp', 
-                   'void', 
-                   [param('ns3::Ipv6Address', 'icmpSource'), param('uint8_t', 'icmpTtl'), param('uint8_t', 'icmpType'), param('uint8_t', 'icmpCode'), param('uint32_t', 'icmpInfo'), param('ns3::Ipv6Address', 'payloadSource'), param('ns3::Ipv6Address', 'payloadDestination'), param('uint8_t const *', 'payload')], 
-                   is_virtual=True)
-    ## ip-l4-protocol.h (module 'internet'): void ns3::IpL4Protocol::SetDownTarget(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> cb) [member function]
-    cls.add_method('SetDownTarget', 
-                   'void', 
-                   [param('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 >', 'cb')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## ip-l4-protocol.h (module 'internet'): void ns3::IpL4Protocol::SetDownTarget6(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) [member function]
-    cls.add_method('SetDownTarget6', 
-                   '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_pure_virtual=True, is_virtual=True)
-    return
-
 def register_Ns3Ipv4_methods(root_module, cls):
     ## ipv4.h (module 'internet'): ns3::Ipv4::Ipv4(ns3::Ipv4 const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::Ipv4 const &', 'arg0')])
@@ -4565,10 +3647,10 @@
     cls.add_method('Send', 
                    'void', 
                    [param('ns3::Ptr< ns3::Packet >', 'p'), param('ns3::Ipv4Address', 'dest')])
-    ## ipv4-interface.h (module 'internet'): void ns3::Ipv4Interface::SetArpCache(ns3::Ptr<ns3::ArpCache> arg0) [member function]
+    ## ipv4-interface.h (module 'internet'): void ns3::Ipv4Interface::SetArpCache(ns3::Ptr<ns3::ArpCache> arpCache) [member function]
     cls.add_method('SetArpCache', 
                    'void', 
-                   [param('ns3::Ptr< ns3::ArpCache >', 'arg0')])
+                   [param('ns3::Ptr< ns3::ArpCache >', 'arpCache')])
     ## ipv4-interface.h (module 'internet'): void ns3::Ipv4Interface::SetDevice(ns3::Ptr<ns3::NetDevice> device) [member function]
     cls.add_method('SetDevice', 
                    'void', 
@@ -4835,151 +3917,6 @@
                    [param('ns3::Ipv6Address const &', 'value')])
     return
 
-def register_Ns3Ipv6Interface_methods(root_module, cls):
-    ## ipv6-interface.h (module 'internet'): ns3::Ipv6Interface::Ipv6Interface(ns3::Ipv6Interface const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::Ipv6Interface const &', 'arg0')])
-    ## ipv6-interface.h (module 'internet'): ns3::Ipv6Interface::Ipv6Interface() [constructor]
-    cls.add_constructor([])
-    ## ipv6-interface.h (module 'internet'): bool ns3::Ipv6Interface::AddAddress(ns3::Ipv6InterfaceAddress iface) [member function]
-    cls.add_method('AddAddress', 
-                   'bool', 
-                   [param('ns3::Ipv6InterfaceAddress', 'iface')])
-    ## ipv6-interface.h (module 'internet'): ns3::Ipv6InterfaceAddress ns3::Ipv6Interface::GetAddress(uint32_t index) const [member function]
-    cls.add_method('GetAddress', 
-                   'ns3::Ipv6InterfaceAddress', 
-                   [param('uint32_t', 'index')], 
-                   is_const=True)
-    ## ipv6-interface.h (module 'internet'): ns3::Ipv6InterfaceAddress ns3::Ipv6Interface::GetAddressMatchingDestination(ns3::Ipv6Address dst) [member function]
-    cls.add_method('GetAddressMatchingDestination', 
-                   'ns3::Ipv6InterfaceAddress', 
-                   [param('ns3::Ipv6Address', 'dst')])
-    ## ipv6-interface.h (module 'internet'): uint16_t ns3::Ipv6Interface::GetBaseReachableTime() const [member function]
-    cls.add_method('GetBaseReachableTime', 
-                   'uint16_t', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface.h (module 'internet'): uint8_t ns3::Ipv6Interface::GetCurHopLimit() const [member function]
-    cls.add_method('GetCurHopLimit', 
-                   'uint8_t', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface.h (module 'internet'): ns3::Ptr<ns3::NetDevice> ns3::Ipv6Interface::GetDevice() const [member function]
-    cls.add_method('GetDevice', 
-                   'ns3::Ptr< ns3::NetDevice >', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## ipv6-interface.h (module 'internet'): ns3::Ipv6InterfaceAddress ns3::Ipv6Interface::GetLinkLocalAddress() const [member function]
-    cls.add_method('GetLinkLocalAddress', 
-                   'ns3::Ipv6InterfaceAddress', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface.h (module 'internet'): uint16_t ns3::Ipv6Interface::GetMetric() const [member function]
-    cls.add_method('GetMetric', 
-                   'uint16_t', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface.h (module 'internet'): uint32_t ns3::Ipv6Interface::GetNAddresses() const [member function]
-    cls.add_method('GetNAddresses', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface.h (module 'internet'): uint16_t ns3::Ipv6Interface::GetReachableTime() const [member function]
-    cls.add_method('GetReachableTime', 
-                   'uint16_t', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface.h (module 'internet'): uint16_t ns3::Ipv6Interface::GetRetransTimer() const [member function]
-    cls.add_method('GetRetransTimer', 
-                   'uint16_t', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface.h (module 'internet'): static ns3::TypeId ns3::Ipv6Interface::GetTypeId() [member function]
-    cls.add_method('GetTypeId', 
-                   'ns3::TypeId', 
-                   [], 
-                   is_static=True)
-    ## ipv6-interface.h (module 'internet'): bool ns3::Ipv6Interface::IsDown() const [member function]
-    cls.add_method('IsDown', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface.h (module 'internet'): bool ns3::Ipv6Interface::IsForwarding() const [member function]
-    cls.add_method('IsForwarding', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface.h (module 'internet'): bool ns3::Ipv6Interface::IsUp() const [member function]
-    cls.add_method('IsUp', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface.h (module 'internet'): ns3::Ipv6InterfaceAddress ns3::Ipv6Interface::RemoveAddress(uint32_t index) [member function]
-    cls.add_method('RemoveAddress', 
-                   'ns3::Ipv6InterfaceAddress', 
-                   [param('uint32_t', 'index')])
-    ## ipv6-interface.h (module 'internet'): ns3::Ipv6InterfaceAddress ns3::Ipv6Interface::RemoveAddress(ns3::Ipv6Address address) [member function]
-    cls.add_method('RemoveAddress', 
-                   'ns3::Ipv6InterfaceAddress', 
-                   [param('ns3::Ipv6Address', 'address')])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::Send(ns3::Ptr<ns3::Packet> p, ns3::Ipv6Address dest) [member function]
-    cls.add_method('Send', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::Packet >', 'p'), param('ns3::Ipv6Address', 'dest')])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetBaseReachableTime(uint16_t baseReachableTime) [member function]
-    cls.add_method('SetBaseReachableTime', 
-                   'void', 
-                   [param('uint16_t', 'baseReachableTime')])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetCurHopLimit(uint8_t curHopLimit) [member function]
-    cls.add_method('SetCurHopLimit', 
-                   'void', 
-                   [param('uint8_t', 'curHopLimit')])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetDevice(ns3::Ptr<ns3::NetDevice> device) [member function]
-    cls.add_method('SetDevice', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::NetDevice >', 'device')])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetDown() [member function]
-    cls.add_method('SetDown', 
-                   'void', 
-                   [])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetForwarding(bool forward) [member function]
-    cls.add_method('SetForwarding', 
-                   'void', 
-                   [param('bool', 'forward')])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetMetric(uint16_t metric) [member function]
-    cls.add_method('SetMetric', 
-                   'void', 
-                   [param('uint16_t', 'metric')])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetNode(ns3::Ptr<ns3::Node> node) [member function]
-    cls.add_method('SetNode', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::Node >', 'node')])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetNsDadUid(ns3::Ipv6Address address, uint32_t uid) [member function]
-    cls.add_method('SetNsDadUid', 
-                   'void', 
-                   [param('ns3::Ipv6Address', 'address'), param('uint32_t', 'uid')])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetReachableTime(uint16_t reachableTime) [member function]
-    cls.add_method('SetReachableTime', 
-                   'void', 
-                   [param('uint16_t', 'reachableTime')])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetRetransTimer(uint16_t retransTimer) [member function]
-    cls.add_method('SetRetransTimer', 
-                   'void', 
-                   [param('uint16_t', 'retransTimer')])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetState(ns3::Ipv6Address address, ns3::Ipv6InterfaceAddress::State_e state) [member function]
-    cls.add_method('SetState', 
-                   'void', 
-                   [param('ns3::Ipv6Address', 'address'), param('ns3::Ipv6InterfaceAddress::State_e', 'state')])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetUp() [member function]
-    cls.add_method('SetUp', 
-                   'void', 
-                   [])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::DoDispose() [member function]
-    cls.add_method('DoDispose', 
-                   'void', 
-                   [], 
-                   visibility='protected', is_virtual=True)
-    return
-
 def register_Ns3Ipv6PrefixChecker_methods(root_module, cls):
     ## ipv6-address.h (module 'network'): ns3::Ipv6PrefixChecker::Ipv6PrefixChecker() [constructor]
     cls.add_constructor([])
@@ -5196,46 +4133,6 @@
                    is_const=True)
     return
 
-def register_Ns3ObjectFactoryChecker_methods(root_module, cls):
-    ## object-factory.h (module 'core'): ns3::ObjectFactoryChecker::ObjectFactoryChecker() [constructor]
-    cls.add_constructor([])
-    ## object-factory.h (module 'core'): ns3::ObjectFactoryChecker::ObjectFactoryChecker(ns3::ObjectFactoryChecker const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::ObjectFactoryChecker const &', 'arg0')])
-    return
-
-def register_Ns3ObjectFactoryValue_methods(root_module, cls):
-    ## object-factory.h (module 'core'): ns3::ObjectFactoryValue::ObjectFactoryValue() [constructor]
-    cls.add_constructor([])
-    ## object-factory.h (module 'core'): ns3::ObjectFactoryValue::ObjectFactoryValue(ns3::ObjectFactoryValue const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::ObjectFactoryValue const &', 'arg0')])
-    ## object-factory.h (module 'core'): ns3::ObjectFactoryValue::ObjectFactoryValue(ns3::ObjectFactory const & value) [constructor]
-    cls.add_constructor([param('ns3::ObjectFactory const &', 'value')])
-    ## object-factory.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::ObjectFactoryValue::Copy() const [member function]
-    cls.add_method('Copy', 
-                   'ns3::Ptr< ns3::AttributeValue >', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## object-factory.h (module 'core'): bool ns3::ObjectFactoryValue::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)
-    ## object-factory.h (module 'core'): ns3::ObjectFactory ns3::ObjectFactoryValue::Get() const [member function]
-    cls.add_method('Get', 
-                   'ns3::ObjectFactory', 
-                   [], 
-                   is_const=True)
-    ## object-factory.h (module 'core'): std::string ns3::ObjectFactoryValue::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)
-    ## object-factory.h (module 'core'): void ns3::ObjectFactoryValue::Set(ns3::ObjectFactory const & value) [member function]
-    cls.add_method('Set', 
-                   'void', 
-                   [param('ns3::ObjectFactory const &', 'value')])
-    return
-
 def register_Ns3OutputStreamWrapper_methods(root_module, cls):
     ## output-stream-wrapper.h (module 'network'): ns3::OutputStreamWrapper::OutputStreamWrapper(ns3::OutputStreamWrapper const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::OutputStreamWrapper const &', 'arg0')])
@@ -5434,39 +4331,6 @@
                    [param('ns3::Ptr< ns3::NixVector >', 'arg0')])
     return
 
-def register_Ns3TimeValue_methods(root_module, cls):
-    ## nstime.h (module 'core'): ns3::TimeValue::TimeValue() [constructor]
-    cls.add_constructor([])
-    ## nstime.h (module 'core'): ns3::TimeValue::TimeValue(ns3::TimeValue const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::TimeValue const &', 'arg0')])
-    ## nstime.h (module 'core'): ns3::TimeValue::TimeValue(ns3::Time const & value) [constructor]
-    cls.add_constructor([param('ns3::Time const &', 'value')])
-    ## nstime.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::TimeValue::Copy() const [member function]
-    cls.add_method('Copy', 
-                   'ns3::Ptr< ns3::AttributeValue >', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## nstime.h (module 'core'): bool ns3::TimeValue::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)
-    ## nstime.h (module 'core'): ns3::Time ns3::TimeValue::Get() const [member function]
-    cls.add_method('Get', 
-                   'ns3::Time', 
-                   [], 
-                   is_const=True)
-    ## nstime.h (module 'core'): std::string ns3::TimeValue::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)
-    ## nstime.h (module 'core'): void ns3::TimeValue::Set(ns3::Time const & value) [member function]
-    cls.add_method('Set', 
-                   'void', 
-                   [param('ns3::Time const &', 'value')])
-    return
-
 def register_Ns3TypeIdChecker_methods(root_module, cls):
     ## type-id.h (module 'core'): ns3::TypeIdChecker::TypeIdChecker() [constructor]
     cls.add_constructor([])
diff -Naur ns-3.19/src/click/bindings/modulegen__gcc_LP64.py ns-3.20/src/click/bindings/modulegen__gcc_LP64.py
--- ns-3.19/src/click/bindings/modulegen__gcc_LP64.py	2014-06-17 10:34:00.536635905 -0700
+++ ns-3.20/src/click/bindings/modulegen__gcc_LP64.py	2014-06-17 10:33:13.864996186 -0700
@@ -46,8 +46,6 @@
     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')
-    ## event-id.h (module 'core'): ns3::EventId [class]
-    module.add_class('EventId', import_from_module='ns.core')
     ## hash.h (module 'core'): ns3::Hasher [class]
     module.add_class('Hasher', import_from_module='ns.core')
     ## inet6-socket-address.h (module 'network'): ns3::Inet6SocketAddress [class]
@@ -58,34 +56,6 @@
     module.add_class('InetSocketAddress', import_from_module='ns.network')
     ## inet-socket-address.h (module 'network'): ns3::InetSocketAddress [class]
     root_module['ns3::InetSocketAddress'].implicitly_converts_to(root_module['ns3::Address'])
-    ## int-to-type.h (module 'core'): ns3::IntToType<0> [struct]
-    module.add_class('IntToType', import_from_module='ns.core', template_parameters=['0'])
-    ## int-to-type.h (module 'core'): ns3::IntToType<0>::v_e [enumeration]
-    module.add_enum('v_e', ['value'], outer_class=root_module['ns3::IntToType< 0 >'], import_from_module='ns.core')
-    ## int-to-type.h (module 'core'): ns3::IntToType<1> [struct]
-    module.add_class('IntToType', import_from_module='ns.core', template_parameters=['1'])
-    ## int-to-type.h (module 'core'): ns3::IntToType<1>::v_e [enumeration]
-    module.add_enum('v_e', ['value'], outer_class=root_module['ns3::IntToType< 1 >'], import_from_module='ns.core')
-    ## int-to-type.h (module 'core'): ns3::IntToType<2> [struct]
-    module.add_class('IntToType', import_from_module='ns.core', template_parameters=['2'])
-    ## int-to-type.h (module 'core'): ns3::IntToType<2>::v_e [enumeration]
-    module.add_enum('v_e', ['value'], outer_class=root_module['ns3::IntToType< 2 >'], import_from_module='ns.core')
-    ## int-to-type.h (module 'core'): ns3::IntToType<3> [struct]
-    module.add_class('IntToType', import_from_module='ns.core', template_parameters=['3'])
-    ## int-to-type.h (module 'core'): ns3::IntToType<3>::v_e [enumeration]
-    module.add_enum('v_e', ['value'], outer_class=root_module['ns3::IntToType< 3 >'], import_from_module='ns.core')
-    ## int-to-type.h (module 'core'): ns3::IntToType<4> [struct]
-    module.add_class('IntToType', import_from_module='ns.core', template_parameters=['4'])
-    ## int-to-type.h (module 'core'): ns3::IntToType<4>::v_e [enumeration]
-    module.add_enum('v_e', ['value'], outer_class=root_module['ns3::IntToType< 4 >'], import_from_module='ns.core')
-    ## int-to-type.h (module 'core'): ns3::IntToType<5> [struct]
-    module.add_class('IntToType', import_from_module='ns.core', template_parameters=['5'])
-    ## int-to-type.h (module 'core'): ns3::IntToType<5>::v_e [enumeration]
-    module.add_enum('v_e', ['value'], outer_class=root_module['ns3::IntToType< 5 >'], import_from_module='ns.core')
-    ## int-to-type.h (module 'core'): ns3::IntToType<6> [struct]
-    module.add_class('IntToType', import_from_module='ns.core', template_parameters=['6'])
-    ## int-to-type.h (module 'core'): ns3::IntToType<6>::v_e [enumeration]
-    module.add_enum('v_e', ['value'], outer_class=root_module['ns3::IntToType< 6 >'], 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]
@@ -100,12 +70,6 @@
     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-interface-address.h (module 'internet'): ns3::Ipv6InterfaceAddress [class]
-    module.add_class('Ipv6InterfaceAddress', import_from_module='ns.internet')
-    ## ipv6-interface-address.h (module 'internet'): ns3::Ipv6InterfaceAddress::State_e [enumeration]
-    module.add_enum('State_e', ['TENTATIVE', 'DEPRECATED', 'PREFERRED', 'PERMANENT', 'HOMEADDRESS', 'TENTATIVE_OPTIMISTIC', 'INVALID'], outer_class=root_module['ns3::Ipv6InterfaceAddress'], import_from_module='ns.internet')
-    ## ipv6-interface-address.h (module 'internet'): ns3::Ipv6InterfaceAddress::Scope_e [enumeration]
-    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')
     ## log.h (module 'core'): ns3::LogComponent [class]
@@ -114,8 +78,6 @@
     module.add_class('ObjectBase', allow_subclassing=True, import_from_module='ns.core')
     ## object.h (module 'core'): ns3::ObjectDeleter [struct]
     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]
@@ -136,22 +98,12 @@
     module.add_enum('TagData_e', ['MAX_SIZE'], outer_class=root_module['ns3::PacketTagList::TagData'], import_from_module='ns.network')
     ## 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'))
-    ## simulator.h (module 'core'): ns3::Simulator [class]
-    module.add_class('Simulator', destructor_visibility='private', import_from_module='ns.core')
     ## system-wall-clock-ms.h (module 'core'): ns3::SystemWallClockMs [class]
     module.add_class('SystemWallClockMs', import_from_module='ns.core')
     ## 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')
-    ## timer.h (module 'core'): ns3::Timer [class]
-    module.add_class('Timer', import_from_module='ns.core')
-    ## timer.h (module 'core'): ns3::Timer::DestroyPolicy [enumeration]
-    module.add_enum('DestroyPolicy', ['CANCEL_ON_DESTROY', 'REMOVE_ON_DESTROY', 'CHECK_ON_DESTROY'], outer_class=root_module['ns3::Timer'], import_from_module='ns.core')
-    ## timer.h (module 'core'): ns3::Timer::State [enumeration]
-    module.add_enum('State', ['RUNNING', 'EXPIRED', 'SUSPENDED'], outer_class=root_module['ns3::Timer'], import_from_module='ns.core')
-    ## timer-impl.h (module 'core'): ns3::TimerImpl [class]
-    module.add_class('TimerImpl', allow_subclassing=True, 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]
@@ -162,8 +114,6 @@
     module.add_class('TraceSourceInformation', import_from_module='ns.core', outer_class=root_module['ns3::TypeId'])
     ## 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]
-    module.add_class('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]
@@ -174,10 +124,6 @@
     module.add_enum('DscpType', ['DscpDefault', 'DSCP_CS1', 'DSCP_AF11', 'DSCP_AF12', 'DSCP_AF13', 'DSCP_CS2', 'DSCP_AF21', 'DSCP_AF22', 'DSCP_AF23', 'DSCP_CS3', 'DSCP_AF31', 'DSCP_AF32', 'DSCP_AF33', 'DSCP_CS4', 'DSCP_AF41', 'DSCP_AF42', 'DSCP_AF43', 'DSCP_CS5', 'DSCP_EF', 'DSCP_CS6', 'DSCP_CS7'], outer_class=root_module['ns3::Ipv4Header'], import_from_module='ns.internet')
     ## ipv4-header.h (module 'internet'): ns3::Ipv4Header::EcnType [enumeration]
     module.add_enum('EcnType', ['ECN_NotECT', 'ECN_ECT1', 'ECN_ECT0', 'ECN_CE'], outer_class=root_module['ns3::Ipv4Header'], import_from_module='ns.internet')
-    ## ipv6-header.h (module 'internet'): ns3::Ipv6Header [class]
-    module.add_class('Ipv6Header', import_from_module='ns.internet', parent=root_module['ns3::Header'])
-    ## ipv6-header.h (module 'internet'): ns3::Ipv6Header::NextHeader_e [enumeration]
-    module.add_enum('NextHeader_e', ['IPV6_EXT_HOP_BY_HOP', 'IPV6_IPV4', 'IPV6_TCP', 'IPV6_UDP', 'IPV6_IPV6', 'IPV6_EXT_ROUTING', 'IPV6_EXT_FRAGMENTATION', 'IPV6_EXT_CONFIDENTIALITY', 'IPV6_EXT_AUTHENTIFICATION', 'IPV6_ICMPV6', 'IPV6_EXT_END', 'IPV6_EXT_DESTINATION', 'IPV6_SCTP', 'IPV6_EXT_MOBILITY', 'IPV6_UDP_LITE'], outer_class=root_module['ns3::Ipv6Header'], import_from_module='ns.internet')
     ## 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]
@@ -190,8 +136,6 @@
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::AttributeValue', 'ns3::empty', 'ns3::DefaultDeleter<ns3::AttributeValue>'], 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::CallbackImplBase, ns3::empty, ns3::DefaultDeleter<ns3::CallbackImplBase> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::CallbackImplBase', 'ns3::empty', 'ns3::DefaultDeleter<ns3::CallbackImplBase>'], 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::EventImpl, ns3::empty, ns3::DefaultDeleter<ns3::EventImpl> > [class]
-    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::Ipv4MulticastRoute, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4MulticastRoute> > [class]
@@ -224,12 +168,6 @@
     module.add_class('SocketIpv6TclassTag', import_from_module='ns.network', parent=root_module['ns3::Tag'])
     ## socket.h (module 'network'): ns3::SocketSetDontFragmentTag [class]
     module.add_class('SocketSetDontFragmentTag', import_from_module='ns.network', parent=root_module['ns3::Tag'])
-    ## nstime.h (module 'core'): ns3::Time [class]
-    module.add_class('Time', import_from_module='ns.core')
-    ## nstime.h (module 'core'): ns3::Time::Unit [enumeration]
-    module.add_enum('Unit', ['S', 'MS', 'US', 'NS', 'PS', 'FS', 'LAST'], outer_class=root_module['ns3::Time'], import_from_module='ns.core')
-    ## nstime.h (module 'core'): ns3::Time [class]
-    root_module['ns3::Time'].implicitly_converts_to(root_module['ns3::int64x64_t'])
     ## trace-source-accessor.h (module 'core'): ns3::TraceSourceAccessor [class]
     module.add_class('TraceSourceAccessor', import_from_module='ns.core', parent=root_module['ns3::SimpleRefCount< ns3::TraceSourceAccessor, ns3::empty, ns3::DefaultDeleter<ns3::TraceSourceAccessor> >'])
     ## trailer.h (module 'network'): ns3::Trailer [class]
@@ -248,12 +186,6 @@
     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'])
-    ## 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> >'])
-    ## ip-l4-protocol.h (module 'internet'): ns3::IpL4Protocol [class]
-    module.add_class('IpL4Protocol', import_from_module='ns.internet', parent=root_module['ns3::Object'])
-    ## ip-l4-protocol.h (module 'internet'): ns3::IpL4Protocol::RxStatus [enumeration]
-    module.add_enum('RxStatus', ['RX_OK', 'RX_CSUM_FAILED', 'RX_ENDPOINT_CLOSED', 'RX_ENDPOINT_UNREACH'], outer_class=root_module['ns3::IpL4Protocol'], import_from_module='ns.internet')
     ## ipv4.h (module 'internet'): ns3::Ipv4 [class]
     module.add_class('Ipv4', import_from_module='ns.internet', parent=root_module['ns3::Object'])
     ## ipv4-address.h (module 'network'): ns3::Ipv4AddressChecker [class]
@@ -278,8 +210,6 @@
     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-interface.h (module 'internet'): ns3::Ipv6Interface [class]
-    module.add_class('Ipv6Interface', import_from_module='ns.internet', parent=root_module['ns3::Object'])
     ## 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]
@@ -290,16 +220,10 @@
     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> >'])
-    ## object-factory.h (module 'core'): ns3::ObjectFactoryChecker [class]
-    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'])
     ## output-stream-wrapper.h (module 'network'): ns3::OutputStreamWrapper [class]
     module.add_class('OutputStreamWrapper', import_from_module='ns.network', parent=root_module['ns3::SimpleRefCount< ns3::OutputStreamWrapper, ns3::empty, ns3::DefaultDeleter<ns3::OutputStreamWrapper> >'])
     ## 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> >'])
-    ## nstime.h (module 'core'): ns3::TimeValue [class]
-    module.add_class('TimeValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## type-id.h (module 'core'): ns3::TypeIdChecker [class]
     module.add_class('TypeIdChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## type-id.h (module 'core'): ns3::TypeIdValue [class]
@@ -376,27 +300,17 @@
     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_Ns3EventId_methods(root_module, root_module['ns3::EventId'])
     register_Ns3Hasher_methods(root_module, root_module['ns3::Hasher'])
     register_Ns3Inet6SocketAddress_methods(root_module, root_module['ns3::Inet6SocketAddress'])
     register_Ns3InetSocketAddress_methods(root_module, root_module['ns3::InetSocketAddress'])
-    register_Ns3IntToType__0_methods(root_module, root_module['ns3::IntToType< 0 >'])
-    register_Ns3IntToType__1_methods(root_module, root_module['ns3::IntToType< 1 >'])
-    register_Ns3IntToType__2_methods(root_module, root_module['ns3::IntToType< 2 >'])
-    register_Ns3IntToType__3_methods(root_module, root_module['ns3::IntToType< 3 >'])
-    register_Ns3IntToType__4_methods(root_module, root_module['ns3::IntToType< 4 >'])
-    register_Ns3IntToType__5_methods(root_module, root_module['ns3::IntToType< 5 >'])
-    register_Ns3IntToType__6_methods(root_module, root_module['ns3::IntToType< 6 >'])
     register_Ns3Ipv4Address_methods(root_module, root_module['ns3::Ipv4Address'])
     register_Ns3Ipv4InterfaceAddress_methods(root_module, root_module['ns3::Ipv4InterfaceAddress'])
     register_Ns3Ipv4Mask_methods(root_module, root_module['ns3::Ipv4Mask'])
     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_Ns3LogComponent_methods(root_module, root_module['ns3::LogComponent'])
     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'])
@@ -405,28 +319,22 @@
     register_Ns3PacketTagList_methods(root_module, root_module['ns3::PacketTagList'])
     register_Ns3PacketTagListTagData_methods(root_module, root_module['ns3::PacketTagList::TagData'])
     register_Ns3SimpleRefCount__Ns3Object_Ns3ObjectBase_Ns3ObjectDeleter_methods(root_module, root_module['ns3::SimpleRefCount< ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter >'])
-    register_Ns3Simulator_methods(root_module, root_module['ns3::Simulator'])
     register_Ns3SystemWallClockMs_methods(root_module, root_module['ns3::SystemWallClockMs'])
     register_Ns3Tag_methods(root_module, root_module['ns3::Tag'])
     register_Ns3TagBuffer_methods(root_module, root_module['ns3::TagBuffer'])
-    register_Ns3Timer_methods(root_module, root_module['ns3::Timer'])
-    register_Ns3TimerImpl_methods(root_module, root_module['ns3::TimerImpl'])
     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_Ns3Empty_methods(root_module, root_module['ns3::empty'])
-    register_Ns3Int64x64_t_methods(root_module, root_module['ns3::int64x64_t'])
     register_Ns3Chunk_methods(root_module, root_module['ns3::Chunk'])
     register_Ns3Header_methods(root_module, root_module['ns3::Header'])
     register_Ns3Ipv4Header_methods(root_module, root_module['ns3::Ipv4Header'])
-    register_Ns3Ipv6Header_methods(root_module, root_module['ns3::Ipv6Header'])
     register_Ns3Object_methods(root_module, root_module['ns3::Object'])
     register_Ns3ObjectAggregateIterator_methods(root_module, root_module['ns3::Object::AggregateIterator'])
     register_Ns3SimpleRefCount__Ns3AttributeAccessor_Ns3Empty_Ns3DefaultDeleter__lt__ns3AttributeAccessor__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::AttributeAccessor, ns3::empty, ns3::DefaultDeleter<ns3::AttributeAccessor> >'])
     register_Ns3SimpleRefCount__Ns3AttributeChecker_Ns3Empty_Ns3DefaultDeleter__lt__ns3AttributeChecker__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::AttributeChecker, ns3::empty, ns3::DefaultDeleter<ns3::AttributeChecker> >'])
     register_Ns3SimpleRefCount__Ns3AttributeValue_Ns3Empty_Ns3DefaultDeleter__lt__ns3AttributeValue__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::AttributeValue, ns3::empty, ns3::DefaultDeleter<ns3::AttributeValue> >'])
     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__Ns3Ipv4MulticastRoute_Ns3Empty_Ns3DefaultDeleter__lt__ns3Ipv4MulticastRoute__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Ipv4MulticastRoute, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4MulticastRoute> >'])
     register_Ns3SimpleRefCount__Ns3Ipv4Route_Ns3Empty_Ns3DefaultDeleter__lt__ns3Ipv4Route__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Ipv4Route, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4Route> >'])
@@ -441,7 +349,6 @@
     register_Ns3SocketIpv6HopLimitTag_methods(root_module, root_module['ns3::SocketIpv6HopLimitTag'])
     register_Ns3SocketIpv6TclassTag_methods(root_module, root_module['ns3::SocketIpv6TclassTag'])
     register_Ns3SocketSetDontFragmentTag_methods(root_module, root_module['ns3::SocketSetDontFragmentTag'])
-    register_Ns3Time_methods(root_module, root_module['ns3::Time'])
     register_Ns3TraceSourceAccessor_methods(root_module, root_module['ns3::TraceSourceAccessor'])
     register_Ns3Trailer_methods(root_module, root_module['ns3::Trailer'])
     register_Ns3AttributeAccessor_methods(root_module, root_module['ns3::AttributeAccessor'])
@@ -451,8 +358,6 @@
     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_Ns3EventImpl_methods(root_module, root_module['ns3::EventImpl'])
-    register_Ns3IpL4Protocol_methods(root_module, root_module['ns3::IpL4Protocol'])
     register_Ns3Ipv4_methods(root_module, root_module['ns3::Ipv4'])
     register_Ns3Ipv4AddressChecker_methods(root_module, root_module['ns3::Ipv4AddressChecker'])
     register_Ns3Ipv4AddressValue_methods(root_module, root_module['ns3::Ipv4AddressValue'])
@@ -465,16 +370,12 @@
     register_Ns3Ipv4RoutingProtocol_methods(root_module, root_module['ns3::Ipv4RoutingProtocol'])
     register_Ns3Ipv6AddressChecker_methods(root_module, root_module['ns3::Ipv6AddressChecker'])
     register_Ns3Ipv6AddressValue_methods(root_module, root_module['ns3::Ipv6AddressValue'])
-    register_Ns3Ipv6Interface_methods(root_module, root_module['ns3::Ipv6Interface'])
     register_Ns3Ipv6PrefixChecker_methods(root_module, root_module['ns3::Ipv6PrefixChecker'])
     register_Ns3Ipv6PrefixValue_methods(root_module, root_module['ns3::Ipv6PrefixValue'])
     register_Ns3NetDevice_methods(root_module, root_module['ns3::NetDevice'])
     register_Ns3NixVector_methods(root_module, root_module['ns3::NixVector'])
-    register_Ns3ObjectFactoryChecker_methods(root_module, root_module['ns3::ObjectFactoryChecker'])
-    register_Ns3ObjectFactoryValue_methods(root_module, root_module['ns3::ObjectFactoryValue'])
     register_Ns3OutputStreamWrapper_methods(root_module, root_module['ns3::OutputStreamWrapper'])
     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'])
@@ -965,51 +866,6 @@
                    is_static=True, visibility='protected')
     return
 
-def register_Ns3EventId_methods(root_module, cls):
-    cls.add_binary_comparison_operator('!=')
-    cls.add_binary_comparison_operator('==')
-    ## event-id.h (module 'core'): ns3::EventId::EventId(ns3::EventId const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::EventId const &', 'arg0')])
-    ## event-id.h (module 'core'): ns3::EventId::EventId() [constructor]
-    cls.add_constructor([])
-    ## event-id.h (module 'core'): ns3::EventId::EventId(ns3::Ptr<ns3::EventImpl> const & impl, uint64_t ts, uint32_t context, uint32_t uid) [constructor]
-    cls.add_constructor([param('ns3::Ptr< ns3::EventImpl > const &', 'impl'), param('uint64_t', 'ts'), param('uint32_t', 'context'), param('uint32_t', 'uid')])
-    ## event-id.h (module 'core'): void ns3::EventId::Cancel() [member function]
-    cls.add_method('Cancel', 
-                   'void', 
-                   [])
-    ## event-id.h (module 'core'): uint32_t ns3::EventId::GetContext() const [member function]
-    cls.add_method('GetContext', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    ## event-id.h (module 'core'): uint64_t ns3::EventId::GetTs() const [member function]
-    cls.add_method('GetTs', 
-                   'uint64_t', 
-                   [], 
-                   is_const=True)
-    ## event-id.h (module 'core'): uint32_t ns3::EventId::GetUid() const [member function]
-    cls.add_method('GetUid', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    ## event-id.h (module 'core'): bool ns3::EventId::IsExpired() const [member function]
-    cls.add_method('IsExpired', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## event-id.h (module 'core'): bool ns3::EventId::IsRunning() const [member function]
-    cls.add_method('IsRunning', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## event-id.h (module 'core'): ns3::EventImpl * ns3::EventId::PeekEventImpl() const [member function]
-    cls.add_method('PeekEventImpl', 
-                   'ns3::EventImpl *', 
-                   [], 
-                   is_const=True)
-    return
-
 def register_Ns3Hasher_methods(root_module, cls):
     ## hash.h (module 'core'): ns3::Hasher::Hasher(ns3::Hasher const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::Hasher const &', 'arg0')])
@@ -1125,55 +981,6 @@
                    [param('uint16_t', 'port')])
     return
 
-def register_Ns3IntToType__0_methods(root_module, cls):
-    ## int-to-type.h (module 'core'): ns3::IntToType<0>::IntToType() [constructor]
-    cls.add_constructor([])
-    ## int-to-type.h (module 'core'): ns3::IntToType<0>::IntToType(ns3::IntToType<0> const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::IntToType< 0 > const &', 'arg0')])
-    return
-
-def register_Ns3IntToType__1_methods(root_module, cls):
-    ## int-to-type.h (module 'core'): ns3::IntToType<1>::IntToType() [constructor]
-    cls.add_constructor([])
-    ## int-to-type.h (module 'core'): ns3::IntToType<1>::IntToType(ns3::IntToType<1> const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::IntToType< 1 > const &', 'arg0')])
-    return
-
-def register_Ns3IntToType__2_methods(root_module, cls):
-    ## int-to-type.h (module 'core'): ns3::IntToType<2>::IntToType() [constructor]
-    cls.add_constructor([])
-    ## int-to-type.h (module 'core'): ns3::IntToType<2>::IntToType(ns3::IntToType<2> const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::IntToType< 2 > const &', 'arg0')])
-    return
-
-def register_Ns3IntToType__3_methods(root_module, cls):
-    ## int-to-type.h (module 'core'): ns3::IntToType<3>::IntToType() [constructor]
-    cls.add_constructor([])
-    ## int-to-type.h (module 'core'): ns3::IntToType<3>::IntToType(ns3::IntToType<3> const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::IntToType< 3 > const &', 'arg0')])
-    return
-
-def register_Ns3IntToType__4_methods(root_module, cls):
-    ## int-to-type.h (module 'core'): ns3::IntToType<4>::IntToType() [constructor]
-    cls.add_constructor([])
-    ## int-to-type.h (module 'core'): ns3::IntToType<4>::IntToType(ns3::IntToType<4> const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::IntToType< 4 > const &', 'arg0')])
-    return
-
-def register_Ns3IntToType__5_methods(root_module, cls):
-    ## int-to-type.h (module 'core'): ns3::IntToType<5>::IntToType() [constructor]
-    cls.add_constructor([])
-    ## int-to-type.h (module 'core'): ns3::IntToType<5>::IntToType(ns3::IntToType<5> const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::IntToType< 5 > const &', 'arg0')])
-    return
-
-def register_Ns3IntToType__6_methods(root_module, cls):
-    ## int-to-type.h (module 'core'): ns3::IntToType<6>::IntToType() [constructor]
-    cls.add_constructor([])
-    ## int-to-type.h (module 'core'): ns3::IntToType<6>::IntToType(ns3::IntToType<6> const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::IntToType< 6 > const &', 'arg0')])
-    return
-
 def register_Ns3Ipv4Address_methods(root_module, cls):
     cls.add_binary_comparison_operator('<')
     cls.add_binary_comparison_operator('!=')
@@ -1510,10 +1317,11 @@
                    'bool', 
                    [param('ns3::Ipv6Address const &', 'other')], 
                    is_const=True)
-    ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsIpv4MappedAddress() [member function]
+    ## 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', 
@@ -1604,61 +1412,6 @@
                    [param('uint8_t *', 'address')])
     return
 
-def register_Ns3Ipv6InterfaceAddress_methods(root_module, cls):
-    cls.add_binary_comparison_operator('!=')
-    cls.add_output_stream_operator()
-    cls.add_binary_comparison_operator('==')
-    ## ipv6-interface-address.h (module 'internet'): ns3::Ipv6InterfaceAddress::Ipv6InterfaceAddress() [constructor]
-    cls.add_constructor([])
-    ## ipv6-interface-address.h (module 'internet'): ns3::Ipv6InterfaceAddress::Ipv6InterfaceAddress(ns3::Ipv6Address address) [constructor]
-    cls.add_constructor([param('ns3::Ipv6Address', 'address')])
-    ## ipv6-interface-address.h (module 'internet'): ns3::Ipv6InterfaceAddress::Ipv6InterfaceAddress(ns3::Ipv6Address address, ns3::Ipv6Prefix prefix) [constructor]
-    cls.add_constructor([param('ns3::Ipv6Address', 'address'), param('ns3::Ipv6Prefix', 'prefix')])
-    ## ipv6-interface-address.h (module 'internet'): ns3::Ipv6InterfaceAddress::Ipv6InterfaceAddress(ns3::Ipv6InterfaceAddress const & o) [copy constructor]
-    cls.add_constructor([param('ns3::Ipv6InterfaceAddress const &', 'o')])
-    ## ipv6-interface-address.h (module 'internet'): ns3::Ipv6Address ns3::Ipv6InterfaceAddress::GetAddress() const [member function]
-    cls.add_method('GetAddress', 
-                   'ns3::Ipv6Address', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface-address.h (module 'internet'): uint32_t ns3::Ipv6InterfaceAddress::GetNsDadUid() const [member function]
-    cls.add_method('GetNsDadUid', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface-address.h (module 'internet'): ns3::Ipv6Prefix ns3::Ipv6InterfaceAddress::GetPrefix() const [member function]
-    cls.add_method('GetPrefix', 
-                   'ns3::Ipv6Prefix', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface-address.h (module 'internet'): ns3::Ipv6InterfaceAddress::Scope_e ns3::Ipv6InterfaceAddress::GetScope() const [member function]
-    cls.add_method('GetScope', 
-                   'ns3::Ipv6InterfaceAddress::Scope_e', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface-address.h (module 'internet'): ns3::Ipv6InterfaceAddress::State_e ns3::Ipv6InterfaceAddress::GetState() const [member function]
-    cls.add_method('GetState', 
-                   'ns3::Ipv6InterfaceAddress::State_e', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface-address.h (module 'internet'): void ns3::Ipv6InterfaceAddress::SetAddress(ns3::Ipv6Address address) [member function]
-    cls.add_method('SetAddress', 
-                   'void', 
-                   [param('ns3::Ipv6Address', 'address')])
-    ## ipv6-interface-address.h (module 'internet'): void ns3::Ipv6InterfaceAddress::SetNsDadUid(uint32_t uid) [member function]
-    cls.add_method('SetNsDadUid', 
-                   'void', 
-                   [param('uint32_t', 'uid')])
-    ## ipv6-interface-address.h (module 'internet'): void ns3::Ipv6InterfaceAddress::SetScope(ns3::Ipv6InterfaceAddress::Scope_e scope) [member function]
-    cls.add_method('SetScope', 
-                   'void', 
-                   [param('ns3::Ipv6InterfaceAddress::Scope_e', 'scope')])
-    ## ipv6-interface-address.h (module 'internet'): void ns3::Ipv6InterfaceAddress::SetState(ns3::Ipv6InterfaceAddress::State_e state) [member function]
-    cls.add_method('SetState', 
-                   'void', 
-                   [param('ns3::Ipv6InterfaceAddress::State_e', 'state')])
-    return
-
 def register_Ns3Ipv6Prefix_methods(root_module, cls):
     cls.add_binary_comparison_operator('!=')
     cls.add_output_stream_operator()
@@ -1720,8 +1473,8 @@
 def register_Ns3LogComponent_methods(root_module, cls):
     ## log.h (module 'core'): ns3::LogComponent::LogComponent(ns3::LogComponent const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::LogComponent const &', 'arg0')])
-    ## log.h (module 'core'): ns3::LogComponent::LogComponent(char const * name) [constructor]
-    cls.add_constructor([param('char const *', 'name')])
+    ## log.h (module 'core'): ns3::LogComponent::LogComponent(std::string const & name) [constructor]
+    cls.add_constructor([param('std::string const &', 'name')])
     ## log.h (module 'core'): void ns3::LogComponent::Disable(ns3::LogLevel level) [member function]
     cls.add_method('Disable', 
                    'void', 
@@ -1730,10 +1483,10 @@
     cls.add_method('Enable', 
                    'void', 
                    [param('ns3::LogLevel', 'level')])
-    ## log.h (module 'core'): void ns3::LogComponent::EnvVarCheck(char const * name) [member function]
+    ## log.h (module 'core'): void ns3::LogComponent::EnvVarCheck(std::string const & name) [member function]
     cls.add_method('EnvVarCheck', 
                    'void', 
-                   [param('char const *', 'name')])
+                   [param('std::string const &', 'name')])
     ## log.h (module 'core'): std::string ns3::LogComponent::GetLevelLabel(ns3::LogLevel const level) const [member function]
     cls.add_method('GetLevelLabel', 
                    'std::string', 
@@ -1829,42 +1582,6 @@
                    is_static=True)
     return
 
-def register_Ns3ObjectFactory_methods(root_module, cls):
-    cls.add_output_stream_operator()
-    ## object-factory.h (module 'core'): ns3::ObjectFactory::ObjectFactory(ns3::ObjectFactory const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::ObjectFactory const &', 'arg0')])
-    ## object-factory.h (module 'core'): ns3::ObjectFactory::ObjectFactory() [constructor]
-    cls.add_constructor([])
-    ## object-factory.h (module 'core'): ns3::ObjectFactory::ObjectFactory(std::string typeId) [constructor]
-    cls.add_constructor([param('std::string', 'typeId')])
-    ## object-factory.h (module 'core'): ns3::Ptr<ns3::Object> ns3::ObjectFactory::Create() const [member function]
-    cls.add_method('Create', 
-                   'ns3::Ptr< ns3::Object >', 
-                   [], 
-                   is_const=True)
-    ## object-factory.h (module 'core'): ns3::TypeId ns3::ObjectFactory::GetTypeId() const [member function]
-    cls.add_method('GetTypeId', 
-                   'ns3::TypeId', 
-                   [], 
-                   is_const=True)
-    ## object-factory.h (module 'core'): void ns3::ObjectFactory::Set(std::string name, ns3::AttributeValue const & value) [member function]
-    cls.add_method('Set', 
-                   'void', 
-                   [param('std::string', 'name'), param('ns3::AttributeValue const &', 'value')])
-    ## object-factory.h (module 'core'): void ns3::ObjectFactory::SetTypeId(ns3::TypeId tid) [member function]
-    cls.add_method('SetTypeId', 
-                   'void', 
-                   [param('ns3::TypeId', 'tid')])
-    ## object-factory.h (module 'core'): void ns3::ObjectFactory::SetTypeId(char const * tid) [member function]
-    cls.add_method('SetTypeId', 
-                   'void', 
-                   [param('char const *', 'tid')])
-    ## object-factory.h (module 'core'): void ns3::ObjectFactory::SetTypeId(std::string tid) [member function]
-    cls.add_method('SetTypeId', 
-                   'void', 
-                   [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')])
@@ -2068,86 +1785,6 @@
                    is_static=True)
     return
 
-def register_Ns3Simulator_methods(root_module, cls):
-    ## simulator.h (module 'core'): ns3::Simulator::Simulator(ns3::Simulator const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::Simulator const &', 'arg0')])
-    ## simulator.h (module 'core'): static void ns3::Simulator::Cancel(ns3::EventId const & id) [member function]
-    cls.add_method('Cancel', 
-                   'void', 
-                   [param('ns3::EventId const &', 'id')], 
-                   is_static=True)
-    ## simulator.h (module 'core'): static void ns3::Simulator::Destroy() [member function]
-    cls.add_method('Destroy', 
-                   'void', 
-                   [], 
-                   is_static=True)
-    ## simulator.h (module 'core'): static uint32_t ns3::Simulator::GetContext() [member function]
-    cls.add_method('GetContext', 
-                   'uint32_t', 
-                   [], 
-                   is_static=True)
-    ## simulator.h (module 'core'): static ns3::Time ns3::Simulator::GetDelayLeft(ns3::EventId const & id) [member function]
-    cls.add_method('GetDelayLeft', 
-                   'ns3::Time', 
-                   [param('ns3::EventId const &', 'id')], 
-                   is_static=True)
-    ## simulator.h (module 'core'): static ns3::Ptr<ns3::SimulatorImpl> ns3::Simulator::GetImplementation() [member function]
-    cls.add_method('GetImplementation', 
-                   'ns3::Ptr< ns3::SimulatorImpl >', 
-                   [], 
-                   is_static=True)
-    ## simulator.h (module 'core'): static ns3::Time ns3::Simulator::GetMaximumSimulationTime() [member function]
-    cls.add_method('GetMaximumSimulationTime', 
-                   'ns3::Time', 
-                   [], 
-                   is_static=True)
-    ## simulator.h (module 'core'): static uint32_t ns3::Simulator::GetSystemId() [member function]
-    cls.add_method('GetSystemId', 
-                   'uint32_t', 
-                   [], 
-                   is_static=True)
-    ## simulator.h (module 'core'): static bool ns3::Simulator::IsExpired(ns3::EventId const & id) [member function]
-    cls.add_method('IsExpired', 
-                   'bool', 
-                   [param('ns3::EventId const &', 'id')], 
-                   is_static=True)
-    ## simulator.h (module 'core'): static bool ns3::Simulator::IsFinished() [member function]
-    cls.add_method('IsFinished', 
-                   'bool', 
-                   [], 
-                   is_static=True)
-    ## simulator.h (module 'core'): static ns3::Time ns3::Simulator::Now() [member function]
-    cls.add_method('Now', 
-                   'ns3::Time', 
-                   [], 
-                   is_static=True)
-    ## simulator.h (module 'core'): static void ns3::Simulator::Remove(ns3::EventId const & id) [member function]
-    cls.add_method('Remove', 
-                   'void', 
-                   [param('ns3::EventId const &', 'id')], 
-                   is_static=True)
-    ## simulator.h (module 'core'): static void ns3::Simulator::SetImplementation(ns3::Ptr<ns3::SimulatorImpl> impl) [member function]
-    cls.add_method('SetImplementation', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::SimulatorImpl >', 'impl')], 
-                   is_static=True)
-    ## simulator.h (module 'core'): static void ns3::Simulator::SetScheduler(ns3::ObjectFactory schedulerFactory) [member function]
-    cls.add_method('SetScheduler', 
-                   'void', 
-                   [param('ns3::ObjectFactory', 'schedulerFactory')], 
-                   is_static=True)
-    ## simulator.h (module 'core'): static void ns3::Simulator::Stop() [member function]
-    cls.add_method('Stop', 
-                   'void', 
-                   [], 
-                   is_static=True)
-    ## simulator.h (module 'core'): static void ns3::Simulator::Stop(ns3::Time const & time) [member function]
-    cls.add_method('Stop', 
-                   'void', 
-                   [param('ns3::Time const &', 'time')], 
-                   is_static=True)
-    return
-
 def register_Ns3SystemWallClockMs_methods(root_module, cls):
     ## system-wall-clock-ms.h (module 'core'): ns3::SystemWallClockMs::SystemWallClockMs(ns3::SystemWallClockMs const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::SystemWallClockMs const &', 'arg0')])
@@ -2273,90 +1910,6 @@
                    [param('uint8_t', 'v')])
     return
 
-def register_Ns3Timer_methods(root_module, cls):
-    ## timer.h (module 'core'): ns3::Timer::Timer(ns3::Timer const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::Timer const &', 'arg0')])
-    ## timer.h (module 'core'): ns3::Timer::Timer() [constructor]
-    cls.add_constructor([])
-    ## timer.h (module 'core'): ns3::Timer::Timer(ns3::Timer::DestroyPolicy destroyPolicy) [constructor]
-    cls.add_constructor([param('ns3::Timer::DestroyPolicy', 'destroyPolicy')])
-    ## timer.h (module 'core'): void ns3::Timer::Cancel() [member function]
-    cls.add_method('Cancel', 
-                   'void', 
-                   [])
-    ## timer.h (module 'core'): ns3::Time ns3::Timer::GetDelay() const [member function]
-    cls.add_method('GetDelay', 
-                   'ns3::Time', 
-                   [], 
-                   is_const=True)
-    ## timer.h (module 'core'): ns3::Time ns3::Timer::GetDelayLeft() const [member function]
-    cls.add_method('GetDelayLeft', 
-                   'ns3::Time', 
-                   [], 
-                   is_const=True)
-    ## timer.h (module 'core'): ns3::Timer::State ns3::Timer::GetState() const [member function]
-    cls.add_method('GetState', 
-                   'ns3::Timer::State', 
-                   [], 
-                   is_const=True)
-    ## timer.h (module 'core'): bool ns3::Timer::IsExpired() const [member function]
-    cls.add_method('IsExpired', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## timer.h (module 'core'): bool ns3::Timer::IsRunning() const [member function]
-    cls.add_method('IsRunning', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## timer.h (module 'core'): bool ns3::Timer::IsSuspended() const [member function]
-    cls.add_method('IsSuspended', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## timer.h (module 'core'): void ns3::Timer::Remove() [member function]
-    cls.add_method('Remove', 
-                   'void', 
-                   [])
-    ## timer.h (module 'core'): void ns3::Timer::Resume() [member function]
-    cls.add_method('Resume', 
-                   'void', 
-                   [])
-    ## timer.h (module 'core'): void ns3::Timer::Schedule() [member function]
-    cls.add_method('Schedule', 
-                   'void', 
-                   [])
-    ## timer.h (module 'core'): void ns3::Timer::Schedule(ns3::Time delay) [member function]
-    cls.add_method('Schedule', 
-                   'void', 
-                   [param('ns3::Time', 'delay')])
-    ## timer.h (module 'core'): void ns3::Timer::SetDelay(ns3::Time const & delay) [member function]
-    cls.add_method('SetDelay', 
-                   'void', 
-                   [param('ns3::Time const &', 'delay')])
-    ## timer.h (module 'core'): void ns3::Timer::Suspend() [member function]
-    cls.add_method('Suspend', 
-                   'void', 
-                   [])
-    return
-
-def register_Ns3TimerImpl_methods(root_module, cls):
-    ## timer-impl.h (module 'core'): ns3::TimerImpl::TimerImpl() [constructor]
-    cls.add_constructor([])
-    ## timer-impl.h (module 'core'): ns3::TimerImpl::TimerImpl(ns3::TimerImpl const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::TimerImpl const &', 'arg0')])
-    ## timer-impl.h (module 'core'): void ns3::TimerImpl::Invoke() [member function]
-    cls.add_method('Invoke', 
-                   'void', 
-                   [], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## timer-impl.h (module 'core'): ns3::EventId ns3::TimerImpl::Schedule(ns3::Time const & delay) [member function]
-    cls.add_method('Schedule', 
-                   'ns3::EventId', 
-                   [param('ns3::Time const &', 'delay')], 
-                   is_pure_virtual=True, is_virtual=True)
-    return
-
 def register_Ns3TypeId_methods(root_module, cls):
     cls.add_binary_comparison_operator('<')
     cls.add_binary_comparison_operator('!=')
@@ -2553,113 +2106,6 @@
     cls.add_constructor([param('ns3::empty const &', 'arg0')])
     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_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_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_output_stream_operator()
-    cls.add_binary_comparison_operator('<=')
-    cls.add_binary_comparison_operator('==')
-    cls.add_binary_comparison_operator('>=')
-    ## int64x64-double.h (module 'core'): ns3::int64x64_t::int64x64_t() [constructor]
-    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(int v) [constructor]
-    cls.add_constructor([param('int', 'v')])
-    ## int64x64-double.h (module 'core'): ns3::int64x64_t::int64x64_t(long int v) [constructor]
-    cls.add_constructor([param('long int', 'v')])
-    ## int64x64-double.h (module 'core'): ns3::int64x64_t::int64x64_t(long long int v) [constructor]
-    cls.add_constructor([param('long long int', 'v')])
-    ## int64x64-double.h (module 'core'): ns3::int64x64_t::int64x64_t(unsigned int v) [constructor]
-    cls.add_constructor([param('unsigned int', 'v')])
-    ## int64x64-double.h (module 'core'): ns3::int64x64_t::int64x64_t(long unsigned int v) [constructor]
-    cls.add_constructor([param('long unsigned int', 'v')])
-    ## int64x64-double.h (module 'core'): ns3::int64x64_t::int64x64_t(long long unsigned int v) [constructor]
-    cls.add_constructor([param('long long unsigned int', 'v')])
-    ## int64x64-double.h (module 'core'): ns3::int64x64_t::int64x64_t(int64_t hi, uint64_t lo) [constructor]
-    cls.add_constructor([param('int64_t', 'hi'), param('uint64_t', 'lo')])
-    ## int64x64-double.h (module 'core'): ns3::int64x64_t::int64x64_t(ns3::int64x64_t const & o) [copy constructor]
-    cls.add_constructor([param('ns3::int64x64_t const &', 'o')])
-    ## int64x64-double.h (module 'core'): double ns3::int64x64_t::GetDouble() const [member function]
-    cls.add_method('GetDouble', 
-                   'double', 
-                   [], 
-                   is_const=True)
-    ## int64x64-double.h (module 'core'): int64_t ns3::int64x64_t::GetHigh() const [member function]
-    cls.add_method('GetHigh', 
-                   'int64_t', 
-                   [], 
-                   is_const=True)
-    ## int64x64-double.h (module 'core'): uint64_t ns3::int64x64_t::GetLow() const [member function]
-    cls.add_method('GetLow', 
-                   'uint64_t', 
-                   [], 
-                   is_const=True)
-    ## int64x64-double.h (module 'core'): static ns3::int64x64_t ns3::int64x64_t::Invert(uint64_t v) [member function]
-    cls.add_method('Invert', 
-                   'ns3::int64x64_t', 
-                   [param('uint64_t', 'v')], 
-                   is_static=True)
-    ## int64x64-double.h (module 'core'): void ns3::int64x64_t::MulByInvert(ns3::int64x64_t const & o) [member function]
-    cls.add_method('MulByInvert', 
-                   'void', 
-                   [param('ns3::int64x64_t const &', 'o')])
-    return
-
 def register_Ns3Chunk_methods(root_module, cls):
     ## chunk.h (module 'network'): ns3::Chunk::Chunk() [constructor]
     cls.add_constructor([])
@@ -2887,106 +2333,6 @@
                    [param('uint8_t', 'ttl')])
     return
 
-def register_Ns3Ipv6Header_methods(root_module, cls):
-    ## ipv6-header.h (module 'internet'): ns3::Ipv6Header::Ipv6Header(ns3::Ipv6Header const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::Ipv6Header const &', 'arg0')])
-    ## ipv6-header.h (module 'internet'): ns3::Ipv6Header::Ipv6Header() [constructor]
-    cls.add_constructor([])
-    ## ipv6-header.h (module 'internet'): uint32_t ns3::Ipv6Header::Deserialize(ns3::Buffer::Iterator start) [member function]
-    cls.add_method('Deserialize', 
-                   'uint32_t', 
-                   [param('ns3::Buffer::Iterator', 'start')], 
-                   is_virtual=True)
-    ## ipv6-header.h (module 'internet'): ns3::Ipv6Address ns3::Ipv6Header::GetDestinationAddress() const [member function]
-    cls.add_method('GetDestinationAddress', 
-                   'ns3::Ipv6Address', 
-                   [], 
-                   is_const=True)
-    ## ipv6-header.h (module 'internet'): uint32_t ns3::Ipv6Header::GetFlowLabel() const [member function]
-    cls.add_method('GetFlowLabel', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    ## ipv6-header.h (module 'internet'): uint8_t ns3::Ipv6Header::GetHopLimit() const [member function]
-    cls.add_method('GetHopLimit', 
-                   'uint8_t', 
-                   [], 
-                   is_const=True)
-    ## ipv6-header.h (module 'internet'): ns3::TypeId ns3::Ipv6Header::GetInstanceTypeId() const [member function]
-    cls.add_method('GetInstanceTypeId', 
-                   'ns3::TypeId', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## ipv6-header.h (module 'internet'): uint8_t ns3::Ipv6Header::GetNextHeader() const [member function]
-    cls.add_method('GetNextHeader', 
-                   'uint8_t', 
-                   [], 
-                   is_const=True)
-    ## ipv6-header.h (module 'internet'): uint16_t ns3::Ipv6Header::GetPayloadLength() const [member function]
-    cls.add_method('GetPayloadLength', 
-                   'uint16_t', 
-                   [], 
-                   is_const=True)
-    ## ipv6-header.h (module 'internet'): uint32_t ns3::Ipv6Header::GetSerializedSize() const [member function]
-    cls.add_method('GetSerializedSize', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## ipv6-header.h (module 'internet'): ns3::Ipv6Address ns3::Ipv6Header::GetSourceAddress() const [member function]
-    cls.add_method('GetSourceAddress', 
-                   'ns3::Ipv6Address', 
-                   [], 
-                   is_const=True)
-    ## ipv6-header.h (module 'internet'): uint8_t ns3::Ipv6Header::GetTrafficClass() const [member function]
-    cls.add_method('GetTrafficClass', 
-                   'uint8_t', 
-                   [], 
-                   is_const=True)
-    ## ipv6-header.h (module 'internet'): static ns3::TypeId ns3::Ipv6Header::GetTypeId() [member function]
-    cls.add_method('GetTypeId', 
-                   'ns3::TypeId', 
-                   [], 
-                   is_static=True)
-    ## ipv6-header.h (module 'internet'): void ns3::Ipv6Header::Print(std::ostream & os) const [member function]
-    cls.add_method('Print', 
-                   'void', 
-                   [param('std::ostream &', 'os')], 
-                   is_const=True, is_virtual=True)
-    ## ipv6-header.h (module 'internet'): void ns3::Ipv6Header::Serialize(ns3::Buffer::Iterator start) const [member function]
-    cls.add_method('Serialize', 
-                   'void', 
-                   [param('ns3::Buffer::Iterator', 'start')], 
-                   is_const=True, is_virtual=True)
-    ## ipv6-header.h (module 'internet'): void ns3::Ipv6Header::SetDestinationAddress(ns3::Ipv6Address dst) [member function]
-    cls.add_method('SetDestinationAddress', 
-                   'void', 
-                   [param('ns3::Ipv6Address', 'dst')])
-    ## ipv6-header.h (module 'internet'): void ns3::Ipv6Header::SetFlowLabel(uint32_t flow) [member function]
-    cls.add_method('SetFlowLabel', 
-                   'void', 
-                   [param('uint32_t', 'flow')])
-    ## ipv6-header.h (module 'internet'): void ns3::Ipv6Header::SetHopLimit(uint8_t limit) [member function]
-    cls.add_method('SetHopLimit', 
-                   'void', 
-                   [param('uint8_t', 'limit')])
-    ## ipv6-header.h (module 'internet'): void ns3::Ipv6Header::SetNextHeader(uint8_t next) [member function]
-    cls.add_method('SetNextHeader', 
-                   'void', 
-                   [param('uint8_t', 'next')])
-    ## ipv6-header.h (module 'internet'): void ns3::Ipv6Header::SetPayloadLength(uint16_t len) [member function]
-    cls.add_method('SetPayloadLength', 
-                   'void', 
-                   [param('uint16_t', 'len')])
-    ## ipv6-header.h (module 'internet'): void ns3::Ipv6Header::SetSourceAddress(ns3::Ipv6Address src) [member function]
-    cls.add_method('SetSourceAddress', 
-                   'void', 
-                   [param('ns3::Ipv6Address', 'src')])
-    ## ipv6-header.h (module 'internet'): void ns3::Ipv6Header::SetTrafficClass(uint8_t traffic) [member function]
-    cls.add_method('SetTrafficClass', 
-                   'void', 
-                   [param('uint8_t', 'traffic')])
-    return
-
 def register_Ns3Object_methods(root_module, cls):
     ## object.h (module 'core'): ns3::Object::Object() [constructor]
     cls.add_constructor([])
@@ -3101,18 +2447,6 @@
                    is_static=True)
     return
 
-def register_Ns3SimpleRefCount__Ns3EventImpl_Ns3Empty_Ns3DefaultDeleter__lt__ns3EventImpl__gt___methods(root_module, cls):
-    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::EventImpl, ns3::empty, ns3::DefaultDeleter<ns3::EventImpl> >::SimpleRefCount() [constructor]
-    cls.add_constructor([])
-    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::EventImpl, ns3::empty, ns3::DefaultDeleter<ns3::EventImpl> >::SimpleRefCount(ns3::SimpleRefCount<ns3::EventImpl, ns3::empty, ns3::DefaultDeleter<ns3::EventImpl> > const & o) [copy constructor]
-    cls.add_constructor([param('ns3::SimpleRefCount< ns3::EventImpl, ns3::empty, ns3::DefaultDeleter< ns3::EventImpl > > const &', 'o')])
-    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::EventImpl, ns3::empty, ns3::DefaultDeleter<ns3::EventImpl> >::Cleanup() [member function]
-    cls.add_method('Cleanup', 
-                   'void', 
-                   [], 
-                   is_static=True)
-    return
-
 def register_Ns3SimpleRefCount__Ns3HashImplementation_Ns3Empty_Ns3DefaultDeleter__lt__ns3HashImplementation__gt___methods(root_module, cls):
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::SimpleRefCount() [constructor]
     cls.add_constructor([])
@@ -3808,177 +3142,6 @@
                    is_const=True, is_virtual=True)
     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_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_output_stream_operator()
-    cls.add_binary_comparison_operator('<=')
-    cls.add_binary_comparison_operator('==')
-    cls.add_binary_comparison_operator('>=')
-    ## nstime.h (module 'core'): ns3::Time::Time() [constructor]
-    cls.add_constructor([])
-    ## nstime.h (module 'core'): ns3::Time::Time(ns3::Time const & o) [copy constructor]
-    cls.add_constructor([param('ns3::Time const &', 'o')])
-    ## nstime.h (module 'core'): ns3::Time::Time(double v) [constructor]
-    cls.add_constructor([param('double', 'v')])
-    ## nstime.h (module 'core'): ns3::Time::Time(int v) [constructor]
-    cls.add_constructor([param('int', 'v')])
-    ## nstime.h (module 'core'): ns3::Time::Time(long int v) [constructor]
-    cls.add_constructor([param('long int', 'v')])
-    ## nstime.h (module 'core'): ns3::Time::Time(long long int v) [constructor]
-    cls.add_constructor([param('long long int', 'v')])
-    ## nstime.h (module 'core'): ns3::Time::Time(unsigned int v) [constructor]
-    cls.add_constructor([param('unsigned int', 'v')])
-    ## nstime.h (module 'core'): ns3::Time::Time(long unsigned int v) [constructor]
-    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(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'): 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]
-    cls.add_method('From', 
-                   'ns3::Time', 
-                   [param('ns3::int64x64_t const &', 'from'), param('ns3::Time::Unit', 'timeUnit')], 
-                   is_static=True)
-    ## 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 &', 'value')], 
-                   is_static=True)
-    ## nstime.h (module 'core'): static ns3::Time ns3::Time::FromDouble(double value, ns3::Time::Unit timeUnit) [member function]
-    cls.add_method('FromDouble', 
-                   'ns3::Time', 
-                   [param('double', 'value'), param('ns3::Time::Unit', 'timeUnit')], 
-                   is_static=True)
-    ## nstime.h (module 'core'): static ns3::Time ns3::Time::FromInteger(uint64_t value, ns3::Time::Unit timeUnit) [member function]
-    cls.add_method('FromInteger', 
-                   'ns3::Time', 
-                   [param('uint64_t', 'value'), param('ns3::Time::Unit', 'timeUnit')], 
-                   is_static=True)
-    ## nstime.h (module 'core'): double ns3::Time::GetDouble() const [member function]
-    cls.add_method('GetDouble', 
-                   'double', 
-                   [], 
-                   is_const=True)
-    ## nstime.h (module 'core'): int64_t ns3::Time::GetFemtoSeconds() const [member function]
-    cls.add_method('GetFemtoSeconds', 
-                   'int64_t', 
-                   [], 
-                   is_const=True)
-    ## nstime.h (module 'core'): int64_t ns3::Time::GetInteger() const [member function]
-    cls.add_method('GetInteger', 
-                   'int64_t', 
-                   [], 
-                   is_const=True)
-    ## nstime.h (module 'core'): int64_t ns3::Time::GetMicroSeconds() const [member function]
-    cls.add_method('GetMicroSeconds', 
-                   'int64_t', 
-                   [], 
-                   is_const=True)
-    ## nstime.h (module 'core'): int64_t ns3::Time::GetMilliSeconds() const [member function]
-    cls.add_method('GetMilliSeconds', 
-                   'int64_t', 
-                   [], 
-                   is_const=True)
-    ## nstime.h (module 'core'): int64_t ns3::Time::GetNanoSeconds() const [member function]
-    cls.add_method('GetNanoSeconds', 
-                   'int64_t', 
-                   [], 
-                   is_const=True)
-    ## nstime.h (module 'core'): int64_t ns3::Time::GetPicoSeconds() const [member function]
-    cls.add_method('GetPicoSeconds', 
-                   'int64_t', 
-                   [], 
-                   is_const=True)
-    ## nstime.h (module 'core'): static ns3::Time::Unit ns3::Time::GetResolution() [member function]
-    cls.add_method('GetResolution', 
-                   'ns3::Time::Unit', 
-                   [], 
-                   is_static=True)
-    ## nstime.h (module 'core'): double ns3::Time::GetSeconds() const [member function]
-    cls.add_method('GetSeconds', 
-                   'double', 
-                   [], 
-                   is_const=True)
-    ## nstime.h (module 'core'): int64_t ns3::Time::GetTimeStep() const [member function]
-    cls.add_method('GetTimeStep', 
-                   'int64_t', 
-                   [], 
-                   is_const=True)
-    ## nstime.h (module 'core'): bool ns3::Time::IsNegative() const [member function]
-    cls.add_method('IsNegative', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## nstime.h (module 'core'): bool ns3::Time::IsPositive() const [member function]
-    cls.add_method('IsPositive', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## nstime.h (module 'core'): bool ns3::Time::IsStrictlyNegative() const [member function]
-    cls.add_method('IsStrictlyNegative', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## nstime.h (module 'core'): bool ns3::Time::IsStrictlyPositive() const [member function]
-    cls.add_method('IsStrictlyPositive', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## nstime.h (module 'core'): bool ns3::Time::IsZero() const [member function]
-    cls.add_method('IsZero', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## nstime.h (module 'core'): static ns3::Time ns3::Time::Max() [member function]
-    cls.add_method('Max', 
-                   'ns3::Time', 
-                   [], 
-                   is_static=True)
-    ## nstime.h (module 'core'): static ns3::Time ns3::Time::Min() [member function]
-    cls.add_method('Min', 
-                   'ns3::Time', 
-                   [], 
-                   is_static=True)
-    ## nstime.h (module 'core'): static void ns3::Time::SetResolution(ns3::Time::Unit resolution) [member function]
-    cls.add_method('SetResolution', 
-                   'void', 
-                   [param('ns3::Time::Unit', 'resolution')], 
-                   is_static=True)
-    ## nstime.h (module 'core'): static bool ns3::Time::StaticInit() [member function]
-    cls.add_method('StaticInit', 
-                   'bool', 
-                   [], 
-                   is_static=True)
-    ## nstime.h (module 'core'): ns3::int64x64_t ns3::Time::To(ns3::Time::Unit timeUnit) const [member function]
-    cls.add_method('To', 
-                   'ns3::int64x64_t', 
-                   [param('ns3::Time::Unit', 'timeUnit')], 
-                   is_const=True)
-    ## nstime.h (module 'core'): double ns3::Time::ToDouble(ns3::Time::Unit timeUnit) const [member function]
-    cls.add_method('ToDouble', 
-                   'double', 
-                   [param('ns3::Time::Unit', 'timeUnit')], 
-                   is_const=True)
-    ## nstime.h (module 'core'): int64_t ns3::Time::ToInteger(ns3::Time::Unit timeUnit) const [member function]
-    cls.add_method('ToInteger', 
-                   'int64_t', 
-                   [param('ns3::Time::Unit', 'timeUnit')], 
-                   is_const=True)
-    return
-
 def register_Ns3TraceSourceAccessor_methods(root_module, cls):
     ## trace-source-accessor.h (module 'core'): ns3::TraceSourceAccessor::TraceSourceAccessor(ns3::TraceSourceAccessor const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::TraceSourceAccessor const &', 'arg0')])
@@ -4199,87 +3362,6 @@
                    is_const=True, visibility='private', is_virtual=True)
     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')])
-    ## event-impl.h (module 'core'): ns3::EventImpl::EventImpl() [constructor]
-    cls.add_constructor([])
-    ## event-impl.h (module 'core'): void ns3::EventImpl::Cancel() [member function]
-    cls.add_method('Cancel', 
-                   'void', 
-                   [])
-    ## event-impl.h (module 'core'): void ns3::EventImpl::Invoke() [member function]
-    cls.add_method('Invoke', 
-                   'void', 
-                   [])
-    ## event-impl.h (module 'core'): bool ns3::EventImpl::IsCancelled() [member function]
-    cls.add_method('IsCancelled', 
-                   'bool', 
-                   [])
-    ## event-impl.h (module 'core'): void ns3::EventImpl::Notify() [member function]
-    cls.add_method('Notify', 
-                   'void', 
-                   [], 
-                   is_pure_virtual=True, visibility='protected', is_virtual=True)
-    return
-
-def register_Ns3IpL4Protocol_methods(root_module, cls):
-    ## ip-l4-protocol.h (module 'internet'): ns3::IpL4Protocol::IpL4Protocol() [constructor]
-    cls.add_constructor([])
-    ## ip-l4-protocol.h (module 'internet'): ns3::IpL4Protocol::IpL4Protocol(ns3::IpL4Protocol const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::IpL4Protocol const &', 'arg0')])
-    ## ip-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::IpL4Protocol::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 >', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## ip-l4-protocol.h (module 'internet'): 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> ns3::IpL4Protocol::GetDownTarget6() const [member function]
-    cls.add_method('GetDownTarget6', 
-                   '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 >', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## ip-l4-protocol.h (module 'internet'): int ns3::IpL4Protocol::GetProtocolNumber() const [member function]
-    cls.add_method('GetProtocolNumber', 
-                   'int', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## ip-l4-protocol.h (module 'internet'): static ns3::TypeId ns3::IpL4Protocol::GetTypeId() [member function]
-    cls.add_method('GetTypeId', 
-                   'ns3::TypeId', 
-                   [], 
-                   is_static=True)
-    ## ip-l4-protocol.h (module 'internet'): ns3::IpL4Protocol::RxStatus ns3::IpL4Protocol::Receive(ns3::Ptr<ns3::Packet> p, ns3::Ipv4Header const & header, 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')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## ip-l4-protocol.h (module 'internet'): ns3::IpL4Protocol::RxStatus ns3::IpL4Protocol::Receive(ns3::Ptr<ns3::Packet> p, ns3::Ipv6Header const & header, 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')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## ip-l4-protocol.h (module 'internet'): void ns3::IpL4Protocol::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', 
-                   'void', 
-                   [param('ns3::Ipv4Address', 'icmpSource'), param('uint8_t', 'icmpTtl'), param('uint8_t', 'icmpType'), param('uint8_t', 'icmpCode'), param('uint32_t', 'icmpInfo'), param('ns3::Ipv4Address', 'payloadSource'), param('ns3::Ipv4Address', 'payloadDestination'), param('uint8_t const *', 'payload')], 
-                   is_virtual=True)
-    ## ip-l4-protocol.h (module 'internet'): void ns3::IpL4Protocol::ReceiveIcmp(ns3::Ipv6Address icmpSource, uint8_t icmpTtl, uint8_t icmpType, uint8_t icmpCode, uint32_t icmpInfo, ns3::Ipv6Address payloadSource, ns3::Ipv6Address payloadDestination, uint8_t const * payload) [member function]
-    cls.add_method('ReceiveIcmp', 
-                   'void', 
-                   [param('ns3::Ipv6Address', 'icmpSource'), param('uint8_t', 'icmpTtl'), param('uint8_t', 'icmpType'), param('uint8_t', 'icmpCode'), param('uint32_t', 'icmpInfo'), param('ns3::Ipv6Address', 'payloadSource'), param('ns3::Ipv6Address', 'payloadDestination'), param('uint8_t const *', 'payload')], 
-                   is_virtual=True)
-    ## ip-l4-protocol.h (module 'internet'): void ns3::IpL4Protocol::SetDownTarget(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> cb) [member function]
-    cls.add_method('SetDownTarget', 
-                   'void', 
-                   [param('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 >', 'cb')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## ip-l4-protocol.h (module 'internet'): void ns3::IpL4Protocol::SetDownTarget6(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) [member function]
-    cls.add_method('SetDownTarget6', 
-                   '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_pure_virtual=True, is_virtual=True)
-    return
-
 def register_Ns3Ipv4_methods(root_module, cls):
     ## ipv4.h (module 'internet'): ns3::Ipv4::Ipv4(ns3::Ipv4 const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::Ipv4 const &', 'arg0')])
@@ -4565,10 +3647,10 @@
     cls.add_method('Send', 
                    'void', 
                    [param('ns3::Ptr< ns3::Packet >', 'p'), param('ns3::Ipv4Address', 'dest')])
-    ## ipv4-interface.h (module 'internet'): void ns3::Ipv4Interface::SetArpCache(ns3::Ptr<ns3::ArpCache> arg0) [member function]
+    ## ipv4-interface.h (module 'internet'): void ns3::Ipv4Interface::SetArpCache(ns3::Ptr<ns3::ArpCache> arpCache) [member function]
     cls.add_method('SetArpCache', 
                    'void', 
-                   [param('ns3::Ptr< ns3::ArpCache >', 'arg0')])
+                   [param('ns3::Ptr< ns3::ArpCache >', 'arpCache')])
     ## ipv4-interface.h (module 'internet'): void ns3::Ipv4Interface::SetDevice(ns3::Ptr<ns3::NetDevice> device) [member function]
     cls.add_method('SetDevice', 
                    'void', 
@@ -4835,151 +3917,6 @@
                    [param('ns3::Ipv6Address const &', 'value')])
     return
 
-def register_Ns3Ipv6Interface_methods(root_module, cls):
-    ## ipv6-interface.h (module 'internet'): ns3::Ipv6Interface::Ipv6Interface(ns3::Ipv6Interface const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::Ipv6Interface const &', 'arg0')])
-    ## ipv6-interface.h (module 'internet'): ns3::Ipv6Interface::Ipv6Interface() [constructor]
-    cls.add_constructor([])
-    ## ipv6-interface.h (module 'internet'): bool ns3::Ipv6Interface::AddAddress(ns3::Ipv6InterfaceAddress iface) [member function]
-    cls.add_method('AddAddress', 
-                   'bool', 
-                   [param('ns3::Ipv6InterfaceAddress', 'iface')])
-    ## ipv6-interface.h (module 'internet'): ns3::Ipv6InterfaceAddress ns3::Ipv6Interface::GetAddress(uint32_t index) const [member function]
-    cls.add_method('GetAddress', 
-                   'ns3::Ipv6InterfaceAddress', 
-                   [param('uint32_t', 'index')], 
-                   is_const=True)
-    ## ipv6-interface.h (module 'internet'): ns3::Ipv6InterfaceAddress ns3::Ipv6Interface::GetAddressMatchingDestination(ns3::Ipv6Address dst) [member function]
-    cls.add_method('GetAddressMatchingDestination', 
-                   'ns3::Ipv6InterfaceAddress', 
-                   [param('ns3::Ipv6Address', 'dst')])
-    ## ipv6-interface.h (module 'internet'): uint16_t ns3::Ipv6Interface::GetBaseReachableTime() const [member function]
-    cls.add_method('GetBaseReachableTime', 
-                   'uint16_t', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface.h (module 'internet'): uint8_t ns3::Ipv6Interface::GetCurHopLimit() const [member function]
-    cls.add_method('GetCurHopLimit', 
-                   'uint8_t', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface.h (module 'internet'): ns3::Ptr<ns3::NetDevice> ns3::Ipv6Interface::GetDevice() const [member function]
-    cls.add_method('GetDevice', 
-                   'ns3::Ptr< ns3::NetDevice >', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## ipv6-interface.h (module 'internet'): ns3::Ipv6InterfaceAddress ns3::Ipv6Interface::GetLinkLocalAddress() const [member function]
-    cls.add_method('GetLinkLocalAddress', 
-                   'ns3::Ipv6InterfaceAddress', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface.h (module 'internet'): uint16_t ns3::Ipv6Interface::GetMetric() const [member function]
-    cls.add_method('GetMetric', 
-                   'uint16_t', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface.h (module 'internet'): uint32_t ns3::Ipv6Interface::GetNAddresses() const [member function]
-    cls.add_method('GetNAddresses', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface.h (module 'internet'): uint16_t ns3::Ipv6Interface::GetReachableTime() const [member function]
-    cls.add_method('GetReachableTime', 
-                   'uint16_t', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface.h (module 'internet'): uint16_t ns3::Ipv6Interface::GetRetransTimer() const [member function]
-    cls.add_method('GetRetransTimer', 
-                   'uint16_t', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface.h (module 'internet'): static ns3::TypeId ns3::Ipv6Interface::GetTypeId() [member function]
-    cls.add_method('GetTypeId', 
-                   'ns3::TypeId', 
-                   [], 
-                   is_static=True)
-    ## ipv6-interface.h (module 'internet'): bool ns3::Ipv6Interface::IsDown() const [member function]
-    cls.add_method('IsDown', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface.h (module 'internet'): bool ns3::Ipv6Interface::IsForwarding() const [member function]
-    cls.add_method('IsForwarding', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface.h (module 'internet'): bool ns3::Ipv6Interface::IsUp() const [member function]
-    cls.add_method('IsUp', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface.h (module 'internet'): ns3::Ipv6InterfaceAddress ns3::Ipv6Interface::RemoveAddress(uint32_t index) [member function]
-    cls.add_method('RemoveAddress', 
-                   'ns3::Ipv6InterfaceAddress', 
-                   [param('uint32_t', 'index')])
-    ## ipv6-interface.h (module 'internet'): ns3::Ipv6InterfaceAddress ns3::Ipv6Interface::RemoveAddress(ns3::Ipv6Address address) [member function]
-    cls.add_method('RemoveAddress', 
-                   'ns3::Ipv6InterfaceAddress', 
-                   [param('ns3::Ipv6Address', 'address')])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::Send(ns3::Ptr<ns3::Packet> p, ns3::Ipv6Address dest) [member function]
-    cls.add_method('Send', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::Packet >', 'p'), param('ns3::Ipv6Address', 'dest')])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetBaseReachableTime(uint16_t baseReachableTime) [member function]
-    cls.add_method('SetBaseReachableTime', 
-                   'void', 
-                   [param('uint16_t', 'baseReachableTime')])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetCurHopLimit(uint8_t curHopLimit) [member function]
-    cls.add_method('SetCurHopLimit', 
-                   'void', 
-                   [param('uint8_t', 'curHopLimit')])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetDevice(ns3::Ptr<ns3::NetDevice> device) [member function]
-    cls.add_method('SetDevice', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::NetDevice >', 'device')])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetDown() [member function]
-    cls.add_method('SetDown', 
-                   'void', 
-                   [])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetForwarding(bool forward) [member function]
-    cls.add_method('SetForwarding', 
-                   'void', 
-                   [param('bool', 'forward')])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetMetric(uint16_t metric) [member function]
-    cls.add_method('SetMetric', 
-                   'void', 
-                   [param('uint16_t', 'metric')])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetNode(ns3::Ptr<ns3::Node> node) [member function]
-    cls.add_method('SetNode', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::Node >', 'node')])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetNsDadUid(ns3::Ipv6Address address, uint32_t uid) [member function]
-    cls.add_method('SetNsDadUid', 
-                   'void', 
-                   [param('ns3::Ipv6Address', 'address'), param('uint32_t', 'uid')])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetReachableTime(uint16_t reachableTime) [member function]
-    cls.add_method('SetReachableTime', 
-                   'void', 
-                   [param('uint16_t', 'reachableTime')])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetRetransTimer(uint16_t retransTimer) [member function]
-    cls.add_method('SetRetransTimer', 
-                   'void', 
-                   [param('uint16_t', 'retransTimer')])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetState(ns3::Ipv6Address address, ns3::Ipv6InterfaceAddress::State_e state) [member function]
-    cls.add_method('SetState', 
-                   'void', 
-                   [param('ns3::Ipv6Address', 'address'), param('ns3::Ipv6InterfaceAddress::State_e', 'state')])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetUp() [member function]
-    cls.add_method('SetUp', 
-                   'void', 
-                   [])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::DoDispose() [member function]
-    cls.add_method('DoDispose', 
-                   'void', 
-                   [], 
-                   visibility='protected', is_virtual=True)
-    return
-
 def register_Ns3Ipv6PrefixChecker_methods(root_module, cls):
     ## ipv6-address.h (module 'network'): ns3::Ipv6PrefixChecker::Ipv6PrefixChecker() [constructor]
     cls.add_constructor([])
@@ -5196,46 +4133,6 @@
                    is_const=True)
     return
 
-def register_Ns3ObjectFactoryChecker_methods(root_module, cls):
-    ## object-factory.h (module 'core'): ns3::ObjectFactoryChecker::ObjectFactoryChecker() [constructor]
-    cls.add_constructor([])
-    ## object-factory.h (module 'core'): ns3::ObjectFactoryChecker::ObjectFactoryChecker(ns3::ObjectFactoryChecker const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::ObjectFactoryChecker const &', 'arg0')])
-    return
-
-def register_Ns3ObjectFactoryValue_methods(root_module, cls):
-    ## object-factory.h (module 'core'): ns3::ObjectFactoryValue::ObjectFactoryValue() [constructor]
-    cls.add_constructor([])
-    ## object-factory.h (module 'core'): ns3::ObjectFactoryValue::ObjectFactoryValue(ns3::ObjectFactoryValue const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::ObjectFactoryValue const &', 'arg0')])
-    ## object-factory.h (module 'core'): ns3::ObjectFactoryValue::ObjectFactoryValue(ns3::ObjectFactory const & value) [constructor]
-    cls.add_constructor([param('ns3::ObjectFactory const &', 'value')])
-    ## object-factory.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::ObjectFactoryValue::Copy() const [member function]
-    cls.add_method('Copy', 
-                   'ns3::Ptr< ns3::AttributeValue >', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## object-factory.h (module 'core'): bool ns3::ObjectFactoryValue::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)
-    ## object-factory.h (module 'core'): ns3::ObjectFactory ns3::ObjectFactoryValue::Get() const [member function]
-    cls.add_method('Get', 
-                   'ns3::ObjectFactory', 
-                   [], 
-                   is_const=True)
-    ## object-factory.h (module 'core'): std::string ns3::ObjectFactoryValue::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)
-    ## object-factory.h (module 'core'): void ns3::ObjectFactoryValue::Set(ns3::ObjectFactory const & value) [member function]
-    cls.add_method('Set', 
-                   'void', 
-                   [param('ns3::ObjectFactory const &', 'value')])
-    return
-
 def register_Ns3OutputStreamWrapper_methods(root_module, cls):
     ## output-stream-wrapper.h (module 'network'): ns3::OutputStreamWrapper::OutputStreamWrapper(ns3::OutputStreamWrapper const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::OutputStreamWrapper const &', 'arg0')])
@@ -5434,39 +4331,6 @@
                    [param('ns3::Ptr< ns3::NixVector >', 'arg0')])
     return
 
-def register_Ns3TimeValue_methods(root_module, cls):
-    ## nstime.h (module 'core'): ns3::TimeValue::TimeValue() [constructor]
-    cls.add_constructor([])
-    ## nstime.h (module 'core'): ns3::TimeValue::TimeValue(ns3::TimeValue const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::TimeValue const &', 'arg0')])
-    ## nstime.h (module 'core'): ns3::TimeValue::TimeValue(ns3::Time const & value) [constructor]
-    cls.add_constructor([param('ns3::Time const &', 'value')])
-    ## nstime.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::TimeValue::Copy() const [member function]
-    cls.add_method('Copy', 
-                   'ns3::Ptr< ns3::AttributeValue >', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## nstime.h (module 'core'): bool ns3::TimeValue::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)
-    ## nstime.h (module 'core'): ns3::Time ns3::TimeValue::Get() const [member function]
-    cls.add_method('Get', 
-                   'ns3::Time', 
-                   [], 
-                   is_const=True)
-    ## nstime.h (module 'core'): std::string ns3::TimeValue::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)
-    ## nstime.h (module 'core'): void ns3::TimeValue::Set(ns3::Time const & value) [member function]
-    cls.add_method('Set', 
-                   'void', 
-                   [param('ns3::Time const &', 'value')])
-    return
-
 def register_Ns3TypeIdChecker_methods(root_module, cls):
     ## type-id.h (module 'core'): ns3::TypeIdChecker::TypeIdChecker() [constructor]
     cls.add_constructor([])
diff -Naur ns-3.19/src/click/model/ipv4-click-routing.cc ns-3.20/src/click/model/ipv4-click-routing.cc
--- ns-3.19/src/click/model/ipv4-click-routing.cc	2014-06-17 10:34:00.543635851 -0700
+++ ns-3.20/src/click/model/ipv4-click-routing.cc	2014-06-17 10:33:13.871996131 -0700
@@ -45,8 +45,7 @@
 #define INTERFACE_ID_FIRST 1
 #define INTERFACE_ID_FIRST_DROP 33
 
-NS_OBJECT_ENSURE_REGISTERED (Ipv4ClickRouting)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (Ipv4ClickRouting);
 
 std::map < simclick_node_t *, Ptr<Ipv4ClickRouting> > Ipv4ClickRouting::m_clickInstanceFromSimNode;
 
diff -Naur ns-3.19/src/click/model/ipv4-click-routing.h ns-3.20/src/click/model/ipv4-click-routing.h
--- ns-3.19/src/click/model/ipv4-click-routing.h	2014-06-17 10:34:00.544635843 -0700
+++ ns-3.20/src/click/model/ipv4-click-routing.h	2014-06-17 10:33:13.872996124 -0700
@@ -37,6 +37,10 @@
 #include <map>
 #include <string>
 
+class ClickTrivialTest;
+class ClickIfidFromNameTest;
+class ClickIpMacAddressFromNameTest;
+
 namespace ns3 {
 
 /**
@@ -56,9 +60,9 @@
 #ifdef NS3_CLICK
 public:
   // Allow test cases to access private members
-  friend class ClickTrivialTest;
-  friend class ClickIfidFromNameTest;
-  friend class ClickIpMacAddressFromNameTest;
+  friend class ::ClickTrivialTest;
+  friend class ::ClickIfidFromNameTest;
+  friend class ::ClickIpMacAddressFromNameTest;
 
   static TypeId GetTypeId (void);
 
diff -Naur ns-3.19/src/click/model/ipv4-l3-click-protocol.cc ns-3.20/src/click/model/ipv4-l3-click-protocol.cc
--- ns-3.19/src/click/model/ipv4-l3-click-protocol.cc	2014-06-17 10:34:00.544635843 -0700
+++ ns-3.20/src/click/model/ipv4-l3-click-protocol.cc	2014-06-17 10:33:13.873996116 -0700
@@ -44,8 +44,7 @@
 const uint16_t Ipv4L3ClickProtocol::PROT_NUMBER = 0x0800;
 
 
-NS_OBJECT_ENSURE_REGISTERED (Ipv4L3ClickProtocol)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (Ipv4L3ClickProtocol);
 
 TypeId
 Ipv4L3ClickProtocol::GetTypeId (void)
diff -Naur ns-3.19/src/click/test/ipv4-click-routing-test.cc ns-3.20/src/click/test/ipv4-click-routing-test.cc
--- ns-3.19/src/click/test/ipv4-click-routing-test.cc	2014-06-17 10:34:00.546635828 -0700
+++ ns-3.20/src/click/test/ipv4-click-routing-test.cc	2014-06-17 10:33:13.874996108 -0700
@@ -30,7 +30,7 @@
 
 #include <click/simclick.h>
 
-namespace ns3 {
+using namespace ns3;
 
 static void
 AddClickInternetStack (Ptr<Node> node)
@@ -203,6 +203,4 @@
   }
 } g_ipv4ClickRoutingTestSuite;
 
-} // namespace ns3
-
 #endif // NS3_CLICK
diff -Naur ns-3.19/src/click/waf ns-3.20/src/click/waf
--- ns-3.19/src/click/waf	2014-06-17 10:34:00.546635828 -0700
+++ ns-3.20/src/click/waf	1969-12-31 16:00:00.000000000 -0800
@@ -1 +0,0 @@
-exec "`dirname "$0"`"/../../../waf "$@"
diff -Naur ns-3.19/src/config-store/bindings/modulegen__gcc_ILP32.py ns-3.20/src/config-store/bindings/modulegen__gcc_ILP32.py
--- ns-3.19/src/config-store/bindings/modulegen__gcc_ILP32.py	2014-06-17 10:34:00.548635812 -0700
+++ ns-3.20/src/config-store/bindings/modulegen__gcc_ILP32.py	2014-06-17 10:33:13.876996093 -0700
@@ -102,12 +102,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
     
diff -Naur ns-3.19/src/config-store/bindings/modulegen__gcc_LP64.py ns-3.20/src/config-store/bindings/modulegen__gcc_LP64.py
--- ns-3.19/src/config-store/bindings/modulegen__gcc_LP64.py	2014-06-17 10:34:00.549635804 -0700
+++ ns-3.20/src/config-store/bindings/modulegen__gcc_LP64.py	2014-06-17 10:33:13.877996085 -0700
@@ -102,12 +102,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
     
diff -Naur ns-3.19/src/config-store/examples/config-store-save.cc ns-3.20/src/config-store/examples/config-store-save.cc
--- ns-3.19/src/config-store/examples/config-store-save.cc	2014-06-17 10:34:00.550635797 -0700
+++ ns-3.20/src/config-store/examples/config-store-save.cc	2014-06-17 10:33:13.878996077 -0700
@@ -22,8 +22,7 @@
   int16_t m_int16;
 };
 
-NS_OBJECT_ENSURE_REGISTERED (ConfigExample)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (ConfigExample);
 
 // Assign a new default value to A::TestInt16 (-5)
 // Configure a TestInt16 value for a special instance of A (to -3)
diff -Naur ns-3.19/src/config-store/model/config-store.cc ns-3.20/src/config-store/model/config-store.cc
--- ns-3.19/src/config-store/model/config-store.cc	2014-06-17 10:34:00.552635781 -0700
+++ ns-3.20/src/config-store/model/config-store.cc	2014-06-17 10:33:13.880996062 -0700
@@ -23,8 +23,7 @@
 namespace ns3 {
 
 
-NS_OBJECT_ENSURE_REGISTERED (ConfigStore)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (ConfigStore);
 
 TypeId 
 ConfigStore::GetTypeId (void)
diff -Naur ns-3.19/src/config-store/model/gtk-config-store.cc ns-3.20/src/config-store/model/gtk-config-store.cc
--- ns-3.19/src/config-store/model/gtk-config-store.cc	2014-06-17 10:34:00.554635766 -0700
+++ ns-3.20/src/config-store/model/gtk-config-store.cc	2014-06-17 10:33:13.882996046 -0700
@@ -26,8 +26,7 @@
 
 namespace ns3 {
 
-NS_LOG_COMPONENT_DEFINE ("GtkconfigStore")
-  ;
+NS_LOG_COMPONENT_DEFINE ("GtkconfigStore");
 
 
 GtkConfigStore::GtkConfigStore ()
diff -Naur ns-3.19/src/core/bindings/core.py ns-3.20/src/core/bindings/core.py
--- ns-3.19/src/core/bindings/core.py	2014-06-17 10:34:00.558635735 -0700
+++ ns-3.20/src/core/bindings/core.py	2014-06-17 10:33:13.886996016 -0700
@@ -1,10 +1,10 @@
-
+from __future__ import absolute_import
 # "from _core import *" doesn't work here because symbols starting
 # with underscore would not be imported.  But they are needed because
 # other modules depend on them...
-import _core
+from . import _core
 g = globals()
-for k,v in _core.__dict__.iteritems():
+for k,v in _core.__dict__.items():
     g[k] = v
 del g, k, v, _core
 
diff -Naur ns-3.19/src/core/bindings/modulegen_customizations.py ns-3.20/src/core/bindings/modulegen_customizations.py
--- ns-3.19/src/core/bindings/modulegen_customizations.py	2014-06-17 10:34:00.567635665 -0700
+++ ns-3.20/src/core/bindings/modulegen_customizations.py	2014-06-17 10:33:13.895995946 -0700
@@ -13,77 +13,6 @@
 from pybindgen.typehandlers.base import CodeGenerationError
 
 
-# class SmartPointerTransformation(typehandlers.TypeTransformation):
-#     """
-#     This class provides a "type transformation" that tends to support
-#     NS-3 smart pointers.  Parameters such as "Ptr<Foo> foo" are
-#     transformed into something like Parameter.new("Foo*", "foo",
-#     transfer_ownership=False).  Return values such as Ptr<Foo> are
-#     transformed into ReturnValue.new("Foo*",
-#     caller_owns_return=False).  Since the underlying objects have
-#     reference counting, PyBindGen does the right thing.
-#     """
-#     def __init__(self):
-#         super(SmartPointerTransformation, self).__init__()
-#         self.rx = re.compile(r'(ns3::|::ns3::|)Ptr<([^>]+)>\s*$')
-
-#     def _get_untransformed_type_traits(self, name):
-#         m = self.rx.match(name)
-#         is_const = False
-#         if m is None:
-#             return None, False
-#         else:
-#             name1 = m.group(2).strip()
-#             if name1.startswith('const '):
-#                 name1 = name1[len('const '):]
-#                 is_const = True
-#             if name1.endswith(' const'):
-#                 name1 = name1[:-len(' const')]
-#                 is_const = True
-#             new_name = name1+' *'
-
-#             if new_name.startswith('::'):
-#                 new_name = new_name[2:]
-#             return new_name, is_const
-
-#     def get_untransformed_name(self, name):
-#         new_name, dummy_is_const = self._get_untransformed_type_traits(name)
-#         return new_name
-
-#     def create_type_handler(self, type_handler, *args, **kwargs):
-#         if issubclass(type_handler, Parameter):
-#             kwargs['transfer_ownership'] = False
-#         elif issubclass(type_handler, ReturnValue):
-#             kwargs['caller_owns_return'] = False
-#         else:
-#             raise AssertionError
-
-#         ## fix the ctype, add ns3:: namespace
-#         orig_ctype, is_const = self._get_untransformed_type_traits(args[0])
-#         if is_const:
-#             correct_ctype = 'ns3::Ptr< %s const >' % orig_ctype[:-2]
-#         else:
-#             correct_ctype = 'ns3::Ptr< %s >' % orig_ctype[:-2]
-#         args = tuple([correct_ctype] + list(args[1:]))
-
-#         handler = type_handler(*args, **kwargs)
-#         handler.set_tranformation(self, orig_ctype)
-#         return handler
-
-#     def untransform(self, type_handler, declarations, code_block, expression):
-#         return 'const_cast<%s> (ns3::PeekPointer (%s))' % (type_handler.untransformed_ctype, expression)
-
-#     def transform(self, type_handler, declarations, code_block, expression):
-#         assert type_handler.untransformed_ctype[-1] == '*'
-#         return 'ns3::Ptr< %s > (%s)' % (type_handler.untransformed_ctype[:-1], expression)
-
-# ## register the type transformation
-# transf = SmartPointerTransformation()
-# typehandlers.return_type_matcher.register_transformation(transf)
-# typehandlers.param_type_matcher.register_transformation(transf)
-# del transf
-
-
 class ArgvParam(Parameter):
     """
     Converts a python list-of-strings argument to a pair of 'int argc,
@@ -123,11 +52,21 @@
 ''' % vars())
         #wrapper.before_call.write_error_check('item == NULL')
         wrapper.before_call.write_error_check(
-            '!PyString_Check(item)',
+            '\n'
+            '#if PY_VERSION_HEX >= 0x03000000\n'
+            '!PyUnicode_Check(item)\n'
+            '#else\n'
+            '!PyString_Check(item)\n'
+            '#endif\n',
             failure_cleanup=('PyErr_SetString(PyExc_TypeError, '
                              '"argument %s must be a list of strings");') % self.name)
         wrapper.before_call.write_code(
-            '%s[%s] = PyString_AsString(item);' % (name, idx))
+            '#if PY_VERSION_HEX >= 0x03000000\n'
+            '{var}[{idx}] = PyUnicode_AsUTF8(item);\n'
+            '#else\n'
+            '{var}[{idx}] = PyString_AsString(item);\n'
+            '#endif\n'
+            .format(var=name, idx=idx))
         wrapper.before_call.sink.unindent()
         wrapper.before_call.write_code('}')
         wrapper.before_call.write_code('%s = PyList_Size(%s);' % (argc_var, py_name))
@@ -136,165 +75,6 @@
         wrapper.call_params.append(name)
 
 
-# class CallbackImplProxyMethod(typehandlers.ReverseWrapperBase):
-#     """
-#     Class that generates a proxy virtual method that calls a similarly named python method.
-#     """
-
-#     def __init__(self, return_value, parameters):
-#         super(CallbackImplProxyMethod, self).__init__(return_value, parameters)
-
-#     def generate_python_call(self):
-#         """code to call the python method"""
-#         build_params = self.build_params.get_parameters(force_tuple_creation=True)
-#         if build_params[0][0] == '"':
-#             build_params[0] = '(char *) ' + build_params[0]
-#         args = self.before_call.declare_variable('PyObject*', 'args')
-#         self.before_call.write_code('%s = Py_BuildValue(%s);'
-#                                     % (args, ', '.join(build_params)))
-#         self.before_call.add_cleanup_code('Py_DECREF(%s);' % args)
-#         self.before_call.write_code('py_retval = PyObject_CallObject(m_callback, %s);' % args)
-#         self.before_call.write_error_check('py_retval == NULL')
-#         self.before_call.add_cleanup_code('Py_DECREF(py_retval);')
-
-
-
-
-# def generate_callback_classes(out, callbacks):
-#     for callback_impl_num, template_parameters in enumerate(callbacks):
-#         sink = MemoryCodeSink()
-#         cls_name = "ns3::Callback< %s >" % ', '.join(template_parameters)
-#         #print >> sys.stderr, "***** trying to register callback: %r" % cls_name
-#         class_name = "PythonCallbackImpl%i" % callback_impl_num
-#         sink.writeln('''
-# class %s : public ns3::CallbackImpl<%s>
-# {
-# public:
-#     PyObject *m_callback;
-#     %s(PyObject *callback)
-#     {
-#         Py_INCREF(callback);
-#         m_callback = callback;
-#     }
-#     virtual ~%s()
-#     {
-#         Py_DECREF(m_callback);
-#         m_callback = NULL;
-#     }
-
-#     virtual bool IsEqual(ns3::Ptr<const ns3::CallbackImplBase> other_base) const
-#     {
-#         const %s *other = dynamic_cast<const %s*> (ns3::PeekPointer (other_base));
-#         if (other != NULL)
-#             return (other->m_callback == m_callback);
-#         else
-#             return false;
-#     }
-
-# ''' % (class_name, ', '.join(template_parameters), class_name, class_name, class_name, class_name))
-#         sink.indent()
-#         callback_return = template_parameters[0]
-#         return_ctype = ctypeparser.parse_type(callback_return)
-#         if ('const' in return_ctype.remove_modifiers()):
-#             kwargs = {'is_const': True}
-#         else:
-#             kwargs = {}
-#         try:
-#             return_type = ReturnValue.new(str(return_ctype), **kwargs)
-#         except (typehandlers.TypeLookupError, typehandlers.TypeConfigurationError), ex:
-#             warnings.warn("***** Unable to register callback; Return value '%s' error (used in %s): %r"
-#                           % (callback_return, cls_name, ex),
-#                           Warning)
-#             continue
-
-#         arguments = []
-#         ok = True
-#         callback_parameters = [arg for arg in template_parameters[1:] if arg != 'ns3::empty']
-#         for arg_num, arg_type in enumerate(callback_parameters):
-#             arg_name = 'arg%i' % (arg_num+1)
-
-#             param_ctype = ctypeparser.parse_type(arg_type)
-#             if ('const' in param_ctype.remove_modifiers()):
-#                 kwargs = {'is_const': True}
-#             else:
-#                 kwargs = {}
-#             try:
-#                 arguments.append(Parameter.new(str(param_ctype), arg_name, **kwargs))
-#             except (typehandlers.TypeLookupError, typehandlers.TypeConfigurationError), ex:
-#                 warnings.warn("***** Unable to register callback; parameter '%s %s' error (used in %s): %r"
-#                               % (arg_type, arg_name, cls_name, ex),
-#                               Warning)
-#                 ok = False
-#         if not ok:
-#             continue
-
-#         wrapper = CallbackImplProxyMethod(return_type, arguments)
-#         wrapper.generate(sink, 'operator()', decl_modifiers=[])
-            
-#         sink.unindent()
-#         sink.writeln('};\n')
-#         sink.flush_to(out)
-        
-#         class PythonCallbackParameter(Parameter):
-#             "Class handlers"
-#             CTYPES = [cls_name]
-#             #print >> sys.stderr, "***** registering callback handler: %r" % ctypeparser.normalize_type_string(cls_name)
-#             DIRECTIONS = [Parameter.DIRECTION_IN]
-#             PYTHON_CALLBACK_IMPL_NAME = class_name
-#             TEMPLATE_ARGS = template_parameters
-
-#             def convert_python_to_c(self, wrapper):
-#                 "parses python args to get C++ value"
-#                 assert isinstance(wrapper, typehandlers.ForwardWrapperBase)
-
-#                 if self.default_value is None:
-#                     py_callback = wrapper.declarations.declare_variable('PyObject*', self.name)
-#                     wrapper.parse_params.add_parameter('O', ['&'+py_callback], self.name)
-#                     wrapper.before_call.write_error_check(
-#                         '!PyCallable_Check(%s)' % py_callback,
-#                         'PyErr_SetString(PyExc_TypeError, "parameter \'%s\' must be callbale");' % self.name)
-#                     callback_impl = wrapper.declarations.declare_variable(
-#                         'ns3::Ptr<%s>' % self.PYTHON_CALLBACK_IMPL_NAME,
-#                         '%s_cb_impl' % self.name)
-#                     wrapper.before_call.write_code("%s = ns3::Create<%s> (%s);"
-#                                                    % (callback_impl, self.PYTHON_CALLBACK_IMPL_NAME, py_callback))
-#                     wrapper.call_params.append(
-#                         'ns3::Callback<%s> (%s)' % (', '.join(self.TEMPLATE_ARGS), callback_impl))
-#                 else:
-#                     py_callback = wrapper.declarations.declare_variable('PyObject*', self.name, 'NULL')
-#                     wrapper.parse_params.add_parameter('O', ['&'+py_callback], self.name, optional=True)
-#                     value = wrapper.declarations.declare_variable(
-#                         'ns3::Callback<%s>' % ', '.join(self.TEMPLATE_ARGS),
-#                         self.name+'_value',
-#                         self.default_value)
-
-#                     wrapper.before_call.write_code("if (%s) {" % (py_callback,))
-#                     wrapper.before_call.indent()
-
-#                     wrapper.before_call.write_error_check(
-#                         '!PyCallable_Check(%s)' % py_callback,
-#                         'PyErr_SetString(PyExc_TypeError, "parameter \'%s\' must be callbale");' % self.name)
-
-#                     wrapper.before_call.write_code("%s = ns3::Callback<%s> (ns3::Create<%s> (%s));"
-#                                                    % (value, ', '.join(self.TEMPLATE_ARGS),
-#                                                       self.PYTHON_CALLBACK_IMPL_NAME, py_callback))
-
-#                     wrapper.before_call.unindent()
-#                     wrapper.before_call.write_code("}") # closes: if (py_callback) {
-                                        
-#                     wrapper.call_params.append(value)
-                    
-
-#             def convert_c_to_python(self, wrapper):
-#                 raise typehandlers.NotSupportedError("Reverse wrappers for ns3::Callback<...> types "
-#                                                      "(python using callbacks defined in C++) not implemented.")
-
-
-# def write_preamble(out):
-#     pybindgen.write_preamble(out)
-#     out.writeln("#include \"ns3/everything.h\"")
-
-
 
 def Simulator_customizations(module):
     Simulator = module['ns3::Simulator']
@@ -327,76 +107,6 @@
                                           flags=["METH_VARARGS", "METH_KEYWORDS"])
 
 
-# def Object_customizations(module):
-#     ## ---------------------------------------------------------------------
-#     ## Here we generate custom constructor code for all classes that
-#     ## derive from ns3::Object.  The custom constructors are needed in
-#     ## order to support kwargs only and to translate kwargs into ns3
-#     ## attributes, etc.
-#     ## ---------------------------------------------------------------------
-#     Object = module['ns3::Object']
-
-
-#     ## add a GetTypeId method to all generatd helper classes
-#     def helper_class_hook(helper_class):
-#         decl = """
-# static ns3::TypeId GetTypeId (void)
-# {
-#   static ns3::TypeId tid = ns3::TypeId ("%s")
-#     .SetParent< %s > ()
-#     ;
-#   return tid;
-# }"""  % (helper_class.name, helper_class.class_.full_name)
-
-#         helper_class.add_custom_method(decl)
-#         helper_class.add_post_generation_code(
-#             "NS_OBJECT_ENSURE_REGISTERED (%s);" % helper_class.name)
-#     Object.add_helper_class_hook(helper_class_hook)
-
-#     def ns3_object_instance_creation_function(cpp_class, code_block, lvalue,
-#                                               parameters, construct_type_name):
-#         assert lvalue
-#         assert not lvalue.startswith('None')
-#         if cpp_class.cannot_be_constructed:
-#             raise CodeGenerationError("%s cannot be constructed (%s)"
-#                                       % cpp_class.full_name)
-#         if cpp_class.incomplete_type:
-#             raise CodeGenerationError("%s cannot be constructed (incomplete type)"
-#                                       % cpp_class.full_name)
-#         code_block.write_code("%s = new %s(%s);" % (lvalue, construct_type_name, parameters))
-#         code_block.write_code("%s->Ref ();" % (lvalue))
-
-#     def ns3_object_post_instance_creation_function(cpp_class, code_block, lvalue,
-#                                                    parameters, construct_type_name):
-#         code_block.write_code("ns3::CompleteConstruct(%s);" % (lvalue, ))
-
-#     Object.set_instance_creation_function(ns3_object_instance_creation_function)
-#     Object.set_post_instance_creation_function(ns3_object_post_instance_creation_function)
-
-
-# def Attribute_customizations(module):
-#     # Fix up for the "const AttributeValue &v = EmptyAttribute()"
-#     # case, as used extensively by helper classes.
-
-#     # Here's why we need to do this: pybindgen.gccxmlscanner, when
-#     # scanning parameter default values, is only provided with the
-#     # value as a simple C expression string.  (py)gccxml does not
-#     # report the type of the default value.
-
-#     # As a workaround, here we iterate over all parameters of all
-#     # methods of all classes and tell pybindgen what is the type of
-#     # the default value for attributes.
-
-#     for cls in module.classes:
-#         for meth in cls.get_all_methods():
-#             for param in meth.parameters:
-#                 if isinstance(param, cppclass.CppClassRefParameter):
-#                     if param.cpp_class.name == 'AttributeValue' \
-#                             and param.default_value is not None \
-#                             and param.default_value_type is None:
-#                         param.default_value_type = 'ns3::EmptyAttributeValue'
-
-
 def TypeId_customizations(module):
     TypeId = module['ns3::TypeId']
     TypeId.add_custom_method_wrapper("LookupByNameFailSafe", "_wrap_TypeId_LookupByNameFailSafe",
diff -Naur ns-3.19/src/core/bindings/modulegen__gcc_ILP32.py ns-3.20/src/core/bindings/modulegen__gcc_ILP32.py
--- ns-3.19/src/core/bindings/modulegen__gcc_ILP32.py	2014-06-17 10:34:00.563635696 -0700
+++ ns-3.20/src/core/bindings/modulegen__gcc_ILP32.py	2014-06-17 10:33:13.891995977 -0700
@@ -78,6 +78,8 @@
     module.add_class('ObjectDeleter')
     ## object-factory.h (module 'core'): ns3::ObjectFactory [class]
     module.add_class('ObjectFactory')
+    ## log.h (module 'core'): ns3::ParameterLogger [class]
+    module.add_class('ParameterLogger')
     ## random-variable.h (module 'core'): ns3::RandomVariable [class]
     module.add_class('RandomVariable')
     ## random-variable-stream-helper.h (module 'core'): ns3::RandomVariableStreamHelper [class]
@@ -98,6 +100,8 @@
     module.add_class('SystemMutex')
     ## system-wall-clock-ms.h (module 'core'): ns3::SystemWallClockMs [class]
     module.add_class('SystemWallClockMs')
+    ## nstime.h (module 'core'): ns3::TimeWithUnit [class]
+    module.add_class('TimeWithUnit')
     ## timer.h (module 'core'): ns3::Timer [class]
     module.add_class('Timer')
     ## timer.h (module 'core'): ns3::Timer::DestroyPolicy [enumeration]
@@ -134,6 +138,8 @@
     module.add_class('empty')
     ## int64x64-double.h (module 'core'): ns3::int64x64_t [class]
     module.add_class('int64x64_t')
+    ## 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'])
     ## random-variable.h (module 'core'): ns3::ConstantVariable [class]
     module.add_class('ConstantVariable', parent=root_module['ns3::RandomVariable'])
     ## random-variable.h (module 'core'): ns3::DeterministicVariable [class]
@@ -316,35 +322,35 @@
     module.add_class('Vector3DChecker', parent=root_module['ns3::AttributeChecker'])
     ## vector.h (module 'core'): ns3::Vector3DValue [class]
     module.add_class('Vector3DValue', parent=root_module['ns3::AttributeValue'])
-    typehandlers.add_type_alias('ns3::RngSeedManager', 'ns3::SeedManager')
-    typehandlers.add_type_alias('ns3::RngSeedManager*', 'ns3::SeedManager*')
-    typehandlers.add_type_alias('ns3::RngSeedManager&', 'ns3::SeedManager&')
+    typehandlers.add_type_alias(u'ns3::RngSeedManager', u'ns3::SeedManager')
+    typehandlers.add_type_alias(u'ns3::RngSeedManager*', u'ns3::SeedManager*')
+    typehandlers.add_type_alias(u'ns3::RngSeedManager&', u'ns3::SeedManager&')
     module.add_typedef(root_module['ns3::RngSeedManager'], 'SeedManager')
-    typehandlers.add_type_alias('ns3::ObjectPtrContainerValue', 'ns3::ObjectVectorValue')
-    typehandlers.add_type_alias('ns3::ObjectPtrContainerValue*', 'ns3::ObjectVectorValue*')
-    typehandlers.add_type_alias('ns3::ObjectPtrContainerValue&', 'ns3::ObjectVectorValue&')
+    typehandlers.add_type_alias(u'ns3::ObjectPtrContainerValue', u'ns3::ObjectVectorValue')
+    typehandlers.add_type_alias(u'ns3::ObjectPtrContainerValue*', u'ns3::ObjectVectorValue*')
+    typehandlers.add_type_alias(u'ns3::ObjectPtrContainerValue&', u'ns3::ObjectVectorValue&')
     module.add_typedef(root_module['ns3::ObjectPtrContainerValue'], 'ObjectVectorValue')
-    typehandlers.add_type_alias('void ( * ) ( std::ostream & ) *', 'ns3::LogTimePrinter')
-    typehandlers.add_type_alias('void ( * ) ( std::ostream & ) **', 'ns3::LogTimePrinter*')
-    typehandlers.add_type_alias('void ( * ) ( std::ostream & ) *&', 'ns3::LogTimePrinter&')
-    typehandlers.add_type_alias('void ( * ) ( std::ostream & ) *', 'ns3::LogNodePrinter')
-    typehandlers.add_type_alias('void ( * ) ( std::ostream & ) **', 'ns3::LogNodePrinter*')
-    typehandlers.add_type_alias('void ( * ) ( std::ostream & ) *&', 'ns3::LogNodePrinter&')
-    typehandlers.add_type_alias('ns3::Vector3D', 'ns3::Vector')
-    typehandlers.add_type_alias('ns3::Vector3D*', 'ns3::Vector*')
-    typehandlers.add_type_alias('ns3::Vector3D&', 'ns3::Vector&')
+    typehandlers.add_type_alias(u'void ( * ) ( std::ostream & ) *', u'ns3::LogTimePrinter')
+    typehandlers.add_type_alias(u'void ( * ) ( std::ostream & ) **', u'ns3::LogTimePrinter*')
+    typehandlers.add_type_alias(u'void ( * ) ( std::ostream & ) *&', u'ns3::LogTimePrinter&')
+    typehandlers.add_type_alias(u'void ( * ) ( std::ostream & ) *', u'ns3::LogNodePrinter')
+    typehandlers.add_type_alias(u'void ( * ) ( std::ostream & ) **', u'ns3::LogNodePrinter*')
+    typehandlers.add_type_alias(u'void ( * ) ( std::ostream & ) *&', u'ns3::LogNodePrinter&')
+    typehandlers.add_type_alias(u'ns3::Vector3D', u'ns3::Vector')
+    typehandlers.add_type_alias(u'ns3::Vector3D*', u'ns3::Vector*')
+    typehandlers.add_type_alias(u'ns3::Vector3D&', u'ns3::Vector&')
     module.add_typedef(root_module['ns3::Vector3D'], 'Vector')
-    typehandlers.add_type_alias('ns3::Vector3DValue', 'ns3::VectorValue')
-    typehandlers.add_type_alias('ns3::Vector3DValue*', 'ns3::VectorValue*')
-    typehandlers.add_type_alias('ns3::Vector3DValue&', 'ns3::VectorValue&')
+    typehandlers.add_type_alias(u'ns3::Vector3DValue', u'ns3::VectorValue')
+    typehandlers.add_type_alias(u'ns3::Vector3DValue*', u'ns3::VectorValue*')
+    typehandlers.add_type_alias(u'ns3::Vector3DValue&', u'ns3::VectorValue&')
     module.add_typedef(root_module['ns3::Vector3DValue'], 'VectorValue')
-    typehandlers.add_type_alias('ns3::ObjectPtrContainerValue', 'ns3::ObjectMapValue')
-    typehandlers.add_type_alias('ns3::ObjectPtrContainerValue*', 'ns3::ObjectMapValue*')
-    typehandlers.add_type_alias('ns3::ObjectPtrContainerValue&', 'ns3::ObjectMapValue&')
+    typehandlers.add_type_alias(u'ns3::ObjectPtrContainerValue', u'ns3::ObjectMapValue')
+    typehandlers.add_type_alias(u'ns3::ObjectPtrContainerValue*', u'ns3::ObjectMapValue*')
+    typehandlers.add_type_alias(u'ns3::ObjectPtrContainerValue&', u'ns3::ObjectMapValue&')
     module.add_typedef(root_module['ns3::ObjectPtrContainerValue'], 'ObjectMapValue')
-    typehandlers.add_type_alias('ns3::Vector3DChecker', 'ns3::VectorChecker')
-    typehandlers.add_type_alias('ns3::Vector3DChecker*', 'ns3::VectorChecker*')
-    typehandlers.add_type_alias('ns3::Vector3DChecker&', 'ns3::VectorChecker&')
+    typehandlers.add_type_alias(u'ns3::Vector3DChecker', u'ns3::VectorChecker')
+    typehandlers.add_type_alias(u'ns3::Vector3DChecker*', u'ns3::VectorChecker*')
+    typehandlers.add_type_alias(u'ns3::Vector3DChecker&', u'ns3::VectorChecker&')
     module.add_typedef(root_module['ns3::Vector3DChecker'], 'VectorChecker')
     
     ## Register a nested module for the namespace CommandLineHelper
@@ -392,8 +398,8 @@
     
     ## config.h (module 'core'): ns3::Config::MatchContainer [class]
     module.add_class('MatchContainer')
-    module.add_container('std::vector< ns3::Ptr< ns3::Object > >', 'ns3::Ptr< ns3::Object >', container_type='vector')
-    module.add_container('std::vector< std::string >', 'std::string', container_type='vector')
+    module.add_container('std::vector< ns3::Ptr< ns3::Object > >', 'ns3::Ptr< ns3::Object >', container_type=u'vector')
+    module.add_container('std::vector< std::string >', 'std::string', container_type=u'vector')
 
 def register_types_ns3_FatalImpl(module):
     root_module = module.get_root()
@@ -404,12 +410,12 @@
     
     ## hash-function.h (module 'core'): ns3::Hash::Implementation [class]
     module.add_class('Implementation', 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
     
@@ -432,7 +438,7 @@
 def register_types_ns3_SystemPath(module):
     root_module = module.get_root()
     
-    module.add_container('std::list< std::string >', 'std::string', container_type='list')
+    module.add_container('std::list< std::string >', 'std::string', container_type=u'list')
 
 def register_types_ns3_internal(module):
     root_module = module.get_root()
@@ -460,6 +466,7 @@
     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_Ns3ParameterLogger_methods(root_module, root_module['ns3::ParameterLogger'])
     register_Ns3RandomVariable_methods(root_module, root_module['ns3::RandomVariable'])
     register_Ns3RandomVariableStreamHelper_methods(root_module, root_module['ns3::RandomVariableStreamHelper'])
     register_Ns3RngSeedManager_methods(root_module, root_module['ns3::RngSeedManager'])
@@ -470,6 +477,7 @@
     register_Ns3SystemCondition_methods(root_module, root_module['ns3::SystemCondition'])
     register_Ns3SystemMutex_methods(root_module, root_module['ns3::SystemMutex'])
     register_Ns3SystemWallClockMs_methods(root_module, root_module['ns3::SystemWallClockMs'])
+    register_Ns3TimeWithUnit_methods(root_module, root_module['ns3::TimeWithUnit'])
     register_Ns3Timer_methods(root_module, root_module['ns3::Timer'])
     register_Ns3TimerImpl_methods(root_module, root_module['ns3::TimerImpl'])
     register_Ns3TriangularVariable_methods(root_module, root_module['ns3::TriangularVariable'])
@@ -641,6 +649,7 @@
     return
 
 def register_Ns3CommandLine_methods(root_module, cls):
+    cls.add_output_stream_operator()
     ## command-line.h (module 'core'): ns3::CommandLine::CommandLine() [constructor]
     cls.add_constructor([])
     ## command-line.h (module 'core'): ns3::CommandLine::CommandLine(ns3::CommandLine const & cmd) [copy constructor]
@@ -878,29 +887,25 @@
 def register_Ns3LogComponent_methods(root_module, cls):
     ## log.h (module 'core'): ns3::LogComponent::LogComponent(ns3::LogComponent const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::LogComponent const &', 'arg0')])
-    ## log.h (module 'core'): ns3::LogComponent::LogComponent(std::string const & name) [constructor]
-    cls.add_constructor([param('std::string const &', 'name')])
-    ## log.h (module 'core'): void ns3::LogComponent::Disable(ns3::LogLevel level) [member function]
+    ## log.h (module 'core'): ns3::LogComponent::LogComponent(std::string const & name, ns3::LogLevel const mask=::ns3::LOG_NONE) [constructor]
+    cls.add_constructor([param('std::string const &', 'name'), param('ns3::LogLevel const', 'mask', default_value='::ns3::LOG_NONE')])
+    ## log.h (module 'core'): void ns3::LogComponent::Disable(ns3::LogLevel const level) [member function]
     cls.add_method('Disable', 
                    'void', 
-                   [param('ns3::LogLevel', 'level')])
-    ## log.h (module 'core'): void ns3::LogComponent::Enable(ns3::LogLevel level) [member function]
+                   [param('ns3::LogLevel const', 'level')])
+    ## log.h (module 'core'): void ns3::LogComponent::Enable(ns3::LogLevel const level) [member function]
     cls.add_method('Enable', 
                    'void', 
-                   [param('ns3::LogLevel', 'level')])
-    ## log.h (module 'core'): void ns3::LogComponent::EnvVarCheck(std::string const & name) [member function]
-    cls.add_method('EnvVarCheck', 
-                   'void', 
-                   [param('std::string const &', 'name')])
-    ## log.h (module 'core'): std::string ns3::LogComponent::GetLevelLabel(ns3::LogLevel const level) const [member function]
+                   [param('ns3::LogLevel const', 'level')])
+    ## log.h (module 'core'): static std::string ns3::LogComponent::GetLevelLabel(ns3::LogLevel const level) [member function]
     cls.add_method('GetLevelLabel', 
                    'std::string', 
                    [param('ns3::LogLevel const', 'level')], 
-                   is_const=True)
-    ## log.h (module 'core'): bool ns3::LogComponent::IsEnabled(ns3::LogLevel level) const [member function]
+                   is_static=True)
+    ## log.h (module 'core'): bool ns3::LogComponent::IsEnabled(ns3::LogLevel const level) const [member function]
     cls.add_method('IsEnabled', 
                    'bool', 
-                   [param('ns3::LogLevel', 'level')], 
+                   [param('ns3::LogLevel const', 'level')], 
                    is_const=True)
     ## log.h (module 'core'): bool ns3::LogComponent::IsNoneEnabled() const [member function]
     cls.add_method('IsNoneEnabled', 
@@ -912,6 +917,10 @@
                    'char const *', 
                    [], 
                    is_const=True)
+    ## log.h (module 'core'): void ns3::LogComponent::SetMask(ns3::LogLevel const level) [member function]
+    cls.add_method('SetMask', 
+                   'void', 
+                   [param('ns3::LogLevel const', 'level')])
     return
 
 def register_Ns3Names_methods(root_module, cls):
@@ -1075,6 +1084,13 @@
                    [param('std::string', 'tid')])
     return
 
+def register_Ns3ParameterLogger_methods(root_module, cls):
+    ## log.h (module 'core'): ns3::ParameterLogger::ParameterLogger(ns3::ParameterLogger const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::ParameterLogger const &', 'arg0')])
+    ## log.h (module 'core'): ns3::ParameterLogger::ParameterLogger(std::ostream & os) [constructor]
+    cls.add_constructor([param('std::ostream &', 'os')])
+    return
+
 def register_Ns3RandomVariable_methods(root_module, cls):
     cls.add_output_stream_operator()
     ## random-variable.h (module 'core'): ns3::RandomVariable::RandomVariable() [constructor]
@@ -1325,6 +1341,14 @@
                    [])
     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_Ns3Timer_methods(root_module, cls):
     ## timer.h (module 'core'): ns3::Timer::Timer(ns3::Timer const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::Timer const &', 'arg0')])
@@ -1709,62 +1733,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('==')
@@ -1773,6 +1753,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]
@@ -1813,6 +1795,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_Ns3ConstantVariable_methods(root_module, cls):
@@ -1945,7 +1929,7 @@
     cls.add_method('GetObject', 
                    'ns3::Ptr< ns3::Object >', 
                    [param('ns3::TypeId', 'tid')], 
-                   is_const=True, template_parameters=['ns3::Object'], custom_template_method_name='GetObject')
+                   is_const=True, template_parameters=['ns3::Object'], custom_template_method_name=u'GetObject')
     ## object.h (module 'core'): static ns3::TypeId ns3::Object::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
                    'ns3::TypeId', 
@@ -2501,13 +2485,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('==')
@@ -2534,6 +2520,11 @@
     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', 
diff -Naur ns-3.19/src/core/bindings/modulegen__gcc_LP64.py ns-3.20/src/core/bindings/modulegen__gcc_LP64.py
--- ns-3.19/src/core/bindings/modulegen__gcc_LP64.py	2014-06-17 10:34:00.566635673 -0700
+++ ns-3.20/src/core/bindings/modulegen__gcc_LP64.py	2014-06-17 10:33:13.894995954 -0700
@@ -78,6 +78,8 @@
     module.add_class('ObjectDeleter')
     ## object-factory.h (module 'core'): ns3::ObjectFactory [class]
     module.add_class('ObjectFactory')
+    ## log.h (module 'core'): ns3::ParameterLogger [class]
+    module.add_class('ParameterLogger')
     ## random-variable.h (module 'core'): ns3::RandomVariable [class]
     module.add_class('RandomVariable')
     ## random-variable-stream-helper.h (module 'core'): ns3::RandomVariableStreamHelper [class]
@@ -98,6 +100,8 @@
     module.add_class('SystemMutex')
     ## system-wall-clock-ms.h (module 'core'): ns3::SystemWallClockMs [class]
     module.add_class('SystemWallClockMs')
+    ## nstime.h (module 'core'): ns3::TimeWithUnit [class]
+    module.add_class('TimeWithUnit')
     ## timer.h (module 'core'): ns3::Timer [class]
     module.add_class('Timer')
     ## timer.h (module 'core'): ns3::Timer::DestroyPolicy [enumeration]
@@ -134,6 +138,8 @@
     module.add_class('empty')
     ## int64x64-double.h (module 'core'): ns3::int64x64_t [class]
     module.add_class('int64x64_t')
+    ## 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'])
     ## random-variable.h (module 'core'): ns3::ConstantVariable [class]
     module.add_class('ConstantVariable', parent=root_module['ns3::RandomVariable'])
     ## random-variable.h (module 'core'): ns3::DeterministicVariable [class]
@@ -316,35 +322,35 @@
     module.add_class('Vector3DChecker', parent=root_module['ns3::AttributeChecker'])
     ## vector.h (module 'core'): ns3::Vector3DValue [class]
     module.add_class('Vector3DValue', parent=root_module['ns3::AttributeValue'])
-    typehandlers.add_type_alias('ns3::RngSeedManager', 'ns3::SeedManager')
-    typehandlers.add_type_alias('ns3::RngSeedManager*', 'ns3::SeedManager*')
-    typehandlers.add_type_alias('ns3::RngSeedManager&', 'ns3::SeedManager&')
+    typehandlers.add_type_alias(u'ns3::RngSeedManager', u'ns3::SeedManager')
+    typehandlers.add_type_alias(u'ns3::RngSeedManager*', u'ns3::SeedManager*')
+    typehandlers.add_type_alias(u'ns3::RngSeedManager&', u'ns3::SeedManager&')
     module.add_typedef(root_module['ns3::RngSeedManager'], 'SeedManager')
-    typehandlers.add_type_alias('ns3::ObjectPtrContainerValue', 'ns3::ObjectVectorValue')
-    typehandlers.add_type_alias('ns3::ObjectPtrContainerValue*', 'ns3::ObjectVectorValue*')
-    typehandlers.add_type_alias('ns3::ObjectPtrContainerValue&', 'ns3::ObjectVectorValue&')
+    typehandlers.add_type_alias(u'ns3::ObjectPtrContainerValue', u'ns3::ObjectVectorValue')
+    typehandlers.add_type_alias(u'ns3::ObjectPtrContainerValue*', u'ns3::ObjectVectorValue*')
+    typehandlers.add_type_alias(u'ns3::ObjectPtrContainerValue&', u'ns3::ObjectVectorValue&')
     module.add_typedef(root_module['ns3::ObjectPtrContainerValue'], 'ObjectVectorValue')
-    typehandlers.add_type_alias('void ( * ) ( std::ostream & ) *', 'ns3::LogTimePrinter')
-    typehandlers.add_type_alias('void ( * ) ( std::ostream & ) **', 'ns3::LogTimePrinter*')
-    typehandlers.add_type_alias('void ( * ) ( std::ostream & ) *&', 'ns3::LogTimePrinter&')
-    typehandlers.add_type_alias('void ( * ) ( std::ostream & ) *', 'ns3::LogNodePrinter')
-    typehandlers.add_type_alias('void ( * ) ( std::ostream & ) **', 'ns3::LogNodePrinter*')
-    typehandlers.add_type_alias('void ( * ) ( std::ostream & ) *&', 'ns3::LogNodePrinter&')
-    typehandlers.add_type_alias('ns3::Vector3D', 'ns3::Vector')
-    typehandlers.add_type_alias('ns3::Vector3D*', 'ns3::Vector*')
-    typehandlers.add_type_alias('ns3::Vector3D&', 'ns3::Vector&')
+    typehandlers.add_type_alias(u'void ( * ) ( std::ostream & ) *', u'ns3::LogTimePrinter')
+    typehandlers.add_type_alias(u'void ( * ) ( std::ostream & ) **', u'ns3::LogTimePrinter*')
+    typehandlers.add_type_alias(u'void ( * ) ( std::ostream & ) *&', u'ns3::LogTimePrinter&')
+    typehandlers.add_type_alias(u'void ( * ) ( std::ostream & ) *', u'ns3::LogNodePrinter')
+    typehandlers.add_type_alias(u'void ( * ) ( std::ostream & ) **', u'ns3::LogNodePrinter*')
+    typehandlers.add_type_alias(u'void ( * ) ( std::ostream & ) *&', u'ns3::LogNodePrinter&')
+    typehandlers.add_type_alias(u'ns3::Vector3D', u'ns3::Vector')
+    typehandlers.add_type_alias(u'ns3::Vector3D*', u'ns3::Vector*')
+    typehandlers.add_type_alias(u'ns3::Vector3D&', u'ns3::Vector&')
     module.add_typedef(root_module['ns3::Vector3D'], 'Vector')
-    typehandlers.add_type_alias('ns3::Vector3DValue', 'ns3::VectorValue')
-    typehandlers.add_type_alias('ns3::Vector3DValue*', 'ns3::VectorValue*')
-    typehandlers.add_type_alias('ns3::Vector3DValue&', 'ns3::VectorValue&')
+    typehandlers.add_type_alias(u'ns3::Vector3DValue', u'ns3::VectorValue')
+    typehandlers.add_type_alias(u'ns3::Vector3DValue*', u'ns3::VectorValue*')
+    typehandlers.add_type_alias(u'ns3::Vector3DValue&', u'ns3::VectorValue&')
     module.add_typedef(root_module['ns3::Vector3DValue'], 'VectorValue')
-    typehandlers.add_type_alias('ns3::ObjectPtrContainerValue', 'ns3::ObjectMapValue')
-    typehandlers.add_type_alias('ns3::ObjectPtrContainerValue*', 'ns3::ObjectMapValue*')
-    typehandlers.add_type_alias('ns3::ObjectPtrContainerValue&', 'ns3::ObjectMapValue&')
+    typehandlers.add_type_alias(u'ns3::ObjectPtrContainerValue', u'ns3::ObjectMapValue')
+    typehandlers.add_type_alias(u'ns3::ObjectPtrContainerValue*', u'ns3::ObjectMapValue*')
+    typehandlers.add_type_alias(u'ns3::ObjectPtrContainerValue&', u'ns3::ObjectMapValue&')
     module.add_typedef(root_module['ns3::ObjectPtrContainerValue'], 'ObjectMapValue')
-    typehandlers.add_type_alias('ns3::Vector3DChecker', 'ns3::VectorChecker')
-    typehandlers.add_type_alias('ns3::Vector3DChecker*', 'ns3::VectorChecker*')
-    typehandlers.add_type_alias('ns3::Vector3DChecker&', 'ns3::VectorChecker&')
+    typehandlers.add_type_alias(u'ns3::Vector3DChecker', u'ns3::VectorChecker')
+    typehandlers.add_type_alias(u'ns3::Vector3DChecker*', u'ns3::VectorChecker*')
+    typehandlers.add_type_alias(u'ns3::Vector3DChecker&', u'ns3::VectorChecker&')
     module.add_typedef(root_module['ns3::Vector3DChecker'], 'VectorChecker')
     
     ## Register a nested module for the namespace CommandLineHelper
@@ -392,8 +398,8 @@
     
     ## config.h (module 'core'): ns3::Config::MatchContainer [class]
     module.add_class('MatchContainer')
-    module.add_container('std::vector< ns3::Ptr< ns3::Object > >', 'ns3::Ptr< ns3::Object >', container_type='vector')
-    module.add_container('std::vector< std::string >', 'std::string', container_type='vector')
+    module.add_container('std::vector< ns3::Ptr< ns3::Object > >', 'ns3::Ptr< ns3::Object >', container_type=u'vector')
+    module.add_container('std::vector< std::string >', 'std::string', container_type=u'vector')
 
 def register_types_ns3_FatalImpl(module):
     root_module = module.get_root()
@@ -404,12 +410,12 @@
     
     ## hash-function.h (module 'core'): ns3::Hash::Implementation [class]
     module.add_class('Implementation', 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
     
@@ -432,7 +438,7 @@
 def register_types_ns3_SystemPath(module):
     root_module = module.get_root()
     
-    module.add_container('std::list< std::string >', 'std::string', container_type='list')
+    module.add_container('std::list< std::string >', 'std::string', container_type=u'list')
 
 def register_types_ns3_internal(module):
     root_module = module.get_root()
@@ -460,6 +466,7 @@
     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_Ns3ParameterLogger_methods(root_module, root_module['ns3::ParameterLogger'])
     register_Ns3RandomVariable_methods(root_module, root_module['ns3::RandomVariable'])
     register_Ns3RandomVariableStreamHelper_methods(root_module, root_module['ns3::RandomVariableStreamHelper'])
     register_Ns3RngSeedManager_methods(root_module, root_module['ns3::RngSeedManager'])
@@ -470,6 +477,7 @@
     register_Ns3SystemCondition_methods(root_module, root_module['ns3::SystemCondition'])
     register_Ns3SystemMutex_methods(root_module, root_module['ns3::SystemMutex'])
     register_Ns3SystemWallClockMs_methods(root_module, root_module['ns3::SystemWallClockMs'])
+    register_Ns3TimeWithUnit_methods(root_module, root_module['ns3::TimeWithUnit'])
     register_Ns3Timer_methods(root_module, root_module['ns3::Timer'])
     register_Ns3TimerImpl_methods(root_module, root_module['ns3::TimerImpl'])
     register_Ns3TriangularVariable_methods(root_module, root_module['ns3::TriangularVariable'])
@@ -641,6 +649,7 @@
     return
 
 def register_Ns3CommandLine_methods(root_module, cls):
+    cls.add_output_stream_operator()
     ## command-line.h (module 'core'): ns3::CommandLine::CommandLine() [constructor]
     cls.add_constructor([])
     ## command-line.h (module 'core'): ns3::CommandLine::CommandLine(ns3::CommandLine const & cmd) [copy constructor]
@@ -878,29 +887,25 @@
 def register_Ns3LogComponent_methods(root_module, cls):
     ## log.h (module 'core'): ns3::LogComponent::LogComponent(ns3::LogComponent const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::LogComponent const &', 'arg0')])
-    ## log.h (module 'core'): ns3::LogComponent::LogComponent(std::string const & name) [constructor]
-    cls.add_constructor([param('std::string const &', 'name')])
-    ## log.h (module 'core'): void ns3::LogComponent::Disable(ns3::LogLevel level) [member function]
+    ## log.h (module 'core'): ns3::LogComponent::LogComponent(std::string const & name, ns3::LogLevel const mask=::ns3::LOG_NONE) [constructor]
+    cls.add_constructor([param('std::string const &', 'name'), param('ns3::LogLevel const', 'mask', default_value='::ns3::LOG_NONE')])
+    ## log.h (module 'core'): void ns3::LogComponent::Disable(ns3::LogLevel const level) [member function]
     cls.add_method('Disable', 
                    'void', 
-                   [param('ns3::LogLevel', 'level')])
-    ## log.h (module 'core'): void ns3::LogComponent::Enable(ns3::LogLevel level) [member function]
+                   [param('ns3::LogLevel const', 'level')])
+    ## log.h (module 'core'): void ns3::LogComponent::Enable(ns3::LogLevel const level) [member function]
     cls.add_method('Enable', 
                    'void', 
-                   [param('ns3::LogLevel', 'level')])
-    ## log.h (module 'core'): void ns3::LogComponent::EnvVarCheck(std::string const & name) [member function]
-    cls.add_method('EnvVarCheck', 
-                   'void', 
-                   [param('std::string const &', 'name')])
-    ## log.h (module 'core'): std::string ns3::LogComponent::GetLevelLabel(ns3::LogLevel const level) const [member function]
+                   [param('ns3::LogLevel const', 'level')])
+    ## log.h (module 'core'): static std::string ns3::LogComponent::GetLevelLabel(ns3::LogLevel const level) [member function]
     cls.add_method('GetLevelLabel', 
                    'std::string', 
                    [param('ns3::LogLevel const', 'level')], 
-                   is_const=True)
-    ## log.h (module 'core'): bool ns3::LogComponent::IsEnabled(ns3::LogLevel level) const [member function]
+                   is_static=True)
+    ## log.h (module 'core'): bool ns3::LogComponent::IsEnabled(ns3::LogLevel const level) const [member function]
     cls.add_method('IsEnabled', 
                    'bool', 
-                   [param('ns3::LogLevel', 'level')], 
+                   [param('ns3::LogLevel const', 'level')], 
                    is_const=True)
     ## log.h (module 'core'): bool ns3::LogComponent::IsNoneEnabled() const [member function]
     cls.add_method('IsNoneEnabled', 
@@ -912,6 +917,10 @@
                    'char const *', 
                    [], 
                    is_const=True)
+    ## log.h (module 'core'): void ns3::LogComponent::SetMask(ns3::LogLevel const level) [member function]
+    cls.add_method('SetMask', 
+                   'void', 
+                   [param('ns3::LogLevel const', 'level')])
     return
 
 def register_Ns3Names_methods(root_module, cls):
@@ -1075,6 +1084,13 @@
                    [param('std::string', 'tid')])
     return
 
+def register_Ns3ParameterLogger_methods(root_module, cls):
+    ## log.h (module 'core'): ns3::ParameterLogger::ParameterLogger(ns3::ParameterLogger const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::ParameterLogger const &', 'arg0')])
+    ## log.h (module 'core'): ns3::ParameterLogger::ParameterLogger(std::ostream & os) [constructor]
+    cls.add_constructor([param('std::ostream &', 'os')])
+    return
+
 def register_Ns3RandomVariable_methods(root_module, cls):
     cls.add_output_stream_operator()
     ## random-variable.h (module 'core'): ns3::RandomVariable::RandomVariable() [constructor]
@@ -1325,6 +1341,14 @@
                    [])
     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_Ns3Timer_methods(root_module, cls):
     ## timer.h (module 'core'): ns3::Timer::Timer(ns3::Timer const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::Timer const &', 'arg0')])
@@ -1709,62 +1733,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('==')
@@ -1773,6 +1753,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]
@@ -1813,6 +1795,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_Ns3ConstantVariable_methods(root_module, cls):
@@ -1945,7 +1929,7 @@
     cls.add_method('GetObject', 
                    'ns3::Ptr< ns3::Object >', 
                    [param('ns3::TypeId', 'tid')], 
-                   is_const=True, template_parameters=['ns3::Object'], custom_template_method_name='GetObject')
+                   is_const=True, template_parameters=['ns3::Object'], custom_template_method_name=u'GetObject')
     ## object.h (module 'core'): static ns3::TypeId ns3::Object::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
                    'ns3::TypeId', 
@@ -2501,13 +2485,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('==')
@@ -2534,6 +2520,11 @@
     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', 
diff -Naur ns-3.19/src/core/bindings/module_helpers.cc ns-3.20/src/core/bindings/module_helpers.cc
--- ns-3.19/src/core/bindings/module_helpers.cc	2014-06-17 10:34:00.559635727 -0700
+++ ns-3.20/src/core/bindings/module_helpers.cc	2014-06-17 10:33:13.887996008 -0700
@@ -2,6 +2,10 @@
 #include "ns3/ref-count-base.h"
 #include <unistd.h>
 
+#if PY_VERSION_HEX >= 0x03000000
+# define PyInt_AsUnsignedLongMask PyLong_AsUnsignedLongMask
+# define PyString_FromStringAndSize PyUnicode_FromStringAndSize
+#endif
 
 namespace {
 
diff -Naur ns-3.19/src/core/model/abort.h ns-3.20/src/core/model/abort.h
--- ns-3.19/src/core/model/abort.h	2014-06-17 10:34:00.574635611 -0700
+++ ns-3.20/src/core/model/abort.h	2014-06-17 10:33:13.902995892 -0700
@@ -24,7 +24,8 @@
 #include "fatal-error.h"
 
 /**
- * \ingroup debugging
+ * \ingroup fatal
+ *
  * \brief Abnormal program termination
  *
  * \param msg message to output when this macro is hit.
@@ -48,7 +49,8 @@
 
 
 /**
- * \ingroup debugging
+ * \ingroup fatal
+ *
  * \brief Abnormal program termination if cond is true.
  *
  * \param cond condition to be evaluated.
@@ -76,7 +78,8 @@
     } while (false)
 
 /**
- * \ingroup debugging
+ * \ingroup fatal
+ *
  * \brief Abnormal program termination if cond is true.
  *
  * \param cond condition to be evaluated.
@@ -105,7 +108,8 @@
     } while (false)
 
 /**
- * \ingroup debugging
+ * \ingroup fatal
+ *
  * \brief Abnormal program termination if cond is false.
  *
  * \param cond condition to be evaluated.
@@ -118,7 +122,8 @@
   NS_ABORT_IF (!(cond))
 
 /**
- * \ingroup debugging
+ * \ingroup fatal
+ *
  * \brief Abnormal program termination if cond is false.
  *
  * \param cond condition to be evaluated.
diff -Naur ns-3.19/src/core/model/assert.h ns-3.20/src/core/model/assert.h
--- ns-3.19/src/core/model/assert.h	2014-06-17 10:34:00.574635611 -0700
+++ ns-3.20/src/core/model/assert.h	2014-06-17 10:33:13.902995892 -0700
@@ -21,21 +21,11 @@
 #ifndef NS_ASSERT_H
 #define NS_ASSERT_H
 
-#ifdef NS3_ASSERT_ENABLE
-
-#include <iostream>
-
-#include "fatal-error.h"
-
-/**
- * \ingroup core
- * \defgroup debugging Debugging
- */
 /**
  * \ingroup debugging
- * \defgroup assert Assert
+ * \defgroup assert Assertions
  *
- * \brief assert functions and macros
+ * \brief Assert functions and macros
  *
  * The assert macros are used to verify
  * at runtime that a certain condition is true. If it is
@@ -53,13 +43,20 @@
  * builds, use NS_ABORT_UNLESS and NS_ABORT_MSG_UNLESS.
  */
 
+#ifdef NS3_ASSERT_ENABLE
+
+#include <iostream>
+
+#include "fatal-error.h"
+
 /**
  * \ingroup assert
- * \param condition condition to verify.
  *
  * At runtime, in debugging builds, if this condition is not
  * true, the program prints the source file, line number and 
  * unverified condition and halts by calling std::terminate
+ *
+ * \param condition condition to verify.
  */
 #define NS_ASSERT(condition)                                    \
   do                                                            \
@@ -76,12 +73,13 @@
 
 /**
  * \ingroup assert
- * \param condition condition to verify.
- * \param message message to output
  *
  * At runtime, in debugging builds, if this condition is not
  * true, the program prints the message to output and
  * halts by calling std::terminate.
+ *
+ * \param condition condition to verify.
+ * \param message message to output
  */
 #define NS_ASSERT_MSG(condition, message)             \
   do                                                  \
diff -Naur ns-3.19/src/core/model/attribute-accessor-helper.h ns-3.20/src/core/model/attribute-accessor-helper.h
--- ns-3.19/src/core/model/attribute-accessor-helper.h	2014-06-17 10:34:00.574635611 -0700
+++ ns-3.20/src/core/model/attribute-accessor-helper.h	2014-06-17 10:33:13.902995892 -0700
@@ -28,6 +28,7 @@
  * \ingroup AttributeHelper
  */
 template <typename V, typename T1>
+inline
 Ptr<const AttributeAccessor>
 MakeAccessorHelper (T1 a1);
 
@@ -35,6 +36,7 @@
  * \ingroup AttributeHelper
  */
 template <typename V, typename T1, typename T2>
+inline
 Ptr<const AttributeAccessor>
 MakeAccessorHelper (T1 a1, T2 a2);
 
@@ -94,6 +96,7 @@
 };
 
 template <typename V, typename T, typename U>
+inline
 Ptr<const AttributeAccessor>
 DoMakeAccessorHelperOne (U T::*memberVariable)
 {
@@ -132,6 +135,7 @@
 }
 
 template <typename V, typename T, typename U>
+inline
 Ptr<const AttributeAccessor>
 DoMakeAccessorHelperOne (U (T::*getter)(void) const)
 {
@@ -163,6 +167,7 @@
 
 
 template <typename V, typename T, typename U>
+inline
 Ptr<const AttributeAccessor>
 DoMakeAccessorHelperOne (void (T::*setter)(U))
 {
@@ -199,6 +204,7 @@
 }
 
 template <typename W, typename T, typename U, typename V>
+inline
 Ptr<const AttributeAccessor>
 DoMakeAccessorHelperTwo (void (T::*setter)(U),
                          V (T::*getter)(void) const)
@@ -240,6 +246,7 @@
 }
 
 template <typename W, typename T, typename U, typename V>
+inline
 Ptr<const AttributeAccessor>
 DoMakeAccessorHelperTwo (V (T::*getter)(void) const,
                          void (T::*setter)(U))
@@ -248,6 +255,7 @@
 }
 
 template <typename W, typename T, typename U, typename V>
+inline
 Ptr<const AttributeAccessor>
 DoMakeAccessorHelperTwo (bool (T::*setter)(U),
                          V (T::*getter)(void) const)
@@ -289,6 +297,7 @@
 }
 
 template <typename W, typename T, typename U, typename V>
+inline
 Ptr<const AttributeAccessor>
 DoMakeAccessorHelperTwo (bool (T::*getter)(void) const,
                          void (T::*setter)(U))
@@ -297,6 +306,7 @@
 }
 
 template <typename V, typename T1>
+inline
 Ptr<const AttributeAccessor>
 MakeAccessorHelper (T1 a1)
 {
@@ -304,6 +314,7 @@
 }
 
 template <typename V, typename T1, typename T2>
+inline
 Ptr<const AttributeAccessor>
 MakeAccessorHelper (T1 a1, T2 a2)
 {
diff -Naur ns-3.19/src/core/model/attribute-construction-list.cc ns-3.20/src/core/model/attribute-construction-list.cc
--- ns-3.19/src/core/model/attribute-construction-list.cc	2014-06-17 10:34:00.575635604 -0700
+++ ns-3.20/src/core/model/attribute-construction-list.cc	2014-06-17 10:33:13.903995884 -0700
@@ -22,8 +22,7 @@
 
 namespace ns3 {
 
-NS_LOG_COMPONENT_DEFINE("AttributeConstructionList")
-  ;
+NS_LOG_COMPONENT_DEFINE("AttributeConstructionList");
 
 AttributeConstructionList::AttributeConstructionList ()
 {
diff -Naur ns-3.19/src/core/model/attribute-helper.h ns-3.20/src/core/model/attribute-helper.h
--- ns-3.19/src/core/model/attribute-helper.h	2014-06-17 10:34:00.575635604 -0700
+++ ns-3.20/src/core/model/attribute-helper.h	2014-06-17 10:33:13.903995884 -0700
@@ -37,10 +37,10 @@
  * the user class can then effectively be made an attribute.
  *
  * There are two kinds of helper macros:
- *  1) The simple macros.
- *    - ATTRIBUTE_HELPER_HEADER(type)
- *    - ATTRIBUTE_HELPER_CPP
- *  2) The more complex macros.
+ *   -# The simple macros.
+ *     - ATTRIBUTE_HELPER_HEADER(type)
+ *     - ATTRIBUTE_HELPER_CPP(type)
+ *   -# The more complex macros.
  *
  * The simple macros are implemented in terms of the complex
  * macros and should generally be preferred over the complex macros.
@@ -98,125 +98,180 @@
 
 /**
  * \ingroup attributehelper
+ *
+ * Define the attribute accessor functions \c MakeTypeAccessor
+ * for class \pname{type}.
+ *
  * \param type the name of the class
  *
  * This macro defines and generates the code for the implementation 
- * of the \c Make<type>Accessor template functions. This macro is typically
+ * of the \c MakeTypeAccessor template functions. This macro is typically
  * invoked in a class header to allow users of this class to view and
  * use the template functions defined here. This macro is implemented
  * through the helper templates functions ns3::MakeAccessorHelper<>.
  */
 #define ATTRIBUTE_ACCESSOR_DEFINE(type)                                 \
   template <typename T1>                                                \
-  Ptr<const AttributeAccessor> Make ## type ## Accessor (T1 a1)             \
+  Ptr<const AttributeAccessor> Make ## type ## Accessor (T1 a1)         \
   {                                                                     \
-    return MakeAccessorHelper<type ## Value> (a1);                        \
+    return MakeAccessorHelper<type ## Value> (a1);                      \
   }                                                                     \
   template <typename T1, typename T2>                                   \
-  Ptr<const AttributeAccessor> Make ## type ## Accessor (T1 a1, T2 a2)      \
+  Ptr<const AttributeAccessor> Make ## type ## Accessor (T1 a1, T2 a2)  \
   {                                                                     \
-    return MakeAccessorHelper<type ## Value> (a1, a2);                    \
+    return MakeAccessorHelper<type ## Value> (a1, a2);                  \
   }
 
 /**
  * \ingroup attributehelper
- * \internal
+ *
+ * Declare the attribute value class \pname{name}Value
+ * for underlying class \pname{type}.
+ *
+ * \param type The underlying type name
+ * \param 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.
+ *
+ * This can be used directly for things like plain old data,
+ * such as \c std::string, to create the attribute value class
+ * StringValue.
  */
 #define ATTRIBUTE_VALUE_DEFINE_WITH_NAME(type,name)                     \
-  class name ## Value : public AttributeValue                             \
+  class name ## Value : public AttributeValue                           \
   {                                                                     \
-public:                                                               \
-    name ## Value ();                                                     \
-    name ## Value (const type &value);                                    \
+  public:                                                               \
+    name ## Value ();                                                   \
+    name ## Value (const type &value);                                  \
     void Set (const type &value);                                       \
     type Get (void) const;                                              \
     template <typename T>                                               \
-    bool GetAccessor (T &value) const {                                 \
+      bool GetAccessor (T &value) const {                               \
       value = T (m_value);                                              \
       return true;                                                      \
     }                                                                   \
     virtual Ptr<AttributeValue> Copy (void) const;                      \
-    virtual std::string SerializeToString (Ptr<const AttributeChecker> checker) const; \
-    virtual bool DeserializeFromString (std::string value, Ptr<const AttributeChecker> checker); \
-private:                                                              \
+    virtual std::string                                                 \
+      SerializeToString (Ptr<const AttributeChecker> checker) const;    \
+    virtual bool                                                        \
+      DeserializeFromString (std::string value,                         \
+                             Ptr<const AttributeChecker> checker);      \
+  private:                                                              \
     type m_value;                                                       \
   };
 
 
 /**
  * \ingroup attributehelper
- * \param type the name of the class.
  *
- * This macro defines the class \c typeValue associated to class \c type.
+ * Declare the attribute value class \pname{Name}Value
+ * for the class \pname{Name}
+ *
+ * \param 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.
  */
-#define ATTRIBUTE_VALUE_DEFINE(type)                                    \
-  ATTRIBUTE_VALUE_DEFINE_WITH_NAME (type,type)
+#define ATTRIBUTE_VALUE_DEFINE(Name)                                    \
+  ATTRIBUTE_VALUE_DEFINE_WITH_NAME (Name,Name)
 
 
 /**
  * \ingroup attributehelper
+ *
+ * Define the conversion operators class \pname{type} and
+ * Attribute instances.
+ *
  * \param type the name of the class
  *
  * This macro defines the conversion operators for class \c type to and
  * from instances of type Attribute.
  * Typically invoked in the class header file.
+ *
+ * \internal
+ * This appears to be unused.
  */
 #define ATTRIBUTE_CONVERTER_DEFINE(type)
 
 /**
  * \ingroup attributehelper
+ *
+ * Declare the AttributeChecker class \pname{type}Checker
+ * and the \c MakeTypeChecker function for class \pname{type}.
+ *
  * \param type the name of the class
  *
- * This macro defines the \c typeChecker class and the associated
- * \c Make<type>Checker function.
- * Typically invoked in the class header file..
- */
-#define ATTRIBUTE_CHECKER_DEFINE(type)                          \
-  class type ## Checker : public AttributeChecker {};             \
-  Ptr<const AttributeChecker> Make ## type ## Checker (void);       \
+ * This macro declares the \pname{type}Checker class and the associated
+ * \c MakeTypeChecker function.
+ *
+ * (Note that the \pname{type}Checker class needs no implementation
+ * since it just inherits all its implementation from AttributeChecker.)
+ *
+ * Typically invoked in the class header file.
+ */
+#define ATTRIBUTE_CHECKER_DEFINE(type)                                  \
+  class type ## Checker : public AttributeChecker {};                   \
+  Ptr<const AttributeChecker> Make ## type ## Checker (void)
 
 
 /**
  * \ingroup attributehelper
- * \internal
+ *
+ * Define the class methods belonging to
+ * the attribute value class \pname{name}Value 
+ * of the underlying class \pname{type}.
+ *
+ * \param type The underlying type name
+ * \param name The token to use in defining the accessor name.
+ *
+ * This macro implements the \pname{type}Value class methods
+ * (including the \pname{type}Value::SerializeToString
+ * and \pname{type}Value::DeserializeFromString methods).
+ *
+ * Typically invoked in the source file.
  */
 #define ATTRIBUTE_VALUE_IMPLEMENT_WITH_NAME(type,name)                  \
-  name ## Value::name ## Value ()                                           \
+  name ## Value::name ## Value ()                                       \
     : m_value () {}                                                     \
-  name ## Value::name ## Value (const type &value)                          \
-    : m_value (value) {}                                                  \
-  void name ## Value::Set (const type &v) {                               \
+  name ## Value::name ## Value (const type &value)                      \
+    : m_value (value) {}                                                \
+  void name ## Value::Set (const type &v) {                             \
     m_value = v;                                                        \
   }                                                                     \
-  type name ## Value::Get (void) const {                                  \
+  type name ## Value::Get (void) const {                                \
     return m_value;                                                     \
   }                                                                     \
   Ptr<AttributeValue>                                                   \
-  name ## Value::Copy (void) const {                                      \
-    return ns3::Create<name ## Value> (*this);                            \
+  name ## Value::Copy (void) const {                                    \
+    return ns3::Create<name ## Value> (*this);                          \
+  }                                                                     \
+  std::string name ## Value::SerializeToString                          \
+    (Ptr<const AttributeChecker> checker) const {                       \
+      std::ostringstream oss;                                           \
+      oss << m_value;                                                   \
+      return oss.str ();                                                \
   }                                                                     \
-  std::string                                                           \
-    name ## Value::SerializeToString (Ptr<const AttributeChecker> checker) const { \
-    std::ostringstream oss;                                             \
-    oss << m_value;                                                     \
-    return oss.str ();                                                  \
-  }                                                                     \
-  bool                                                                  \
-    name ## Value::DeserializeFromString (std::string value, Ptr<const AttributeChecker> checker) { \
-    std::istringstream iss;                                             \
-    iss.str (value);                                                    \
-    iss >> m_value;                                                     \
-    return !iss.bad () && !iss.fail ();                                 \
+  bool name ## Value::DeserializeFromString                             \
+    (std::string value, Ptr<const AttributeChecker> checker) {          \
+      std::istringstream iss;                                           \
+      iss.str (value);                                                  \
+      iss >> m_value;                                                   \
+      return !iss.bad () && !iss.fail ();                               \
   }
 
 /**
  * \ingroup attributehelper
+ *
+ * Define the class methods belonging to
+ * attribute value class \pname{type}Value for class \pname{type}.
+ *
  * \param type the name of the class.
  *
- * This macro implements the \c typeValue class (including the 
- * \c typeValue::SerializeToString and \c typeValue::DeserializeFromString 
- * methods).
+ * This macro implements the \pname{type}Value class methods
+ * (including the \pname{type}Value::SerializeToString
+ * and \pname{type}Value::DeserializeFromString methods).
+ *
  * Typically invoked in the source file.
  */
 #define ATTRIBUTE_VALUE_IMPLEMENT(type)                                 \
@@ -225,31 +280,58 @@
 
 /**
  * \ingroup attributehelper
+ *
+ * Define the \c MakeTypeChecker function for class \pname{type}.
+ *
  * \param type the name of the class
  *
- * This macro implements the \c Make<type>Checker function.
+ * This macro implements the \c MakeTypeChecker function.
+ *
  * Typically invoked in the source file..
  */
 #define ATTRIBUTE_CHECKER_IMPLEMENT(type)                               \
-  Ptr<const AttributeChecker> Make ## type ## Checker (void)                \
-  {                                                                     \
-    return MakeSimpleAttributeChecker<type ## Value,type ## Checker> (# type "Value", # type); \
+  Ptr<const AttributeChecker> Make ## type ## Checker (void) {          \
+    return MakeSimpleAttributeChecker<type ## Value,type ## Checker>    \
+      (# type "Value", # type);                                         \
   }                                                                     \
 
 /**
  * \ingroup attributehelper
- * \internal
+ *
+ * Define the \c MakeTypeChecker function for class \pname{type}.
+ *
+ * \param type the name of the class.
+ * \param name the string name of the underlying type.
+ *
+ * This macro implements the \c MakeTypeChecker function
+ * for class \pname{type}.
+ *
+ * Typically invoked in the source file..
  */
-#define ATTRIBUTE_CHECKER_IMPLEMENT_WITH_NAME(type,name)                    \
-  Ptr<const AttributeChecker> Make ## type ## Checker (void)                \
-  {                                                                     \
-    return MakeSimpleAttributeChecker<type ## Value,type ## Checker> (# type "Value", name); \
+#define ATTRIBUTE_CHECKER_IMPLEMENT_WITH_NAME(type,name)                \
+  Ptr<const AttributeChecker> Make ## type ## Checker (void) {          \
+    return MakeSimpleAttributeChecker<type ## Value,type ## Checker>    \
+      (# type "Value", name);                                           \
   }                                                                     \
 
 /**
  * \ingroup attributehelper
+ *
+ * Declare the attribute value, accessor and checkers for class \pname{type}
+ *
  * \param type the name of the class
  *
+ * This macro declares:
+ *
+ *   - The attribute value class \pname{type}Value,
+ *
+ *   - The attribute accessor functions \c MakeTypeAccessor,
+ *
+ *   - The AttributeChecker class \pname{type}Checker
+ *     and the \c MakeTypeChecker function,
+ *
+ * for class \pname{type}.
+ *
  * This macro should be invoked outside of the class
  * declaration in its public header.
  */
@@ -260,8 +342,19 @@
 
 /**
  * \ingroup attributehelper
+ *
+ * Define the attribute value, accessor and checkers for class \pname{type}
+ *
  * \param type the name of the class
  *
+ * This macro implements
+ *
+ *   - The \pname{type}Value class methods,
+ *
+ *   - The \c MakeTypeChecker function,
+ *
+ * for class \pname{type}.
+ *
  * This macro should be invoked from the class implementation file.
  */
 #define ATTRIBUTE_HELPER_CPP(type)                                      \
diff -Naur ns-3.19/src/core/model/breakpoint.h ns-3.20/src/core/model/breakpoint.h
--- ns-3.19/src/core/model/breakpoint.h	2014-06-17 10:34:00.577635588 -0700
+++ ns-3.20/src/core/model/breakpoint.h	2014-06-17 10:33:13.905995869 -0700
@@ -36,10 +36,17 @@
 
 /**
  * \ingroup debugging
+ * \defgroup breakpoint Breakpoints
+ *
+ * \brief Trigger a debugger breakpoint.
+ */
+
+/**
+ * \ingroup breakpoint
  *
  * Inserts a breakpoint instruction (or equivalent system call) into
- * the code for selected machines.  When an NS_ASSERT cannot verify its condition, 
- * this macro is used. Falls back to calling
+ * the code for selected machines.  When an NS_ASSERT cannot verify
+ * its condition, this macro is used. Falls back to calling
  * AssertBreakpoint() for architectures where breakpoint assembly
  * instructions are not supported.
  */
@@ -57,7 +64,7 @@
 #endif
 
 /**
- * \ingroup debugging
+ * \ingroup breakpoint
  *
  * \brief fallback breakpoint function
  *
diff -Naur ns-3.19/src/core/model/cairo-wideint.c ns-3.20/src/core/model/cairo-wideint.c
--- ns-3.19/src/core/model/cairo-wideint.c	2014-06-17 10:34:00.578635580 -0700
+++ ns-3.20/src/core/model/cairo-wideint.c	2014-06-17 10:33:13.906995861 -0700
@@ -32,6 +32,8 @@
 
 #if HAVE_UINT64_T
 
+const char * cairo_impl64 = "uint64_t";
+
 #define _cairo_uint32s_to_uint64(h,l) ((uint64_t) (h) << 32 | (l))
 
 cairo_uquorem64_t
@@ -46,6 +48,8 @@
 
 #else
 
+const char * cairo_impl64 = "uint32_t";
+
 cairo_uint64_t
 _cairo_uint32_to_uint64 (uint32_t i)
 {
@@ -312,6 +316,8 @@
 
 #if HAVE_UINT128_T
 
+const char * cairo_impl128 = "uint128_t";
+
 cairo_uquorem128_t
 _cairo_uint128_divrem (cairo_uint128_t num, cairo_uint128_t den)
 {
@@ -324,6 +330,8 @@
 
 #else
 
+const char * cairo_impl128 = "cairo_uint64_t";
+
 cairo_uint128_t
 _cairo_uint32_to_uint128 (uint32_t i)
 {
@@ -610,16 +618,16 @@
     return qr;
 }
 
-cairo_int128_t
-_cairo_int128_negate (cairo_int128_t a)
+cairo_uint128_t
+_cairo_uint128_negate (cairo_uint128_t a)
 {
     a.lo = _cairo_uint64_not (a.lo);
     a.hi = _cairo_uint64_not (a.hi);
     return _cairo_uint128_add (a, _cairo_uint32_to_uint128 (1));
 }
 
-cairo_int128_t
-_cairo_int128_not (cairo_int128_t a)
+cairo_uint128_t
+_cairo_uint128_not (cairo_uint128_t a)
 {
     a.lo = _cairo_uint64_not (a.lo);
     a.hi = _cairo_uint64_not (a.hi);
@@ -659,7 +667,7 @@
  * dividend and 64 bit divisor.  If the quotient doesn't fit into 32
  * bits then the returned remainder is equal to the divisor, and the
  * quotient is the largest representable 64 bit integer.  It is an
- * error to call this function with the high 32 bits of @num being
+ * error to call this function with the high 32 bits of `num' being
  * non-zero. */
 cairo_uquorem64_t
 _cairo_uint_96by64_32x64_divrem (cairo_uint128_t num,
diff -Naur ns-3.19/src/core/model/cairo-wideint-private.h ns-3.20/src/core/model/cairo-wideint-private.h
--- ns-3.19/src/core/model/cairo-wideint-private.h	2014-06-17 10:34:00.578635580 -0700
+++ ns-3.20/src/core/model/cairo-wideint-private.h	2014-06-17 10:33:13.906995861 -0700
@@ -32,9 +32,14 @@
 #ifndef CAIRO_WIDEINT_H
 #define CAIRO_WIDEINT_H
 
+// Adapt to ns-3 environment
 #include "ns3/core-config.h"
 #define cairo_private 
 #define HAVE_UINT64_T 1
+// Implementation tags added below and in cairo-wideint.c:
+// extern const char * cairo_impl64;
+// extern const char * cairo_impl128;
+
 
 /*for compatibility with MacOS and Cygwin*/
 #ifndef HAVE_STDINT_H
@@ -90,6 +95,8 @@
 
 #if !HAVE_UINT64_T
 
+extern const char * cairo_impl64;
+
 typedef struct _cairo_uint64 {
   uint32_t    lo, hi;
 } cairo_uint64_t, cairo_int64_t;
@@ -129,6 +136,8 @@
 
 #else
 
+extern const char * cairo_impl64;
+
 typedef uint64_t    cairo_uint64_t;
 typedef int64_t     cairo_int64_t;
 
@@ -209,6 +218,8 @@
 
 #if !HAVE_UINT128_T
 
+extern const char * cairo_impl128;
+
 typedef struct cairo_uint128 {
   cairo_uint64_t      lo, hi;
 } cairo_uint128_t, cairo_int128_t;
@@ -252,6 +263,8 @@
 
 #else   /* !HAVE_UINT128_T */
 
+extern const char * cairo_impl128;
+
 typedef uint128_t       cairo_uint128_t;
 typedef int128_t        cairo_int128_t;
 
diff -Naur ns-3.19/src/core/model/calendar-scheduler.cc ns-3.20/src/core/model/calendar-scheduler.cc
--- ns-3.19/src/core/model/calendar-scheduler.cc	2014-06-17 10:34:00.579635573 -0700
+++ ns-3.20/src/core/model/calendar-scheduler.cc	2014-06-17 10:33:13.907995853 -0700
@@ -28,11 +28,9 @@
 
 namespace ns3 {
 
-NS_LOG_COMPONENT_DEFINE ("CalendarScheduler")
-  ;
+NS_LOG_COMPONENT_DEFINE ("CalendarScheduler");
 
-NS_OBJECT_ENSURE_REGISTERED (CalendarScheduler)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (CalendarScheduler);
 
 TypeId
 CalendarScheduler::GetTypeId (void)
diff -Naur ns-3.19/src/core/model/callback.h ns-3.20/src/core/model/callback.h
--- ns-3.19/src/core/model/callback.h	2014-06-17 10:34:00.580635565 -0700
+++ ns-3.20/src/core/model/callback.h	2014-06-17 10:33:13.908995846 -0700
@@ -35,6 +35,10 @@
 /**
  * \ingroup core
  * \defgroup callback Callbacks
+ * \brief Wrap functions, objects, and arguments into self contained callbacks.
+ *
+ * Wrapped callbacks are at the heart of scheduling events in the
+ * simulator.
  */
 /**
  * \ingroup callback
@@ -68,7 +72,7 @@
 /**
  * \ingroup callback
  * \defgroup callbackimpl Callback Implementation
- * CallbackImpl classes
+ * Callback implementation classes
  */
 /**
  * \ingroup callbackimpl
@@ -1658,12 +1662,14 @@
 class CallbackValue : public AttributeValue
 {
 public:
+  /** Constructor */
   CallbackValue ();
   /**
    * Copy constructor
    * \param base Callback to copy
    */
-  CallbackValue (const CallbackBase &base);  
+  CallbackValue (const CallbackBase &base);
+  /** Destructor */
   virtual ~CallbackValue ();
   /** \param base the Callbackbase to use */
   void Set (CallbackBase base);
@@ -1695,10 +1701,8 @@
   CallbackBase m_value;                 //!< the CallbackBase
 };
 
-/** Attribute helpers @{ */
 ATTRIBUTE_ACCESSOR_DEFINE (Callback);
 ATTRIBUTE_CHECKER_DEFINE (Callback);
-/**@}*/
 
 } // namespace ns3
 
diff -Naur ns-3.19/src/core/model/command-line.cc ns-3.20/src/core/model/command-line.cc
--- ns-3.19/src/core/model/command-line.cc	2014-06-17 10:34:00.581635557 -0700
+++ ns-3.20/src/core/model/command-line.cc	2014-06-17 10:33:13.909995838 -0700
@@ -457,4 +457,11 @@
     }
 }
 
+std::ostream &
+operator << (std::ostream & os, const CommandLine & cmd)
+{
+  cmd.PrintHelp (os);
+  return os;
+}
+
 } // namespace ns3
diff -Naur ns-3.19/src/core/model/command-line.h ns-3.20/src/core/model/command-line.h
--- ns-3.19/src/core/model/command-line.h	2014-06-17 10:34:00.581635557 -0700
+++ ns-3.20/src/core/model/command-line.h	2014-06-17 10:33:13.910995830 -0700
@@ -91,7 +91,7 @@
  *   --SchedulerType=HeapScheduler
  * \endcode
  *
- * A simple example is in \c src/core/example/command-line-example.cc
+ * A simple example is in `src/core/example/ command-line-example.cc`
  * The heart of that example is this code:
  *
  * \code
@@ -110,7 +110,7 @@
  *  cmd.Parse (argc, argv);
  * \endcode
  * after which it prints the values of each variable.  (The \c SetCbArg function
- * is not shown.)
+ * is not shown here; see `src/core/example/ command-line-example.cc`)
  *
  * Here is the output from a few runs of that program:
  *
@@ -148,6 +148,31 @@
  *       --PrintAttributes=[typeid]:  Print all attributes of typeid.
  *       --PrintHelp:                 Print this help message.
  * \endcode
+ *
+ * Having parsed the arguments, some programs will need to perform
+ * some additional validation of the received values.  A common issue at this
+ * point is to discover that the supplied arguments are incomplete or
+ * incompatible.  Suggested best practice is to supply an error message
+ * and the complete usage message.  For example,
+ *
+ * \code
+ *   int value1;
+ *   int value2;
+ *   
+ *   CommandLine cmd;
+ *   cmd.Usage ("...");
+ *   cmd.AddValue ("value1", "first value", value1);
+ *   cmd.AddValue ("value2", "second value", value1);
+ *
+ *   cmd.Parse (argc, argv);
+ *
+ *   if (value1 * value2 < 0)
+ *     {
+ *       std::cerr << "value1 and value2 must have the same sign!" << std::endl;
+ *       std::cerr << cmd;
+ *       exit (-1);
+ *     }
+ * \endcode
  */
 class CommandLine
 {
@@ -328,12 +353,14 @@
   /**
    * 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
    */
   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
    */
   void PrintGroup (std::ostream &os, const std::string &group) const;
@@ -463,6 +490,23 @@
   return !iss.bad () && !iss.fail ();
 }
 
+/**
+ * Overloaded operator << to print program usage
+ * (shortcut for CommandLine::PrintHelper)
+ *
+ * \see CommandLine::PrintHelper
+ *
+ * Example usage:
+ * \code
+ *    CommandLine cmd;
+ *    cmd.Parse (argc, argv);
+ *    ...
+ *    
+ *    std::cerr << cmd;
+ * \endcode
+ */
+std::ostream & operator << (std::ostream & os, const CommandLine & cmd);
+
 } // namespace ns3
 
 #endif /* COMMAND_LINE_H */
diff -Naur ns-3.19/src/core/model/default-simulator-impl.cc ns-3.20/src/core/model/default-simulator-impl.cc
--- ns-3.19/src/core/model/default-simulator-impl.cc	2014-06-17 10:34:00.584635534 -0700
+++ ns-3.20/src/core/model/default-simulator-impl.cc	2014-06-17 10:33:13.912995815 -0700
@@ -38,8 +38,7 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (DefaultSimulatorImpl)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (DefaultSimulatorImpl);
 
 TypeId
 DefaultSimulatorImpl::GetTypeId (void)
diff -Naur ns-3.19/src/core/model/fatal-error.h ns-3.20/src/core/model/fatal-error.h
--- ns-3.19/src/core/model/fatal-error.h	2014-06-17 10:34:00.587635511 -0700
+++ ns-3.20/src/core/model/fatal-error.h	2014-06-17 10:33:13.915995792 -0700
@@ -28,7 +28,29 @@
 #include "fatal-impl.h"
 
 /**
- * \ingroup debugging
+ * \ingroup core
+ * \defgroup fatal Fatal Error Handlers
+ *
+ * \brief Functions to help clean up when a fatal error
+ * is encountered.
+ *
+ * The functions in this group are used to perform
+ * limited clean up, like flushing active streams, when
+ * fatal errors are encountered (through assertion fail,
+ * calls to NS_ABORT_* or calls to NS_FATAL_ERROR).
+ *
+ * Currently, other than flushing active ostreams, these
+ * functions does not interfere with outside memory.  There
+ * is still a residual risk that invalid ostream
+ * pointers may be present, and may corrupt the memory
+ * on the attempt to execute the flush() function.
+ */
+
+
+/**
+ * \ingroup fatal
+ * \private
+ *
  * \brief fatal error handling
  *
  * When this macro is hit at runtime, details of filename
@@ -52,7 +74,8 @@
   while (false)
 
 /**
- * \ingroup debugging
+ * \ingroup fatal
+ *
  * \brief fatal error handling
  *
  * \param msg message to output when this macro is hit.
diff -Naur ns-3.19/src/core/model/fatal-impl.h ns-3.20/src/core/model/fatal-impl.h
--- ns-3.19/src/core/model/fatal-impl.h	2014-06-17 10:34:00.588635503 -0700
+++ ns-3.20/src/core/model/fatal-impl.h	2014-06-17 10:33:13.916995784 -0700
@@ -23,30 +23,11 @@
 
 #include <ostream>
 
-/**
- * \ingroup debugging
- * \defgroup fatalHandler Fatal Error Handler 
- *
- * \brief Functions to help clean up when fatal error
- * is encountered.
- *
- * The functions in this group are used to perform
- * limited clean up, like flushing active streams, when
- * fatal error are encountered (through assertion fail,
- * calls to NS_ABORT_* and calls to NS_FATAL_ERROR.
- *
- * Currently, other than flushing active ostreams, these
- * functions does not interfere with outside memory. There
- * is still a residual risk that may be invalid ostream
- * pointers may be present, and may corrupt the memory
- * on the attempt to execute the flush() function.
- */
-
 namespace ns3 {
 namespace FatalImpl {
 
 /**
- * \ingroup fatalHandler
+ * \ingroup fatal
  * \param stream The stream to be flushed on abnormal exit.
  *
  * \brief Register a stream to be flushed on abnormal exit.
@@ -60,7 +41,7 @@
 void RegisterStream (std::ostream* stream);
 
 /**
- * \ingroup fatalHandler
+ * \ingroup fatal
  * \param stream The stream to be unregistered.
  *
  * \brief Unregister a stream for flushing on abnormal exit.
@@ -74,7 +55,7 @@
 void UnregisterStream (std::ostream* stream);
 
 /**
- * \ingroup fatalHandler
+ * \ingroup fatal
  *
  * \brief Flush all currently registered streams.
  *
diff -Naur ns-3.19/src/core/model/global-value.cc ns-3.20/src/core/model/global-value.cc
--- ns-3.19/src/core/model/global-value.cc	2014-06-17 10:34:00.588635503 -0700
+++ ns-3.20/src/core/model/global-value.cc	2014-06-17 10:33:13.917995777 -0700
@@ -31,8 +31,7 @@
 
 namespace ns3 {
 
-NS_LOG_COMPONENT_DEFINE ("GlobalValue")
-  ;
+NS_LOG_COMPONENT_DEFINE ("GlobalValue");
 
 GlobalValue::GlobalValue (std::string name, std::string help,
                           const AttributeValue &initialValue,
diff -Naur ns-3.19/src/core/model/global-value.h ns-3.20/src/core/model/global-value.h
--- ns-3.19/src/core/model/global-value.h	2014-06-17 10:34:00.589635496 -0700
+++ ns-3.20/src/core/model/global-value.h	2014-06-17 10:33:13.917995777 -0700
@@ -25,6 +25,7 @@
 #include "ptr.h"
 #include "attribute.h"
 
+class GlobalValueTestCase;
 
 namespace ns3 {
 
@@ -141,7 +142,7 @@
 
 
 private:
-  friend class GlobalValueTestCase;
+  friend class ::GlobalValueTestCase;
 
   static Vector *GetVector (void);
   void InitializeFromEnv (void);
diff -Naur ns-3.19/src/core/model/hash.cc ns-3.20/src/core/model/hash.cc
--- ns-3.19/src/core/model/hash.cc	2014-06-17 10:34:00.592635472 -0700
+++ ns-3.20/src/core/model/hash.cc	2014-06-17 10:33:13.920995753 -0700
@@ -24,8 +24,7 @@
 
 namespace ns3 {
 
-NS_LOG_COMPONENT_DEFINE ("Hash")
-  ;
+NS_LOG_COMPONENT_DEFINE ("Hash");
 
 Hasher::Hasher ()
 {
diff -Naur ns-3.19/src/core/model/hash-fnv.cc ns-3.20/src/core/model/hash-fnv.cc
--- ns-3.19/src/core/model/hash-fnv.cc	2014-06-17 10:34:00.589635496 -0700
+++ ns-3.20/src/core/model/hash-fnv.cc	2014-06-17 10:33:13.918995769 -0700
@@ -38,8 +38,7 @@
 
 namespace ns3 {
 
-NS_LOG_COMPONENT_DEFINE ("Hash-Fnv")
-  ;
+NS_LOG_COMPONENT_DEFINE ("Hash-Fnv");
 
 namespace Hash {
 
diff -Naur ns-3.19/src/core/model/hash-function.cc ns-3.20/src/core/model/hash-function.cc
--- ns-3.19/src/core/model/hash-function.cc	2014-06-17 10:34:00.590635488 -0700
+++ ns-3.20/src/core/model/hash-function.cc	2014-06-17 10:33:13.918995769 -0700
@@ -24,8 +24,7 @@
 
 namespace ns3 {
 
-NS_LOG_COMPONENT_DEFINE ("HashFunction")
-  ;
+NS_LOG_COMPONENT_DEFINE ("HashFunction");
 
 namespace Hash {
 
diff -Naur ns-3.19/src/core/model/hash.h ns-3.20/src/core/model/hash.h
--- ns-3.19/src/core/model/hash.h	2014-06-17 10:34:00.592635472 -0700
+++ ns-3.20/src/core/model/hash.h	2014-06-17 10:33:13.921995745 -0700
@@ -35,6 +35,8 @@
 /**
  * \ingroup core
  * \defgroup hash Hash Functions
+ *
+ *  \brief Generic Hash function interface
  */
 /**
  *  \ingroup hash
@@ -70,7 +72,7 @@
  *  offer \c unsigned.
  *
  *  Longer hashes require returning a byte buffer of some sort,
- *  but our \ref buffer class seems a bit overkill for this case.
+ *  but our \ref Buffer class seems a bit overkill for this case.
  *
  */
 class Hasher
diff -Naur ns-3.19/src/core/model/hash-murmur3.cc ns-3.20/src/core/model/hash-murmur3.cc
--- ns-3.19/src/core/model/hash-murmur3.cc	2014-06-17 10:34:00.591635480 -0700
+++ ns-3.20/src/core/model/hash-murmur3.cc	2014-06-17 10:33:13.919995761 -0700
@@ -36,8 +36,7 @@
 
 namespace ns3 {
 
-NS_LOG_COMPONENT_DEFINE ("Hash-Murmur3")
-  ;
+NS_LOG_COMPONENT_DEFINE ("Hash-Murmur3");
 
 namespace Hash {
 
diff -Naur ns-3.19/src/core/model/heap-scheduler.cc ns-3.20/src/core/model/heap-scheduler.cc
--- ns-3.19/src/core/model/heap-scheduler.cc	2014-06-17 10:34:00.592635472 -0700
+++ ns-3.20/src/core/model/heap-scheduler.cc	2014-06-17 10:33:13.921995745 -0700
@@ -29,8 +29,7 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (HeapScheduler)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (HeapScheduler);
 
 TypeId
 HeapScheduler::GetTypeId (void)
diff -Naur ns-3.19/src/core/model/int64x64-128.cc ns-3.20/src/core/model/int64x64-128.cc
--- ns-3.19/src/core/model/int64x64-128.cc	2014-06-17 10:34:00.593635465 -0700
+++ ns-3.20/src/core/model/int64x64-128.cc	2014-06-17 10:33:13.922995738 -0700
@@ -11,40 +11,40 @@
 
 namespace ns3 {
 
-#define OUTPUT_SIGN(sa,sb,ua,ub)                                        \
-  ({ bool negA, negB;                                                    \
-     negA = sa < 0;                                                      \
-     negB = sb < 0;                                                      \
-     ua = negA ? -sa : sa;                                                   \
-     ub = negB ? -sb : sb;                                                   \
-     (negA && !negB) || (!negA && negB); })
-
-
-#define MASK_LO ((((int128_t)1)<<64)-1)
-#define MASK_HI (~MASK_LO)
+static inline  
+bool
+output_sign (const int128_t sa,
+             const int128_t sb,
+             uint128_t & ua,
+             uint128_t & ub)
+{
+  bool negA = sa < 0;
+  bool negB = sb < 0;
+  ua = negA ? -sa : sa;
+  ub = negB ? -sb : sb;
+  return (negA && !negB) || (!negA && negB);
+}
 
 void
-int64x64_t::Mul (int64x64_t const &o)
+int64x64_t::Mul (const int64x64_t & o)
 {
-  bool negResult;
   uint128_t a, b;
-  negResult = OUTPUT_SIGN (_v, o._v, a, b);
-  int128_t result = Umul (a, b);
-  // add the sign to the result
-  result = negResult ? -result : result;
-  _v = result;
+  bool negative = output_sign (_v, o._v, a, b);
+  uint128_t result = Umul (a, b);
+  _v = negative ? -result : result;
 }
 
 uint128_t
-int64x64_t::Umul (uint128_t a, uint128_t b)
+int64x64_t::Umul (const uint128_t a, const uint128_t b)
 {
-  uint128_t aL = a & MASK_LO;
-  uint128_t bL = b & MASK_LO;
-  uint128_t aH = (a >> 64) & MASK_LO;
-  uint128_t bH = (b >> 64) & MASK_LO;
+  uint128_t aL = a & HP_MASK_LO;
+  uint128_t bL = b & HP_MASK_LO;
+  uint128_t aH = (a >> 64) & HP_MASK_LO;
+  uint128_t bH = (b >> 64) & HP_MASK_LO;
 
   uint128_t result;
-  uint128_t hiPart,loPart,midPart;
+  uint128_t hiPart, loPart, midPart;
+  uint128_t res1, res2;
 
   // Multiplying (a.h 2^64 + a.l) x (b.h 2^64 + b.l) =
   //			2^128 a.h b.h + 2^64*(a.h b.l+b.h a.l) + a.l b.l
@@ -53,53 +53,107 @@
   loPart = aL * bL;
   // compute the middle part 2^64*(a.h b.l+b.h a.l)
   midPart = aL * bH + aH * bL;
-  // truncate the low part
-  result = (loPart >> 64) + (midPart & MASK_LO);
   // compute the high part 2^128 a.h b.h
   hiPart = aH * bH;
-  // truncate the high part and only use the low part
-  result |= ((hiPart & MASK_LO) << 64) + (midPart & MASK_HI);
   // if the high part is not zero, put a warning
-  NS_ABORT_MSG_IF ((hiPart & MASK_HI) != 0,
+  NS_ABORT_MSG_IF ((hiPart & HP_MASK_HI) != 0,
                    "High precision 128 bits multiplication error: multiplication overflow.");
+  
+  // Adding 64-bit terms to get 128-bit results, with carries
+  res1 = loPart >> 64;
+  res2 = midPart & HP_MASK_LO;
+  result = res1 + res2;
+
+  res1 = midPart >> 64;
+  res2 = hiPart & HP_MASK_LO;
+  res1 += res2;
+  res1 <<= 64;
+
+  result += res1;
+
   return result;
 }
+
 void
-int64x64_t::Div (int64x64_t const &o)
+int64x64_t::Div (const int64x64_t & o)
 {
-  bool negResult;
   uint128_t a, b;
-  negResult = OUTPUT_SIGN (_v, o._v, a, b);
-  int128_t result = Divu (a, b);
-  result = negResult ? -result : result;
-  _v = result;
+  bool negative = output_sign (_v, o._v, a, b);
+  int128_t result = Udiv (a, b);
+  _v = negative ? -result : result;
 }
 
 uint128_t
-int64x64_t::Divu (uint128_t a, uint128_t b)
+int64x64_t::Udiv (const uint128_t a, const uint128_t b)
 {
-  uint128_t quo = a / b;
-  uint128_t rem = (a % b);
-  uint128_t result = quo << 64;
+  
+  uint128_t rem = a;
+  uint128_t den = b;
+  uint128_t quo = rem / den;
+  rem = rem % den;
+  uint128_t result = quo;
+
   // Now, manage the remainder
-  uint128_t tmp = rem >> 64;
-  uint128_t div;
-  if (tmp == 0)
+  const uint64_t DIGITS = 64;  // Number of fraction digits (bits) we need
+  const uint128_t ZERO = 0;
+  
+  NS_ASSERT_MSG (rem < den,
+                 "Remainder not less than divisor");
+  
+  uint64_t digis = 0;          // Number of digits we have already
+  uint64_t shift = 0;          // Number we are going to get this round
+  
+    // Skip trailing zeros in divisor
+  while ( (shift < DIGITS) && !(den & 0x1))
+    {
+      ++shift;
+      den >>= 1;
+    }
+  
+  while ( (digis < DIGITS) && (rem != ZERO) )
     {
-      rem = rem << 64;
-      div = b;
+      // Skip leading zeros in remainder
+      while ( (digis + shift < DIGITS) &&
+              !(rem & HP128_MASK_HI_BIT))
+        {      
+          ++shift;
+          rem <<= 1;
+        }
+
+      // Cast off denominator bits if:
+      //   Need more digits and
+      //     LSB is zero or 
+      //     rem < den
+      while ( (digis + shift < DIGITS) &&
+              ( !(den & 0x1) || (rem < den) ) )
+        {
+          ++shift;
+          den >>= 1;
+        }
+
+      // Do the division
+      quo = rem / den;
+      rem = rem % den;
+
+      // Add in the quotient as shift bits of the fraction
+      result <<= shift;
+      result += quo;
+
+      digis += shift;
+      shift = 0;
     }
-  else
+  // Did we run out of remainder?
+  if (digis < DIGITS)
     {
-      div = b >> 64;
+      shift = DIGITS - digis;
+      result <<= shift;
     }
-  quo = rem / div;
-  result = result + quo;
+  
   return result;
 }
 
 void 
-int64x64_t::MulByInvert (const int64x64_t &o)
+int64x64_t::MulByInvert (const int64x64_t & o)
 {
   bool negResult = _v < 0;
   uint128_t a = negResult ? -_v : _v;
@@ -107,30 +161,32 @@
 
   _v = negResult ? -result : result;
 }
+
 uint128_t
-int64x64_t::UmulByInvert (uint128_t a, uint128_t b)
+int64x64_t::UmulByInvert (const uint128_t a, const uint128_t b)
 {
   uint128_t result, ah, bh, al, bl;
   uint128_t hi, mid;
   ah = a >> 64;
   bh = b >> 64;
-  al = a & MASK_LO;
-  bl = b & MASK_LO;
+  al = a & HP_MASK_LO;
+  bl = b & HP_MASK_LO;
   hi = ah * bh;
   mid = ah * bl + al * bh;
   mid >>= 64;
   result = hi + mid;
   return result;
 }
+
 int64x64_t 
-int64x64_t::Invert (uint64_t v)
+int64x64_t::Invert (const uint64_t v)
 {
   NS_ASSERT (v > 1);
   uint128_t a;
   a = 1;
   a <<= 64;
   int64x64_t result;
-  result._v = Divu (a, v);
+  result._v = Udiv (a, v);
   int64x64_t tmp = int64x64_t (v, false);
   tmp.MulByInvert (result);
   if (tmp.GetHigh () != 1)
diff -Naur ns-3.19/src/core/model/int64x64-128.h ns-3.20/src/core/model/int64x64-128.h
--- ns-3.19/src/core/model/int64x64-128.h	2014-06-17 10:34:00.594635457 -0700
+++ ns-3.20/src/core/model/int64x64-128.h	2014-06-17 10:33:13.922995738 -0700
@@ -2,212 +2,404 @@
 #if !defined(INT64X64_128_H) && defined (INT64X64_USE_128) && !defined(PYTHON_SCAN)
 #define INT64X64_128_H
 
-#include "ns3/core-config.h"
 #include <stdint.h>
-#include <cmath>
+#include <cmath>  // pow
 
 #if defined(HAVE___UINT128_T) && !defined(HAVE_UINT128_T)
 typedef __uint128_t uint128_t;
 typedef __int128_t int128_t;
 #endif
 
-namespace ns3 {
 
-#define HP128_MAX_64 18446744073709551615.0
-#define HP128_MASK_LO ((((int128_t)1)<<64)-1)
+namespace ns3 {
 
+/**
+ * \internal
+ * The implementation documented here is based on native 128-bit integers.
+ */
 class int64x64_t
 {
+  /// uint128_t high bit (sign bit)
+  static const uint128_t   HP128_MASK_HI_BIT = (((int128_t)1)<<127);
+  /// Mask for fraction part
+  static const uint64_t    HP_MASK_LO = 0xffffffffffffffffULL;
+  /// Mask for sign + integer part
+  static const uint64_t    HP_MASK_HI = ~HP_MASK_LO;
+  /**
+   * Floating point value of HP_MASK_LO + 1
+   * We really want:
+   * \code
+   *   static const long double HP_MAX_64 = std:pow (2.0L, 64);
+   * \endcode
+   * but we can't call functions in const definitions,
+   * We could make this a static and initialize in int64x64-128.cc or
+   * int64x64.cc, but this requires handling static initialization order
+   * when most of the implementation is inline.  Instead, we resort to
+   * this define.
+   */
+#define HP_MAX_64    (std::pow (2.0L, 64))
+
 public:
+  /**
+   * Type tag for the underlying implementation.
+   *
+   * A few testcases are are sensitive to implementation,
+   * specifically the double implementation.  To handle this,
+   * we expose the underlying implementation type here.
+   */
+  enum impl_type {
+    int128_impl,  //!< Native int128_t implementation.
+    cairo_impl,   //!< cairo wideint implementation
+    ld_impl,      //!< long double implementation
+  };
+
+  /// Type tag for this implementation.
+  static const enum impl_type implementation = int128_impl;
+
+  /// Default constructor
   inline int64x64_t ()
-    : _v (0)
-  {}
-  inline int64x64_t (double value)
-  {
-    bool is_negative = value < 0;
-    value = is_negative ? -value : value;
-    double hi = std::floor (value);
-    double lo = (value - hi) * HP128_MAX_64;
-    _v = (int128_t)hi;
-    _v <<= 64;
-    _v += (int128_t)lo;
-    _v = is_negative ? -_v : _v;
-  }
-  inline int64x64_t (int v)
+    : _v (0)  {}
+  /**@{*/
+  /**
+   * Construct from a floating point value.
+   *
+   * \param [in] value floating value to represent
+   */
+  inline int64x64_t (const double value)
+  {
+    const int64x64_t tmp ((long double)value);
+    _v = tmp._v;
+  }
+  inline int64x64_t (const long double value)
+  {
+    const bool negative = value < 0;
+    const long double v = negative ? -value : value;
+
+    long double fhi;
+    long double flo = std::modf (v, &fhi);
+    // Add 0.5 to round, which improves the last count
+    // This breaks these tests:
+    //   TestSuite devices-mesh-dot11s-regression
+    //   TestSuite devices-mesh-flame-regression
+    //   TestSuite routing-aodv-regression
+    //   TestSuite routing-olsr-regression
+    // Setting round = 0; breaks:
+    //   TestSuite int64x64
+    const long double round = 0.5;
+    flo = flo * HP_MAX_64 + round;
+    int128_t hi = fhi;
+    const uint64_t lo = flo;
+    if (flo >= HP_MAX_64)
+      {
+	// conversion to uint64 rolled over
+	++hi;
+      }
+    _v = hi << 64;
+    _v |= lo;
+    _v = negative ? -_v : _v;
+  }
+  /**@}*/
+
+  /**@{*/
+  /**
+   * Construct from an integral type.
+   *
+   * \param [in] v integer value to represent
+   */
+  inline int64x64_t (const int v)
     : _v (v)
   {
     _v <<= 64;
   }
-  inline int64x64_t (long int v)
+  inline int64x64_t (const long int v)
     : _v (v) 
   {
     _v <<= 64;
   }
-  inline int64x64_t (long long int v)
+  inline int64x64_t (const long long int v)
     : _v (v) 
   {
     _v <<= 64;
   }
-  inline int64x64_t (unsigned int v)
+  inline int64x64_t (const unsigned int v)
     : _v (v)
   {
     _v <<= 64;
   }
-  inline int64x64_t (unsigned long int v)
+  inline int64x64_t (const unsigned long int v)
     : _v (v) 
   {
     _v <<= 64;
   }
-  inline int64x64_t (unsigned long long int v)
+  inline int64x64_t (const unsigned long long int v)
     : _v (v) 
   {
     _v <<= 64;
   }
-  explicit inline int64x64_t (int64_t hi, uint64_t lo)
-  {
-    bool is_negative = hi<0;
-    _v = is_negative ? -hi : hi;
-    _v <<= 64;
-    _v += lo;
-    _v = is_negative ? -_v : _v;
-  }
-
-  inline int64x64_t (const int64x64_t &o)
+  /**@}*/
+  /**
+   * Construct from explicit high and low values.
+   *
+   * \param [in] hi Integer portion.
+   * \param [in] lo Fractional portion, already scaled to HP_MAX_64.
+   */
+  explicit inline int64x64_t (const int64_t hi, const uint64_t lo)
+  {
+    _v = (int128_t)hi << 64;
+    _v |= lo;
+  }
+
+  /**
+   * Copy constructor.
+   *
+   * \param [in] o Value to copy.
+   */
+  inline int64x64_t (const int64x64_t & o)
     : _v (o._v) {}
-  inline int64x64_t &operator = (const int64x64_t &o)
+  /**
+   * Assignment.
+   *
+   * \param [in] o Value to assign to this int64x64_t.
+   */
+  inline int64x64_t & operator = (const int64x64_t & o)
   {
     _v = o._v;
     return *this;
   }
 
+  /**
+   * Get this value as a double.
+   *
+   * \return This value in floating form.
+   */
   inline double GetDouble (void) const
   {
-    bool is_negative = _v < 0;
-    uint128_t value = is_negative ? -_v : _v;
-    uint64_t hi = value >> 64;
-    uint64_t lo = value;
-    double flo = lo;
-    flo /= HP128_MAX_64;
-    double retval = hi;
+    const bool negative = _v < 0;
+    const uint128_t value = negative ? -_v : _v;
+    const long double fhi = value >> 64;
+    const long double flo = (value & HP_MASK_LO) / HP_MAX_64;
+    long double retval = fhi;
     retval += flo;
-    retval = is_negative ? -retval : retval;
+    retval = negative ? -retval : retval;
     return retval;
   }
+  /**
+   * Get the integer portion.
+   *
+   * \return The integer portion of this value.
+   */
   inline int64_t GetHigh (void) const
   {
-    bool negative = _v < 0;
-    int128_t v = negative ? -_v : _v;
-    v >>= 64;
-    int64_t retval = v;
-    return negative ? -retval : retval;
+    const int128_t retval = _v >> 64;
+    return retval;
   }
+  /**
+   * Get the fractional portion of this value, unscaled.
+   *
+   * \return The fractional portion, unscaled, as an integer.
+   */
   inline uint64_t GetLow (void) const
   {
-    bool negative = _v < 0;
-    int128_t v = negative ? -_v : _v;
-    int128_t low = v & HP128_MASK_LO;
-    uint64_t retval = low;
+    const uint128_t retval = _v & HP_MASK_LO;
     return retval;
   }
-#undef HP128_MAX_64
-#undef HP128_MASK_LO
 
-  void MulByInvert (const int64x64_t &o);
-
-  static int64x64_t Invert (uint64_t v);
+  /**
+   * Multiply this value by a Q0.128 value, presumably representing an inverse,
+   * completing a division operation.
+   *
+   * \param [in] o The inverse operand.
+   *
+   * \see Invert
+   */
+  void MulByInvert (const int64x64_t & o);
+
+  /**
+   * Compute the inverse of an integer value.
+   *
+   * Ordinary division by an integer would be limited to 64 bits of precsion.
+   * Instead, we multiply by the 128-bit inverse of the divisor.
+   * This function computes the inverse to 128-bit precision.
+   * MulByInvert() then completes the division.
+   *
+   * (Really this should be a separate type representing Q0.128.)
+   *
+   * \param [in] v The value to compute the inverse of.
+   * \return A Q0.128 representation of the inverse.
+   */
+  static int64x64_t Invert (const uint64_t v);
 
 private:
-  friend bool operator == (const int64x64_t &lhs, const int64x64_t &rhs);
-  friend bool operator != (const int64x64_t &lhs, const int64x64_t &rhs);
-  friend bool operator <= (const int64x64_t &lhs, const int64x64_t &rhs);
-  friend bool operator >= (const int64x64_t &lhs, const int64x64_t &rhs);
-  friend bool operator < (const int64x64_t &lhs, const int64x64_t &rhs);
-  friend bool operator > (const int64x64_t &lhs, const int64x64_t &rhs);
-  friend int64x64_t &operator += (int64x64_t &lhs, const int64x64_t &rhs);
-  friend int64x64_t &operator -= (int64x64_t &lhs, const int64x64_t &rhs);
-  friend int64x64_t &operator *= (int64x64_t &lhs, const int64x64_t &rhs);
-  friend int64x64_t &operator /= (int64x64_t &lhs, const int64x64_t &rhs);
-  friend int64x64_t operator + (const int64x64_t &lhs, const int64x64_t &rhs);
-  friend int64x64_t operator - (const int64x64_t &lhs, const int64x64_t &rhs);
-  friend int64x64_t operator * (const int64x64_t &lhs, const int64x64_t &rhs);
-  friend int64x64_t operator / (const int64x64_t &lhs, const int64x64_t &rhs);
-  friend int64x64_t operator + (const int64x64_t &lhs);
-  friend int64x64_t operator - (const int64x64_t &lhs);
-  friend int64x64_t operator ! (const int64x64_t &lhs);
-  void Mul (const int64x64_t &o);
-  void Div (const int64x64_t &o);
-  static uint128_t UmulByInvert (uint128_t a, uint128_t b);
-  static uint128_t Umul (uint128_t a, uint128_t b);
-  static uint128_t Divu (uint128_t a, uint128_t b);
-  inline int64x64_t (int128_t v)
+  friend bool         operator == (const int64x64_t & lhs, const int64x64_t & rhs);
+
+  friend bool         operator <  (const int64x64_t & lhs, const int64x64_t & rhs);
+  friend bool         operator >  (const int64x64_t & lhs, const int64x64_t & rhs);
+  
+  friend int64x64_t & operator += (      int64x64_t & lhs, const int64x64_t & rhs);
+  friend int64x64_t & operator -= (      int64x64_t & lhs, const int64x64_t & rhs);
+  friend int64x64_t & operator *= (      int64x64_t & lhs, const int64x64_t & rhs);
+  friend int64x64_t & operator /= (      int64x64_t & lhs, const int64x64_t & rhs);
+
+  friend int64x64_t   operator -  (const int64x64_t & lhs);
+  friend int64x64_t   operator !  (const int64x64_t & lhs);
+
+  /**
+   * Implement `*=`.
+   *
+   * \param [in] o The other factor.
+   */   
+  void Mul (const int64x64_t & o);
+  /**
+   * Implement `/=`.
+   *
+   * \param [in] o The divisor.
+   */
+  void Div (const int64x64_t & o);
+  /**
+   * Unsigned multiplication of Q64.64 values.
+   *
+   * Mathematically this should produce a Q128.128 value;
+   * we keep the central 128 bits, representing the Q64.64 result.
+   * We assert on integer overflow beyond the 64-bit integer portion.
+   *
+   * \param [in] a First factor.
+   * \param [in] b Second factor.
+   * \return The Q64.64 product.
+   *
+   * \internal
+   *
+   * It might be tempting to just use \pname{a} `*` \pname{b}
+   * and be done with it, but it's not that simple.  With \pname{a}
+   * and \pname{b} as 128-bit integers, \pname{a} `*` \pname{b}
+   * mathematically produces a 256-bit result, which the computer
+   * truncates to the lowest 128 bits.  In our case, where \pname{a}
+   * and \pname{b} are interpreted as Q64.64 fixed point numbers,
+   * the multiplication mathematically produces a Q128.128 fixed point number.
+   * We want the middle 128 bits from the result, truncating both the
+   * high and low 64 bits.  To achieve this, we carry out the multiplication
+   * explicitly with 64-bit operands and 128-bit intermediate results.
+   */
+  static uint128_t Umul         (const uint128_t a, const uint128_t b);
+  /**
+   * Unsigned division of Q64.64 values.
+   *
+   * \param [in] a Numerator.
+   * \param [in] b Denominator.
+   * \return The Q64.64 representation of `a / b`
+   */
+  static uint128_t Udiv         (const uint128_t a, const uint128_t b);
+  /**
+   * Unsigned multiplication of Q64.64 and Q0.128 values.
+   *
+   * \param [in] a The numerator, a Q64.64 value.
+   * \param [in] b The inverse of the denominator, a Q0.128 value
+   * \return The product `a * b`, representing the ration `a / b^-1`
+   *
+   * \see Invert
+   */
+  static uint128_t UmulByInvert (const uint128_t a, const uint128_t b);
+
+  /**
+   * Construct from an integral type.
+   *
+   * \param [in] v integer value to represent
+   */
+  inline int64x64_t (const int128_t v)
     : _v (v) {}
 
-  int128_t _v;
-};
+  int128_t _v;  //!< The Q64.64 value.
 
-inline bool operator == (const int64x64_t &lhs, const int64x64_t &rhs)
-{
-  return lhs._v == rhs._v;
-}
+};  // class int64x64_t
 
-inline bool operator != (const int64x64_t &lhs, const int64x64_t &rhs)
-{
-  return lhs._v != rhs._v;
-}
 
-inline bool operator < (const int64x64_t &lhs, const int64x64_t &rhs)
-{
-  return lhs._v < rhs._v;
-}
-inline bool operator <= (const int64x64_t &lhs, const int64x64_t &rhs)
+/**
+ * \ingroup highprec
+ * Equality operator.
+ */
+inline bool operator == (const int64x64_t & lhs, const int64x64_t & rhs)
 {
-  return lhs._v <= rhs._v;
+  return lhs._v == rhs._v;
 }
-
-inline bool operator >= (const int64x64_t &lhs, const int64x64_t &rhs)
+/**
+ * \ingroup highprec
+ * Less than operator
+ */
+inline bool operator < (const int64x64_t & lhs, const int64x64_t & rhs)
 {
-  return lhs._v >= rhs._v;
+  return lhs._v < rhs._v;
 }
-inline bool operator > (const int64x64_t &lhs, const int64x64_t &rhs)
+/**
+ * \ingroup highprec
+ * Greater operator
+ */
+inline bool operator > (const int64x64_t & lhs, const int64x64_t & rhs)
 {
   return lhs._v > rhs._v;
 }
-inline int64x64_t &operator += (int64x64_t &lhs, const int64x64_t &rhs)
+
+/**
+ * \ingroup highprec
+ * Compound addition operator
+ */
+inline int64x64_t & operator += (int64x64_t & lhs, const int64x64_t & rhs)
 {
   lhs._v += rhs._v;
   return lhs;
 }
-inline int64x64_t &operator -= (int64x64_t &lhs, const int64x64_t &rhs)
+/**
+ * \ingroup highprec
+ * Compound subtraction operator
+ */
+inline int64x64_t & operator -= (int64x64_t & lhs, const int64x64_t & rhs)
 {
   lhs._v -= rhs._v;
   return lhs;
 }
-inline int64x64_t &operator *= (int64x64_t &lhs, const int64x64_t &rhs)
+/**
+ * \ingroup highprec
+ * Compound multiplication operator
+ */
+inline int64x64_t & operator *= (int64x64_t & lhs, const int64x64_t & rhs)
 {
   lhs.Mul (rhs);
   return lhs;
 }
-inline int64x64_t &operator /= (int64x64_t &lhs, const int64x64_t &rhs)
+/**
+ * \ingroup highprec
+ * Compound division operator
+ */
+inline int64x64_t & operator /= (int64x64_t & lhs, const int64x64_t & rhs)
 {
   lhs.Div (rhs);
   return lhs;
 }
 
-inline int64x64_t operator + (const int64x64_t &lhs)
+/**
+ * \ingroup highprec
+ * Unary plus operator
+ */
+inline int64x64_t operator + (const int64x64_t & lhs)
 {
   return lhs;
 }
-
-inline int64x64_t operator - (const int64x64_t &lhs)
+/**
+ * \ingroup highprec
+ * Unary negation operator (change sign operator)
+ */
+inline int64x64_t operator - (const int64x64_t & lhs)
 {
   return int64x64_t (-lhs._v);
 }
-
-inline int64x64_t operator ! (const int64x64_t &lhs)
+/**
+ * \ingroup highprec
+ * Logical not operator
+ */
+inline int64x64_t operator ! (const int64x64_t & lhs)
 {
   return int64x64_t (!lhs._v);
 }
 
+
 } // namespace ns3
 
 #endif /* INT64X64_128_H */
diff -Naur ns-3.19/src/core/model/int64x64-cairo.cc ns-3.20/src/core/model/int64x64-cairo.cc
--- ns-3.19/src/core/model/int64x64-cairo.cc	2014-06-17 10:34:00.594635457 -0700
+++ ns-3.20/src/core/model/int64x64-cairo.cc	2014-06-17 10:33:13.923995730 -0700
@@ -17,13 +17,13 @@
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
-#include "int64x64-cairo.h"
 #include "test.h"
 #include "abort.h"
 #include "assert.h"
 #include "log.h"
 #include <cmath>
 #include <iostream>
+#include "int64x64-cairo.h"
 
 // Note:  Logging in this file is largely avoided due to the
 // number of calls that are made to these functions and the possibility
@@ -31,38 +31,45 @@
 
 NS_LOG_COMPONENT_DEFINE ("int64x64-cairo");
 
+// Include directly to allow optimizations within this compilation unit.
+extern "C" {
+#include "cairo-wideint.c"
+}
+
+
 namespace ns3 {
 
-#define OUTPUT_SIGN(sa,sb,ua,ub)                                        \
-  ({ bool negA, negB;                                                    \
-     negA = _cairo_int128_negative (sa);                                   \
-     negB = _cairo_int128_negative (sb);                                   \
-     ua = _cairo_int128_to_uint128 (sa);                                   \
-     ub = _cairo_int128_to_uint128 (sb);                                   \
-     ua = negA ? _cairo_uint128_negate (ua) : ua;                          \
-     ub = negB ? _cairo_uint128_negate (ub) : ub;                          \
-     (negA && !negB) || (!negA && negB); })
+static inline  
+bool
+output_sign (const cairo_int128_t sa,
+             const cairo_int128_t sb,
+             cairo_uint128_t & ua,
+             cairo_uint128_t & ub)
+{
+  bool negA = _cairo_int128_negative (sa);
+  bool negB = _cairo_int128_negative (sb);
+  ua = _cairo_int128_to_uint128 (sa);
+  ub = _cairo_int128_to_uint128 (sb);
+  ua = negA ? _cairo_uint128_negate (ua) : ua;
+  ub = negB ? _cairo_uint128_negate (ub) : ub;
+  return (negA && !negB) || (!negA && negB);
+}
 
 void
-int64x64_t::Mul (int64x64_t const &o)
+int64x64_t::Mul (const int64x64_t & o)
 {
-  cairo_uint128_t a, b, result;
-  bool sign = OUTPUT_SIGN (_v, o._v, a, b);
-  result = Umul (a, b);
+  cairo_uint128_t a, b;
+  bool sign = output_sign (_v, o._v, a, b);
+  cairo_uint128_t result = Umul (a, b);
   _v = sign ? _cairo_uint128_negate (result) : result;
 }
 
-/**
- * this function multiplies two 128 bits fractions considering
- * the high 64 bits as the integer part and the low 64 bits
- * as the fractional part. It takes into account the sign
- * of the operands to produce a signed 128 bits result.
- */
 cairo_uint128_t
-int64x64_t::Umul (cairo_uint128_t a, cairo_uint128_t b)
+int64x64_t::Umul (const cairo_uint128_t a, const cairo_uint128_t b)
 {
   cairo_uint128_t result;
-  cairo_uint128_t hiPart,loPart,midPart;
+  cairo_uint128_t hiPart, loPart, midPart;
+  cairo_uint128_t res1, res2;
 
   // Multiplying (a.h 2^64 + a.l) x (b.h 2^64 + b.l) =
   //			2^128 a.h b.h + 2^64*(a.h b.l+b.h a.l) + a.l b.l
@@ -72,62 +79,114 @@
   // compute the middle part 2^64*(a.h b.l+b.h a.l)
   midPart = _cairo_uint128_add (_cairo_uint64x64_128_mul (a.lo, b.hi),
                                 _cairo_uint64x64_128_mul (a.hi, b.lo));
-  // truncate the low part
-  result.lo = _cairo_uint64_add (loPart.hi,midPart.lo);
   // compute the high part 2^128 a.h b.h
   hiPart = _cairo_uint64x64_128_mul (a.hi, b.hi);
-  // truncate the high part and only use the low part
-  result.hi = _cairo_uint64_add (hiPart.lo,midPart.hi);
   // if the high part is not zero, put a warning
   NS_ABORT_MSG_IF (hiPart.hi != 0,
                    "High precision 128 bits multiplication error: multiplication overflow.");
+
+  // Adding 64-bit terms to get 128-bit results, with carries
+  res1 = _cairo_uint64_to_uint128 (loPart.hi);
+  res2 = _cairo_uint64_to_uint128 (midPart.lo);
+  result  = _cairo_uint128_add (res1, res2);
+
+  res1 = _cairo_uint64_to_uint128 (midPart.hi);
+  res2 = _cairo_uint64_to_uint128 (hiPart.lo);
+  res1 = _cairo_uint128_add (res1, res2);
+  res1 = _cairo_uint128_lsl (res1, 64);
+  
+  result  = _cairo_uint128_add (result, res1);
+  
   return result;
 }
 
 void
-int64x64_t::Div (int64x64_t const &o)
+int64x64_t::Div (const int64x64_t & o)
 {
-  cairo_uint128_t a, b, result;
-  bool sign = OUTPUT_SIGN (_v, o._v, a, b);
-  result = Udiv (a, b);
+  cairo_uint128_t a, b;
+  bool sign = output_sign (_v, o._v, a, b);
+  cairo_uint128_t result = Udiv (a, b);
   _v = sign ? _cairo_uint128_negate (result) : result;
 }
 
 cairo_uint128_t
-int64x64_t::Udiv (cairo_uint128_t a, cairo_uint128_t b)
+int64x64_t::Udiv (const cairo_uint128_t a, const cairo_uint128_t b)
 {
+  cairo_uint128_t den = b;
   cairo_uquorem128_t qr = _cairo_uint128_divrem (a, b);
-  cairo_uint128_t result = _cairo_uint128_lsl (qr.quo, 64);
+  cairo_uint128_t result = qr.quo;
+  cairo_uint128_t rem = qr.rem;
+
   // Now, manage the remainder
-  cairo_uint128_t tmp = _cairo_uint128_rsl (qr.rem, 64);
-  cairo_uint128_t zero = _cairo_uint64_to_uint128 (0);
-  cairo_uint128_t rem, div;
-  if (_cairo_uint128_eq (tmp, zero))
+  const uint64_t DIGITS = 64;  // Number of fraction digits (bits) we need
+  const cairo_uint128_t ZERO = _cairo_uint32_to_uint128 ((uint32_t)0);
+  
+  NS_ASSERT_MSG (_cairo_uint128_lt (rem, den),
+                 "Remainder not less than divisor");
+  
+  uint64_t digis = 0;          // Number of digits we have already
+  uint64_t shift = 0;          // Number we are going to get this round
+  
+    // Skip trailing zeros in divisor
+  while ( (shift < DIGITS) && !(den.lo & 0x1))
     {
-      rem = _cairo_uint128_lsl (qr.rem, 64);
-      div = b;
+      ++shift;
+      den = _cairo_uint128_rsl (den, 1);
     }
-  else
+  
+  while ( (digis < DIGITS) && !(_cairo_uint128_eq(rem, ZERO)) )
     {
+      // Skip leading zeros in remainder
+      while ( (digis + shift < DIGITS) &&
+              !(rem.hi & HPCAIRO_MASK_HI_BIT) )
+        {      
+          ++shift;
+          rem = _cairo_int128_lsl (rem, 1);
+        }
+
+      // Cast off denominator bits if:
+      //   Need more digits and
+      //     LSB is zero or 
+      //     rem < den
+      while ( (digis + shift < DIGITS) &&
+              ( !(den.lo & 0x1) || _cairo_uint128_lt (rem, den) ) )
+        {
+          ++shift;
+          den = _cairo_uint128_rsl (den, 1);
+        }
+
+      // Do the division
+      qr = _cairo_uint128_divrem (rem, den);
+
+      // Add in the quotient as shift bits of the fraction
+      result = _cairo_uint128_lsl (result, shift);
+      result = _cairo_uint128_add (result, qr.quo);
       rem = qr.rem;
-      div = _cairo_uint128_rsl (b, 64);
+      digis += shift;
+      shift = 0;
     }
-  qr = _cairo_uint128_divrem (rem, div);
-  result = _cairo_uint128_add (result, qr.quo);
+  // Did we run out of remainder?
+  if (digis < DIGITS)
+    {
+      shift = DIGITS - digis;
+      result = _cairo_uint128_lsl (result, shift);
+    }
+  
   return result;
 }
 
 void 
-int64x64_t::MulByInvert (const int64x64_t &o)
+int64x64_t::MulByInvert (const int64x64_t & o)
 {
-  bool negResult = _cairo_int128_negative (_v);
-  cairo_uint128_t a = negResult ? _cairo_int128_negate (_v) : _v;
+  bool sign = _cairo_int128_negative (_v);
+  cairo_uint128_t a = sign ? _cairo_int128_negate (_v) : _v;
   cairo_uint128_t result = UmulByInvert (a, o._v);
 
-  _v = negResult ? _cairo_int128_negate (result) : result;
+  _v = sign ? _cairo_int128_negate (result) : result;
 }
+  
 cairo_uint128_t
-int64x64_t::UmulByInvert (cairo_uint128_t a, cairo_uint128_t b)
+int64x64_t::UmulByInvert (const cairo_uint128_t a, const cairo_uint128_t b)
 {
   cairo_uint128_t result;
   cairo_uint128_t hi, mid;
@@ -139,8 +198,9 @@
   result = _cairo_uint128_add (hi,mid);
   return result;
 }
+
 int64x64_t 
-int64x64_t::Invert (uint64_t v)
+int64x64_t::Invert (const uint64_t v)
 {
   NS_ASSERT (v > 1);
   cairo_uint128_t a, factor;
@@ -162,8 +222,3 @@
 
 
 } // namespace ns3
-
-// include directly to allow optimizations within the compilation unit.
-extern "C" {
-#include "cairo-wideint.c"
-}
diff -Naur ns-3.19/src/core/model/int64x64-cairo.h ns-3.20/src/core/model/int64x64-cairo.h
--- ns-3.19/src/core/model/int64x64-cairo.h	2014-06-17 10:34:00.594635457 -0700
+++ ns-3.20/src/core/model/int64x64-cairo.h	2014-06-17 10:33:13.924995722 -0700
@@ -2,254 +2,393 @@
 #if !defined(INT64X64_CAIRO_H) && defined (INT64X64_USE_CAIRO) && !defined(PYTHON_SCAN)
 #define INT64X64_CAIRO_H
 
-#include <stdint.h>
-#include <cmath>
+#include <cmath>  // pow
 
 #include "cairo-wideint-private.h"
 
-#ifdef __i386__
-// this assembly code does not appear to work right yet.
-#define noInt64x64_CAIRO_ASM 1
-#endif
 
 namespace ns3 {
 
+/**
+ * \internal
+ * The implementation documented here uses cairo 128-bit integers.
+ */
 class int64x64_t
 {
+  /// High bit of fractional part
+  static const uint64_t    HPCAIRO_MASK_HI_BIT = (((uint64_t)1)<<63);
+  /// Mask for fraction part
+  static const uint64_t    HP_MASK_LO = 0xffffffffffffffffULL;
+  /**
+   * Floating point value of HP_MASK_LO + 1
+   * We really want:
+   * \code
+   *   static const long double HP_MAX_64 = std:pow (2.0L, 64);
+   * \endcode
+   * but we can't call functions in const definitions,
+   * We could make this a static and initialize in int64x64-cairo.cc or
+   * int64x64.cc, but this requires handling static initialization order
+   * when most of the implementation is inline.  Instead, we resort to
+   * this define.
+   */
+#define HP_MAX_64    (std::pow (2.0L, 64))
+
 public:
+  /**
+   * Type tag for the underlying implementation.
+   *
+   * A few testcases are sensitive to implementation,
+   * specifically the double implementation.  To handle this,
+   * we expose the underlying implementation type here.
+   */
+  enum impl_type {
+    int128_impl,  //!< Native int128_t implementation.
+    cairo_impl,   //!< cairo wideint implementation
+    ld_impl,      //!< long double implementation
+  };
+
+  /// Type tag for this implementation.
+  static const enum impl_type implementation = cairo_impl;
+
+  /// Default constructor
   inline int64x64_t ()
   {
     _v.hi = 0;
     _v.lo = 0;
   }
-  inline int64x64_t (double value)
-  {
-#define HPCAIRO_MAX_64 18446744073709551615.0
-    double fhi = std::floor (value);
-    int64_t hi = lround (fhi);
-    uint64_t lo = (uint64_t)((value - fhi) * HPCAIRO_MAX_64);
+  /**@{*/
+  /**
+   * Construct from a floating point value.
+   *
+   * \param [in] value floating value to represent
+   */
+  inline int64x64_t (const double value)
+  {
+    const int64x64_t tmp ((long double)value);
+    _v = tmp._v;
+  }
+  inline int64x64_t (const long double value)
+  {
+    const bool negative = value < 0;
+    const long double v = negative ? -value : value;
+
+    long double fhi;
+    long double flo = std::modf (v, &fhi);
+    // Add 0.5 to round, which improves the last count
+    // This breaks these tests:
+    //   TestSuite devices-mesh-dot11s-regression
+    //   TestSuite devices-mesh-flame-regression
+    //   TestSuite routing-aodv-regression
+    //   TestSuite routing-olsr-regression
+    // Setting round = 0; breaks:
+    //   TestSuite int64x64
+    const long double round = 0.5;
+    flo = flo * HP_MAX_64 + round;
+    cairo_int64_t  hi = fhi;
+    const cairo_uint64_t lo = flo;
+    if (flo >= HP_MAX_64)
+      {
+	// conversion to uint64 rolled over
+	++hi;
+      }
     _v.hi = hi;
     _v.lo = lo;
-#undef HPCAIRO_MAX_64
+    _v = negative ? _cairo_int128_negate (_v) : _v;
   }
-  inline int64x64_t (int v)
+  /**@}*/
+
+  /**@{*/
+  /**
+   * Construct from an integral type.
+   *
+   * \param [in] v integer value to represent
+   */
+  inline int64x64_t (const int v)
   {
     _v.hi = v;
     _v.lo = 0;
   }
-  inline int64x64_t (long int v)
+  inline int64x64_t (const long int v)
   {
     _v.hi = v;
     _v.lo = 0;
   }
-  inline int64x64_t (long long int v)
+  inline int64x64_t (const long long int v)
   {
     _v.hi = v;
     _v.lo = 0;
   }
-  inline int64x64_t (unsigned int v)
+  inline int64x64_t (const unsigned int v)
   {
     _v.hi = v;
     _v.lo = 0;
   }
-  inline int64x64_t (unsigned long int v)
+  inline int64x64_t (const unsigned long int v)
   {
     _v.hi = v;
     _v.lo = 0;
   }
-  inline int64x64_t (unsigned long long int v)
+  inline int64x64_t (const unsigned long long int v)
   {
     _v.hi = v;
     _v.lo = 0;
   }
-  inline int64x64_t (int64_t hi, uint64_t lo)
+  /**@}*/
+  /**
+   * Construct from explicit high and low values.
+   *
+   * \param [in] hi Integer portion.
+   * \param [in] lo Fractional portion, already scaled to HP_MAX_64.
+   */
+  explicit inline int64x64_t (const int64_t hi, const uint64_t lo)
   {
     _v.hi = hi;
     _v.lo = lo;
   }
 
-  inline int64x64_t (const int64x64_t &o)
+  /**
+   * Copy constructor.
+   *
+   * \param [in] o Value to copy.
+   */
+  inline int64x64_t (const int64x64_t & o)
     : _v (o._v) {}
-  inline int64x64_t &operator = (const int64x64_t &o)
+  /**
+   * Assignment.
+   *
+   * \param [in] o Value to assign to this int64x64_t.
+   */
+  inline int64x64_t & operator = (const int64x64_t & o)
   {
     _v = o._v;
     return *this;
   }
 
+  /**
+   * Get this value as a double.
+   *
+   * \return This value in floating form.
+   */
   inline double GetDouble (void) const
   {
-#define HPCAIRO_MAX_64 18446744073709551615.0
-    bool is_negative = IsNegative ();
-    cairo_int128_t value = is_negative ? _cairo_int128_negate (_v) : _v;
-    double flo = value.lo;
-    flo /= HPCAIRO_MAX_64;
-    double retval = value.hi;
+    const bool negative = _cairo_int128_negative (_v);
+    const cairo_int128_t value = negative ? _cairo_int128_negate (_v) : _v;
+    const long double fhi = value.hi;
+    const long double flo = value.lo / HP_MAX_64;
+    long double retval = fhi;
     retval += flo;
-    retval = is_negative ? -retval : retval;
+    retval = negative ? -retval : retval;
     return retval;
-#undef HPCAIRO_MAX_64
   }
+  /**
+   * Get the integer portion.
+   *
+   * \return The integer portion of this value.
+   */
   inline int64_t GetHigh (void) const
   {
     return (int64_t)_v.hi;
   }
+  /**
+   * Get the fractional portion of this value, unscaled.
+   *
+   * \return The fractional portion, unscaled, as an integer.
+   */
   inline uint64_t GetLow (void) const
   {
     return _v.lo;
   }
 
-  void MulByInvert (const int64x64_t &o);
-
-  static int64x64_t Invert (uint64_t v);
+  /**
+   * Multiply this value by a Q0.128 value, presumably representing an inverse,
+   * completing a division operation.
+   *
+   * \param [in] o The inverse operand.
+   *
+   * \see Invert
+   */
+  void MulByInvert (const int64x64_t & o);
+
+  /**
+   * Compute the inverse of an integer value.
+   *
+   * Ordinary division by an integer would be limited to 64 bits of precsion.
+   * Instead, we multiply by the 128-bit inverse of the divisor.
+   * This function computes the inverse to 128-bit precision.
+   * MulByInvert() then completes the division.
+   *
+   * (Really this should be a separate type representing Q0.128.)
+   *
+   * \param [in] v The value to compute the inverse of.
+   * \return A Q0.128 representation of the inverse.
+   */
+  static int64x64_t Invert (const uint64_t v);
 
 private:
-  friend bool operator == (const int64x64_t &lhs, const int64x64_t &rhs);
-  friend bool operator != (const int64x64_t &lhs, const int64x64_t &rhs);
-  friend bool operator <= (const int64x64_t &lhs, const int64x64_t &rhs);
-  friend bool operator >= (const int64x64_t &lhs, const int64x64_t &rhs);
-  friend bool operator < (const int64x64_t &lhs, const int64x64_t &rhs);
-  friend bool operator > (const int64x64_t &lhs, const int64x64_t &rhs);
-  friend int64x64_t &operator += (int64x64_t &lhs, const int64x64_t &rhs);
-  friend int64x64_t &operator -= (int64x64_t &lhs, const int64x64_t &rhs);
-  friend int64x64_t &operator *= (int64x64_t &lhs, const int64x64_t &rhs);
-  friend int64x64_t &operator /= (int64x64_t &lhs, const int64x64_t &rhs);
-  friend int64x64_t operator + (const int64x64_t &lhs);
-  friend int64x64_t operator - (const int64x64_t &lhs);
-  friend int64x64_t operator ! (const int64x64_t &lhs);
-  void Mul (const int64x64_t &o);
-  void Div (const int64x64_t &o);
-  static cairo_uint128_t  Umul (cairo_uint128_t a, cairo_uint128_t b);
-  static cairo_uint128_t Udiv (cairo_uint128_t a, cairo_uint128_t b);
-  static cairo_uint128_t UmulByInvert (cairo_uint128_t a, cairo_uint128_t b);
-  inline bool IsNegative (void) const
-  {
-    int64_t hi = _v.hi;
-    return hi < 0;
-  }
-  inline void Negate (void)
-  {
-    _v.lo = ~_v.lo;
-    _v.hi = ~_v.hi;
-    if (++_v.lo == 0)
-      {
-        ++_v.hi;
-      }
-  }
-  inline int Compare (const int64x64_t &o) const
-  {
-    int status;
-    int64x64_t tmp = *this;
-    tmp -= o;
-    status = (((int64_t)(tmp)._v.hi) < 0) ? -1 :
-      (((tmp)._v.hi == 0 && (tmp)._v.lo == 0)) ? 0 : 1;
-    return status;
-  }
-  cairo_int128_t _v;
-};
-
-inline bool operator == (const int64x64_t &lhs, const int64x64_t &rhs)
-{
-  return lhs._v.hi == rhs._v.hi && lhs._v.lo == lhs._v.lo;
-}
+  friend bool         operator == (const int64x64_t & lhs, const int64x64_t & rhs);
 
-inline bool operator != (const int64x64_t &lhs, const int64x64_t &rhs)
+  friend bool         operator <  (const int64x64_t & lhs, const int64x64_t & rhs);
+  friend bool         operator >  (const int64x64_t & lhs, const int64x64_t & rhs);
+  
+  friend int64x64_t & operator += (      int64x64_t & lhs, const int64x64_t & rhs);
+  friend int64x64_t & operator -= (      int64x64_t & lhs, const int64x64_t & rhs);
+  friend int64x64_t & operator *= (      int64x64_t & lhs, const int64x64_t & rhs);
+  friend int64x64_t & operator /= (      int64x64_t & lhs, const int64x64_t & rhs);
+
+  friend int64x64_t   operator -  (const int64x64_t & lhs);
+  friend int64x64_t   operator !  (const int64x64_t & lhs);
+
+  /**
+   * Implement `*=`.
+   *
+   * \param [in] o The other factor.
+   */   
+  void Mul (const int64x64_t & o);
+  /**
+   * Implement `/=`.
+   *
+   * \param [in] o The divisor.
+   */
+  void Div (const int64x64_t & o);
+  /**
+   * Unsigned multiplication of Q64.64 values.
+   *
+   * Mathematically this should produce a Q128.128 value;
+   * we keep the central 128 bits, representing the Q64.64 result.
+   * We assert on integer overflow beyond the 64-bit integer portion.
+   *
+   * \param [in] a First factor.
+   * \param [in] b Second factor.
+   * \return The Q64.64 product.
+   *
+   * \internal
+   *
+   * It might be tempting to just use \pname{a} `*` \pname{b}
+   * and be done with it, but it's not that simple.  With \pname{a}
+   * and \pname{b} as 128-bit integers, \pname{a} `*` \pname{b}
+   * mathematically produces a 256-bit result, which the computer
+   * truncates to the lowest 128 bits.  In our case, where \pname{a}
+   * and \pname{b} are interpreted as Q64.64 fixed point numbers,
+   * the multiplication mathematically produces a Q128.128 fixed point number.
+   * We want the middle 128 bits from the result, truncating both the
+   * high and low 64 bits.  To achieve this, we carry out the multiplication
+   * explicitly with 64-bit operands and 128-bit intermediate results.
+   */
+  static cairo_uint128_t Umul (const cairo_uint128_t a, const cairo_uint128_t b);
+  /**
+   * Unsigned division of Q64.64 values.
+   *
+   * \param [in] a Numerator.
+   * \param [in] b Denominator.
+   * \return The Q64.64 representation of `a / b`
+   */
+  static cairo_uint128_t Udiv (const cairo_uint128_t a, const cairo_uint128_t b);
+  /**
+   * Unsigned multiplication of Q64.64 and Q0.128 values.
+   *
+   * \param [in] a The numerator, a Q64.64 value.
+   * \param [in] b The inverse of the denominator, a Q0.128 value
+   * \return The product `a * b`, representing the ration `a / b^-1`
+   *
+   * \see Invert
+   */
+  static cairo_uint128_t UmulByInvert (const cairo_uint128_t a, const cairo_uint128_t b);
+
+  cairo_int128_t _v;  //!< The Q64.64 value.
+
+};  // class int64x64_t
+
+
+/**
+ * \ingroup highprec
+ * Equality operator.
+ */
+inline bool operator == (const int64x64_t & lhs, const int64x64_t & rhs)
+{
+  return _cairo_int128_eq (lhs._v, rhs._v);
+}
+/**
+ * \ingroup highprec
+ * Less than operator
+ */
+inline bool operator < (const int64x64_t & lhs, const int64x64_t & rhs)
+{
+  return _cairo_int128_lt (lhs._v, rhs._v);
+}
+/**
+ * \ingroup highprec
+ * Greater operator
+ */
+inline bool operator > (const int64x64_t & lhs, const int64x64_t & rhs)
+{
+  return _cairo_int128_gt (lhs._v, rhs._v);
+}
+
+/**
+ * \ingroup highprec
+ * Compound addition operator
+ */
+inline int64x64_t & operator += (int64x64_t & lhs, const int64x64_t & rhs)
 {
-  return !(lhs == rhs);
-}
-
-inline bool operator < (const int64x64_t &lhs, const int64x64_t &rhs)
-{
-  return lhs.Compare (rhs) < 0;
-}
-inline bool operator <= (const int64x64_t &lhs, const int64x64_t &rhs)
-{
-  return lhs.Compare (rhs) <= 0;
-}
-
-inline bool operator >= (const int64x64_t &lhs, const int64x64_t &rhs)
-{
-  return lhs.Compare (rhs) >= 0;
-}
-inline bool operator > (const int64x64_t &lhs, const int64x64_t &rhs)
-{
-  return lhs.Compare (rhs) > 0;
-}
-inline int64x64_t &operator += (int64x64_t &lhs, const int64x64_t &rhs)
-{
-#if Int64x64_CAIRO_ASM
-  asm ("mov 0(%1),%%eax\n\t"
-       "add %%eax,0(%0)\n\t"
-       "mov 4(%1),%%eax\n\t"
-       "adc %%eax,4(%0)\n\t"
-       "mov 8(%1),%%eax\n\t"
-       "adc %%eax,8(%0)\n\t"
-       "mov 12(%1),%%eax\n\t"
-       "adc %%eax,12(%0)\n\t"
-       : 
-       : "r" (&lhs._v), "r" (&rhs._v) 
-       : "%eax", "cc");
-#else
-  lhs._v.hi += rhs._v.hi;
-  lhs._v.lo += rhs._v.lo;
-  if (lhs._v.lo < rhs._v.lo)
-    {
-      lhs._v.hi++;
-    }
-#endif
+  lhs._v = _cairo_int128_add( lhs._v, rhs._v );
   return lhs;
 }
-inline int64x64_t &operator -= (int64x64_t &lhs, const int64x64_t &rhs)
+/**
+ * \ingroup highprec
+ * Compound subtraction operator
+ */
+inline int64x64_t & operator -= (int64x64_t & lhs, const int64x64_t & rhs)
 {
-#if Int64x64_CAIRO_ASM
-  asm ("mov 0(%1),%%eax\n\t"
-       "sub %%eax,0(%0)\n\t"
-       "mov 4(%1),%%eax\n\t"
-       "sbb %%eax,4(%0)\n\t"
-       "mov 8(%1),%%eax\n\t"
-       "sbb %%eax,8(%0)\n\t"
-       "mov 12(%1),%%eax\n\t"
-       "sbb %%eax,12(%0)\n\t"
-       : 
-       : "r" (&lhs._v), "r" (&rhs._v) 
-       : "%eax", "cc");
-#else
-  lhs._v.hi -= rhs._v.hi;
-  lhs._v.lo -= rhs._v.lo;
-  if (lhs._v.lo > rhs._v.lo)
-    {
-      lhs._v.hi--;
-    }
-#endif
+  lhs._v = _cairo_int128_sub( lhs._v, rhs._v );
   return lhs;
 }
-inline int64x64_t &operator *= (int64x64_t &lhs, const int64x64_t &rhs)
+/**
+ * \ingroup highprec
+ * Compound multiplication operator
+ */
+inline int64x64_t & operator *= (int64x64_t & lhs, const int64x64_t & rhs)
 {
   lhs.Mul (rhs);
   return lhs;
 }
-inline int64x64_t &operator /= (int64x64_t &lhs, const int64x64_t &rhs)
+/**
+ * \ingroup highprec
+ * Compound division operator
+ */
+inline int64x64_t & operator /= (int64x64_t & lhs, const int64x64_t & rhs)
 {
   lhs.Div (rhs);
   return lhs;
 }
 
-inline int64x64_t operator + (const int64x64_t &lhs)
+/**
+ * \ingroup highprec
+ * Unary plus operator
+ */
+inline int64x64_t operator + (const int64x64_t & lhs)
 {
   return lhs;
 }
-
-inline int64x64_t operator - (const int64x64_t &lhs)
+/**
+ * \ingroup highprec
+ * Unary negation operator (change sign operator)
+ */
+inline int64x64_t operator - (const int64x64_t & lhs)
 {
   int64x64_t tmp = lhs;
-  tmp.Negate ();
+  tmp._v = _cairo_int128_negate (tmp._v);
   return tmp;
 }
-
-inline int64x64_t operator ! (const int64x64_t &lhs)
+/**
+ * \ingroup highprec
+ * Logical not operator
+ */
+inline int64x64_t operator ! (const int64x64_t & lhs)
 {
-  return (lhs._v.hi == 0 && lhs._v.lo == 0) ? int64x64_t (1, 0) : int64x64_t ();
+  return (lhs == int64x64_t ()) ? int64x64_t (1, 0) : int64x64_t ();
 }
 
+
 } // namespace ns3
 
 #endif /* INT64X64_CAIRO_H */
diff -Naur ns-3.19/src/core/model/int64x64.cc ns-3.20/src/core/model/int64x64.cc
--- ns-3.19/src/core/model/int64x64.cc	2014-06-17 10:34:00.595635449 -0700
+++ ns-3.20/src/core/model/int64x64.cc	2014-06-17 10:33:13.925995715 -0700
@@ -14,77 +14,159 @@
 
 namespace ns3 {
 
-static uint8_t MostSignificantDigit (uint64_t value)
-{
-  uint8_t n = 0;
-  do
-    {
-      n++;
-      value /= 10;
-    } while (value != 0);
-  return n;
-}
-
-static uint64_t PowerOfTen (uint8_t n)
-{
-  uint64_t retval = 1;
-  while (n > 0)
-    {
-      retval *= 10;
-      n--;
-    }
-  return retval;
-}
-
+/**
+ * \internal
+ * This algorithm is exact to the precision requested, up to the full
+ * 64 decimal digits required to exactly represent a 64-bit fraction.
+ *
+ * Proper rounding turns out to be surprisingly hard.
+ * In `y.xxxx5|6`, where the `|` marks follows the last output digit,
+ * rounding the `5|6` to `6|` is straightforward.  However,
+ * rounding `y.xxx99|6` should result in `y.xx100|`.  Notice the
+ * effect of rounding percolates to higher digits.
+ * We accumulate the output digits in a string, then carry out
+ * the rounding in the string directly.
+ */
 std::ostream &operator << (std::ostream &os, const int64x64_t &value)
 {
-  int64_t hi = value.GetHigh ();
+  const bool negative = (value < 0);
+  const int64x64_t absVal = (negative ? -value : value);
+  
+  int64_t hi = absVal.GetHigh ();
 
   // Save stream format flags
+  const std::streamsize precision = os.precision ();
   std::ios_base::fmtflags ff = os.flags ();
+  const bool floatfield = os.flags () & std::ios_base::floatfield;
+  os << std::setw (1) << std::noshowpos;
+  
+  os << std::right << (negative ? "-" : "+");
+
+  std::ostringstream oss;
+  oss << hi << ".";  // collect the digits here so we can round properly
+
 
-  { /// \internal
-    /// See \bugid{1737}:  gcc libstc++ 4.2 bug
-    if (hi == 0)
-      { 
-	os << '+';
-      }
-    else
-      {
-	os << std::showpos;
-      }
-  }
+  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" : "  ")
+		<< "[" << precision << "] " << hi << ". "
+		<< HEXHILOW (hi, low.GetLow ())
+		);
+
+  int64_t digit;
+  do 
+    {
+      low *= 10;
+      digit = low.GetHigh ();
+      NS_ASSERT_MSG ( (0 <= digit) && (digit <= 9),
+		      "digit " << digit << " out of range [0,9] "
+		      << " streaming out "
+		      << HEXHILOW (value.GetHigh (), value.GetLow ()) );
+      low -= digit;
+
+      oss << std::setw (1) << digit;
+
+      ++places;
+      if (floatfield)
+	{
+	  more = places < precision;
+	}
+      else  // default
+	{
+	  // Full resolution is 20 decimal digits
+	  more = low.GetLow () && (places < 20);
+	}
+
+      NS_LOG_LOGIC ((more ? "+" : " ")
+		    << (floatfield ? "f" : " ")
+		    << "[" << places << "] " << digit
+		    << HEXHILOW (low.GetHigh (), low.GetLow ())
+		    << std::dec << std::setfill (' ' ) << std::left);
+
+    } while (more);
+
+  // Check if we need to round the last printed digit,
+  // based on the first unprinted digit
+  std::string digits = oss.str ();
+  low *= 10;
+  int64_t nextDigit = low.GetHigh ();
+  if ( (nextDigit > 5) || ((nextDigit == 5) && (digit % 2 == 1)) )
+    {
+      // Walk backwards with the carry
+      bool carry = true;
+      for (std::string::reverse_iterator rit = digits.rbegin ();
+	   rit != digits.rend ();
+	   ++rit)
+	{
+	  if (*rit == '.')  // Skip over the decimal point
+	    {
+	      continue ;
+	    }
+	  
+	  ++(*rit);         // Add the carry
+	  if (*rit <= '9')  // Relies on character order...
+	    {
+	      carry = false;
+	      break ;       // Carry complete
+	    }
+	  else
+	    {
+	      *rit = '0';     // Continue carry to next higher digit
+	    }
+	}
+      if (carry)            // If we still have a carry...
+	{
+	  digits.insert (digits.begin (), '1');
+	}
+    }
+  os << digits;
   
-  os << hi << ".";
   os.flags (ff);  // Restore stream flags
-
-  uint64_t low = value.GetLow ();
-  uint8_t msd = MostSignificantDigit (~((uint64_t)0));
-  do
-    {
-      msd--;
-      uint64_t pow = PowerOfTen (msd);
-      uint8_t digit = low / pow;
-      NS_ASSERT (digit < 10);
-      os << (uint16_t) digit;
-      low -= digit * pow;
-    } while (msd > 0 && low > 0);
   return os;
 }
 
-static uint64_t ReadDigits (std::string str)
+static uint64_t ReadHiDigits (std::string str)
 {
   const char *buf = str.c_str ();
   uint64_t retval = 0;
   while (*buf != 0)
     {
       retval *= 10;
-      retval += *buf - 0x30;
+      retval += *buf - '0';
       buf++;
     }
   return retval;
 }
 
+static uint64_t ReadLoDigits (std::string str)
+{
+  int64x64_t low;
+  const int64x64_t round (0, 5);  // Round last place in division
+
+  for (std::string::const_reverse_iterator rit = str.rbegin ();
+       rit != str.rend ();
+       ++rit)
+    {
+      int digit = *rit - '0';
+      NS_ASSERT_MSG ( (0 <= digit) && (digit <= 9),
+		      "digit " << digit << " out of range [0,9]"
+		      << " streaming in low digits \"" << str << "\"");
+      low = (low + digit + round) / 10; 
+    }
+  
+  return low.GetLow ();
+}
+    
 std::istream &operator >> (std::istream &is, int64x64_t &value)
 {
   std::string str;
@@ -121,16 +203,23 @@
   next = str.find (".", cur);
   if (next != std::string::npos)
     {
-      hi = ReadDigits (str.substr (cur, next-cur));
-      lo = ReadDigits (str.substr (next+1, str.size ()-(next+1)));
+      hi = ReadHiDigits (str.substr (cur, next-cur));
+      lo = ReadLoDigits (str.substr (next+1, str.size ()-(next+1)));
+    }
+  else if (cur != std::string::npos)
+    {
+      hi = ReadHiDigits (str.substr (cur, str.size ()-cur));
+      lo = 0;
     }
   else
     {
-      hi = ReadDigits (str.substr (cur, str.size ()-cur));
+      hi = 0;
       lo = 0;
     }
-  hi = negative ? -hi : hi;
+  
   value = int64x64_t (hi, lo);
+  value = negative ? -value : value;
+
   return is;
 }
 
diff -Naur ns-3.19/src/core/model/int64x64-double.h ns-3.20/src/core/model/int64x64-double.h
--- ns-3.19/src/core/model/int64x64-double.h	2014-06-17 10:34:00.595635449 -0700
+++ ns-3.20/src/core/model/int64x64-double.h	2014-06-17 10:33:13.924995722 -0700
@@ -2,18 +2,73 @@
 #if !defined(INT64X64_DOUBLE_H) && (defined (INT64X64_USE_DOUBLE) || defined(PYTHON_SCAN))
 #define INT64X64_DOUBLE_H
 
-#include <iostream>
-#include <cmath>
+#include <stdint.h>
+#include <cmath>  // pow
+#include <utility>  // pair
+
 
 namespace ns3 {
 
+/**
+ * \internal
+ * The implementation documented here uses native long double.
+ */
 class int64x64_t
 {
+  /// Mask for fraction part
+  static const uint64_t    HP_MASK_LO = 0xffffffffffffffffULL;
+  /**
+   * Floating point value of HP_MASK_LO + 1
+   * We really want:
+   * \code
+   *   static const long double HP_MAX_64 = std:pow (2.0L, 64);
+   * \endcode
+   * but we can't call functions in const definitions,
+   * We could make this a static and initialize in int64x64-double.cc or
+   * int64x64.cc, but this requires handling static initialization order
+   * when most of the implementation is inline.  Instead, we resort to
+   * this define.
+   */
+#define HP_MAX_64    (std::pow (2.0L, 64))
+
 public:
+  /**
+   * Type tag for the underlying implementation.
+   *
+   * A few testcases are are sensitive to implementation,
+   * specifically the double implementation.  To handle this,
+   * we expose the underlying implementation type here.
+   */
+  enum impl_type {
+    int128_impl,  //!< Native int128_t implementation.
+    cairo_impl,   //!< cairo wideint implementation
+    ld_impl,      //!< long double implementation
+  };
+
+  /// Type tag for this implementation.
+  static const enum impl_type implementation = ld_impl;
+
+  /// Default constructor
   inline int64x64_t ()
     : _v (0) {}
+  /**@{*/
+  /**
+   * Construct from a floating point value.
+   *
+   * \param [in] v floating value to represent
+   */
   inline int64x64_t (double v)
     : _v (v) {}
+  inline int64x64_t (long double v)
+    : _v (v) {}
+  /**@}*/
+
+  /**@{*/
+  /**
+   * Construct from an integral type.
+   *
+   * \param [in] v integer value to represent
+   */
   inline int64x64_t (int v)
     : _v (v) {}
   inline int64x64_t (long int v)
@@ -26,135 +81,244 @@
     : _v (v) {}
   inline int64x64_t (unsigned long long int v)
     : _v (v) {}
-  inline int64x64_t (int64_t hi, uint64_t lo)
-    : _v (hi) { /** \todo add in lo? */}
+  /**@}*/
+  /**
+   * Construct from explicit high and low values.
+   *
+   * \param [in] hi Integer portion.
+   * \param [in] lo Fractional portion, already scaled to HP_MAX_64.
+   */
+  explicit inline int64x64_t (int64_t hi, uint64_t lo)
+  {
+    const bool negative = hi < 0;
+    const long double fhi = negative ? -hi : hi;
+    const long double flo = lo / HP_MAX_64;
+    _v = negative ? - fhi : fhi;
+    _v += flo;
+    // _v = negative ? -_v : _v;
+  }
 
-  inline int64x64_t (const int64x64_t &o)
+  /**
+   * Copy constructor.
+   *
+   * \param [in] o Value to copy.
+   */
+  inline int64x64_t (const int64x64_t & o)
     : _v (o._v) {}
-  inline int64x64_t &operator = (const int64x64_t &o)
+  /**
+   * Assignment.
+   *
+   * \param [in] o Value to assign to this int64x64_t.
+   */
+  inline int64x64_t & operator = (const int64x64_t & o)
   {
     _v = o._v;
     return *this;
   }
 
+  /**
+   * Get this value as a double.
+   *
+   * \return This value in floating form.
+   */
   inline double GetDouble (void) const
   {
-    return _v;
+    return (double)_v;
   }
+private:
+  /**
+   * Get the high and low portions of this value.
+   *
+   * \return a pair of the high and low words
+   */
+  std::pair<int64_t, uint64_t> GetHighLow (void) const
+    {
+    const bool negative = _v < 0;
+    const long double v = negative ? -_v : _v;
+
+    long double fhi;
+    long double flo = std::modf (v, &fhi);
+    // Add 0.5 to round, which improves the last count
+    // This breaks these tests:
+    //   TestSuite devices-mesh-dot11s-regression
+    //   TestSuite devices-mesh-flame-regression
+    //   TestSuite routing-aodv-regression
+    //   TestSuite routing-olsr-regression
+    // Setting round = 0; breaks:
+    //   TestSuite int64x64
+    const long double round = 0.5;
+    flo = flo * HP_MAX_64 + round;
+    int64_t  hi = fhi;
+    uint64_t lo = flo;
+    if (flo >= HP_MAX_64)
+      {
+	// conversion to uint64 rolled over
+	++hi;
+      }
+    if (negative)
+      {
+	lo = ~lo;
+	hi = ~hi;
+	if (++lo == 0)
+	  {
+	    ++hi;
+	  }
+      }
+    return std::make_pair (hi, lo);
+    }
+public:
+  /**
+   * Get the integer portion.
+   *
+   * \return The integer portion of this value.
+   */
   inline int64_t GetHigh (void) const
   {
-    return (int64_t)std::floor (_v);
+    return GetHighLow ().first;
   }
+  /**
+   * Get the fractional portion of this value, unscaled.
+   *
+   * \return The fractional portion, unscaled, as an integer.
+   */
   inline uint64_t GetLow (void) const
   {
-    /// \todo Generate lo?
-    return 0;
+    return GetHighLow ().second;
   }
 
-  inline void MulByInvert (const int64x64_t &o)
+  /**
+   * Multiply this value by a Q0.128 value, presumably representing an inverse,
+   * completing a division operation.
+   *
+   * \param [in] o The inverse operand.
+   *
+   * \note There is no difference between Q64.64 and Q0.128 in this implementation,
+   * so this function is a simple multiply.
+   */
+  inline void MulByInvert (const int64x64_t & o)
   {
     _v *= o._v;
   }
 
+  /**
+   * Compute the inverse of an integer value.
+   *
+   * \param [in] v The value to compute the inverse of.
+   * \return The inverse.
+   */
   static inline int64x64_t Invert (uint64_t v)
   {
-    double d = v;
-    return int64x64_t (1/d);
+    int64x64_t tmp ((long double)1 / v);
+    return tmp;
   }
 
 private:
-  friend bool operator == (const int64x64_t &lhs, const int64x64_t &rhs);
-  friend bool operator != (const int64x64_t &lhs, const int64x64_t &rhs);
-  friend bool operator <= (const int64x64_t &lhs, const int64x64_t &rhs);
-  friend bool operator >= (const int64x64_t &lhs, const int64x64_t &rhs);
-  friend bool operator < (const int64x64_t &lhs, const int64x64_t &rhs);
-  friend bool operator > (const int64x64_t &lhs, const int64x64_t &rhs);
-  friend int64x64_t &operator += (int64x64_t &lhs, const int64x64_t &rhs);
-  friend int64x64_t &operator -= (int64x64_t &lhs, const int64x64_t &rhs);
-  friend int64x64_t &operator *= (int64x64_t &lhs, const int64x64_t &rhs);
-  friend int64x64_t &operator /= (int64x64_t &lhs, const int64x64_t &rhs);
-  friend int64x64_t operator + (const int64x64_t &lhs, const int64x64_t &rhs);
-  friend int64x64_t operator - (const int64x64_t &lhs, const int64x64_t &rhs);
-  friend int64x64_t operator * (const int64x64_t &lhs, const int64x64_t &rhs);
-  friend int64x64_t operator / (const int64x64_t &lhs, const int64x64_t &rhs);
-  friend int64x64_t operator + (const int64x64_t &lhs);
-  friend int64x64_t operator - (const int64x64_t &lhs);
-  friend int64x64_t operator ! (const int64x64_t &lhs);
+  friend bool         operator == (const int64x64_t & lhs, const int64x64_t & rhs);
 
-  double _v;
-};
+  friend bool         operator <  (const int64x64_t & lhs, const int64x64_t & rhs);
+  friend bool         operator >  (const int64x64_t & lhs, const int64x64_t & rhs);
+  
+  friend int64x64_t & operator += (      int64x64_t & lhs, const int64x64_t & rhs);
+  friend int64x64_t & operator -= (      int64x64_t & lhs, const int64x64_t & rhs);
+  friend int64x64_t & operator *= (      int64x64_t & lhs, const int64x64_t & rhs);
+  friend int64x64_t & operator /= (      int64x64_t & lhs, const int64x64_t & rhs);
 
-inline bool operator == (const int64x64_t &lhs, const int64x64_t &rhs)
-{
-  return lhs._v == rhs._v;
-}
+  friend int64x64_t   operator -  (const int64x64_t & lhs);
+  friend int64x64_t   operator !  (const int64x64_t & lhs);
 
-inline bool operator != (const int64x64_t &lhs, const int64x64_t &rhs)
-{
-  return lhs._v != rhs._v;
-}
+  long double _v;  //!< The Q64.64 value.
+
+};  // class int64x64_t
 
-inline bool operator <= (const int64x64_t &lhs, const int64x64_t &rhs)
-{
-  return lhs._v <= rhs._v;
-}
 
-inline bool operator >= (const int64x64_t &lhs, const int64x64_t &rhs)
+/**
+ * \ingroup highprec
+ * Equality operator.
+ */
+inline bool operator == (const int64x64_t & lhs, const int64x64_t & rhs)
 {
-  return lhs._v >= rhs._v;
+  return lhs._v == rhs._v;
 }
-inline bool operator < (const int64x64_t &lhs, const int64x64_t &rhs)
+/**
+ * \ingroup highprec
+ * Less than operator
+ */
+inline bool operator < (const int64x64_t & lhs, const int64x64_t & rhs)
 {
   return lhs._v < rhs._v;
 }
-inline bool operator > (const int64x64_t &lhs, const int64x64_t &rhs)
+/**
+ * \ingroup highprec
+ * Greater operator
+ */
+inline bool operator > (const int64x64_t & lhs, const int64x64_t & rhs)
 {
   return lhs._v > rhs._v;
 }
-inline int64x64_t &operator += (int64x64_t &lhs, const int64x64_t &rhs)
+
+/**
+ * \ingroup highprec
+ * Compound addition operator
+ */
+inline int64x64_t & operator += (int64x64_t & lhs, const int64x64_t & rhs)
 {
-  double tmp = lhs._v;
-  tmp += rhs._v;
-  lhs = int64x64_t (tmp);
+  lhs._v += rhs._v;
   return lhs;
 }
-inline int64x64_t &operator -= (int64x64_t &lhs, const int64x64_t &rhs)
+/**
+ * \ingroup highprec
+ * Compound subtraction operator
+ */
+inline int64x64_t & operator -= (int64x64_t & lhs, const int64x64_t & rhs)
 {
-  double tmp = lhs._v;
-  tmp -= rhs._v;
-  lhs = int64x64_t (tmp);
+  lhs._v -= rhs._v;
   return lhs;
 }
-inline int64x64_t &operator *= (int64x64_t &lhs, const int64x64_t &rhs)
+/**
+ * \ingroup highprec
+ * Compound multiplication operator
+ */
+inline int64x64_t & operator *= (int64x64_t & lhs, const int64x64_t & rhs)
 {
-  double tmp = lhs._v;
-  tmp *= rhs._v;
-  lhs = int64x64_t (tmp);
+  lhs._v *= rhs._v;
   return lhs;
 }
-inline int64x64_t &operator /= (int64x64_t &lhs, const int64x64_t &rhs)
+/**
+ * \ingroup highprec
+ * Compound division operator
+ */
+inline int64x64_t & operator /= (int64x64_t & lhs, const int64x64_t & rhs)
 {
-  double tmp = lhs._v;
-  tmp /= rhs._v;
-  lhs = int64x64_t (tmp);
+  lhs._v /= rhs._v;
   return lhs;
 }
 
-inline int64x64_t operator + (const int64x64_t &lhs)
+/**
+ * \ingroup highprec
+ * Unary plus operator
+ */
+inline int64x64_t operator + (const int64x64_t & lhs)
 {
   return lhs;
 }
-
-inline int64x64_t operator - (const int64x64_t &lhs)
+/**
+ * \ingroup highprec
+ * Unary negation operator (change sign operator)
+ */
+inline int64x64_t operator - (const int64x64_t & lhs)
 {
   return int64x64_t (-lhs._v);
 }
-
-inline int64x64_t operator ! (const int64x64_t &lhs)
+/**
+ * \ingroup highprec
+ * Logical not operator
+ */
+inline int64x64_t operator ! (const int64x64_t & lhs)
 {
   return int64x64_t (!lhs._v);
 }
 
+
 } // namespace ns3
 
 #endif /* INT64X64_DOUBLE_H */
diff -Naur ns-3.19/src/core/model/int64x64.h ns-3.20/src/core/model/int64x64.h
--- ns-3.19/src/core/model/int64x64.h	2014-06-17 10:34:00.596635442 -0700
+++ ns-3.20/src/core/model/int64x64.h	2014-06-17 10:33:13.925995715 -0700
@@ -3,95 +3,204 @@
 
 #include "ns3/core-config.h"
 
-#if defined (INT64X64_USE_DOUBLE) || defined (PYTHON_SCAN)
-#include "int64x64-double.h"
-#elif defined (INT64X64_USE_CAIRO)
-#include "int64x64-cairo.h"
-#elif defined (INT64X64_USE_128)
+// Order is important here, as it determines which implementation
+// will generate doxygen API docs.  This order mimics the
+// selection logic in wscript, so we generate docs from the
+// implementation actually chosen by the configuration.
+#if defined (INT64X64_USE_128) && !defined (PYTHON_SCAN)
 #include "int64x64-128.h"
+#elif defined (INT64X64_USE_CAIRO) && !defined (PYTHON_SCAN)
+#include "int64x64-cairo.h"
+#elif defined (INT64X64_USE_DOUBLE) || defined (PYTHON_SCAN)
+#include "int64x64-double.h"
 #endif
 
 #include <iostream>
 
 namespace ns3 {
 
-#define INT64X64_OP_ARITH_TYPE(op,type)                                 \
-  inline int64x64_t operator op (const int64x64_t &lhs, const type rhs) \
-  {                                                                     \
-    int64x64_t tmp = lhs;                                               \
-    tmp op ## = int64x64_t (rhs);                                         \
-    return tmp;                                                         \
-  }                                                                     \
-  inline int64x64_t operator op (const type lhs, const int64x64_t &rhs) \
-  {                                                                     \
-    int64x64_t tmp = int64x64_t (lhs);                                  \
-    tmp op ## = rhs;                                                      \
-    return tmp;                                                         \
-  }
-
-#define INT64X64_OP_ARITH(op)                                           \
-  inline int64x64_t operator op (const int64x64_t &lhs, const int64x64_t &rhs) \
-  {                                                                     \
-    int64x64_t tmp = lhs;                                               \
-    tmp op ## = rhs;                                                      \
-    return tmp;                                                         \
-  }                                                                     \
-  INT64X64_OP_ARITH_TYPE (op,double)                                     \
-  INT64X64_OP_ARITH_TYPE (op,signed char)                              \
-  INT64X64_OP_ARITH_TYPE (op,signed short)                             \
-  INT64X64_OP_ARITH_TYPE (op,signed int)                               \
-  INT64X64_OP_ARITH_TYPE (op,signed long int)                          \
-  INT64X64_OP_ARITH_TYPE (op,signed long long int)                     \
-  INT64X64_OP_ARITH_TYPE (op,unsigned char)                            \
-  INT64X64_OP_ARITH_TYPE (op,unsigned short)                           \
-  INT64X64_OP_ARITH_TYPE (op,unsigned int)                             \
-  INT64X64_OP_ARITH_TYPE (op,unsigned long int)                        \
-  INT64X64_OP_ARITH_TYPE (op,unsigned long long int)
-
-#define INT64X64_OP_CMP_TYPE(op,type)                                   \
-  inline bool operator op (const int64x64_t &lhs, const type &rhs)      \
-  {                                                                     \
-    return lhs op int64x64_t (rhs);                                     \
-  }                                                                     \
-  inline bool operator op (const type &lhs, const int64x64_t &rhs)      \
-  {                                                                     \
-    return int64x64_t (lhs) op rhs;                                     \
-  }
-
-#define INT64X64_OP_CMP(op)                                             \
-  INT64X64_OP_CMP_TYPE (op,double)                                       \
-  INT64X64_OP_CMP_TYPE (op,signed int)                                 \
-  INT64X64_OP_CMP_TYPE (op,signed long int)                            \
-  INT64X64_OP_CMP_TYPE (op,signed long long int)                       \
-  INT64X64_OP_CMP_TYPE (op,unsigned int)                               \
-  INT64X64_OP_CMP_TYPE (op,unsigned long int)                          \
-  INT64X64_OP_CMP_TYPE (op,unsigned long long int)
-
-
-INT64X64_OP_ARITH (+)
-INT64X64_OP_ARITH (-)
-INT64X64_OP_ARITH (*)
-INT64X64_OP_ARITH (/)
-INT64X64_OP_CMP (==)
-INT64X64_OP_CMP (!=)
-INT64X64_OP_CMP (<)
-INT64X64_OP_CMP (<=)
-INT64X64_OP_CMP (>)
-INT64X64_OP_CMP (>=)
-
+/**
+ * \ingroup core
+ * \defgroup highprec High Precision Q64.64
+ *
+ * Functions and class for high precision Q64.64 fixed point arithmetic.
+ */
+  
+/**
+ * \ingroup highprec
+ * \class int64x64_t
+ * 
+ * High precision numerical type, implementing Q64.64 fixed precision.
+ *
+ * A Q64.64 fixed precision number consists of:
+ *
+ *   Bits | Function
+ *   ---- | --------
+ *     1  | Sign bit
+ *    63  | Integer portion
+ *    64  | Fractional portion
+ *
+ * The `high` word consists of the sign bit and integer value;
+ * the `low` word is the fractional part, unscaled.
+ *
+ * All standard arithmetic operations are supported:
+ *
+ *   Category    | Operators
+ *   ----------- | ---------
+ *   Computation | `+`, `+=`, `-`, `-=`, `*`, `*=`, `/`, `/=`
+ *   Comparison  | `==`, `!=`, `<`, `<=`, `>`, `>=`
+ *   Unary       | `+`, `-`, `!`
+ */
+
+
+/**
+ * \ingroup core
+ * \defgroup highprec High Precision Q64.64
+ *
+ * Functions and class for high precision Q64.64 fixed point arithmetic.
+ */
+  
+/**
+ * \ingroup highprec
+ * \class int64x64_t
+ * 
+ * High precision numerical type, implementing Q64.64 fixed precision.
+ *
+ * A Q64.64 fixed precision number consists of:
+ *
+ *   Bits | Function
+ *   ---- | --------
+ *     1  | Sign bit
+ *    63  | Integer portion
+ *    64  | Fractional portion
+ *
+ * The `high` word consists of the sign bit and integer value;
+ * the `low` word is the fractional part, unscaled.
+ *
+ * All standard arithmetic operations are supported:
+ *
+ *   Category    | Operators
+ *   ----------- | ---------
+ *   Computation | `+`, `+=`, `-`, `-=`, `*`, `*=`, `/`, `/=`
+ *   Comparison  | `==`, `!=`, `<`, `<=`, `>`, `>=`
+ *   Unary       | `+`, `-`, `!`
+ */
+
+
+/**
+ * \ingroup highprec
+ * Addition operator.
+ */
+inline
+int64x64_t operator + (const int64x64_t & lhs, const int64x64_t & rhs)
+{
+  int64x64_t tmp = lhs;
+  tmp += rhs;
+  return tmp;
+}
+/**
+ * \ingroup highprec
+ * Subtraction operator.
+ */
+inline
+int64x64_t operator - (const int64x64_t & lhs, const int64x64_t & rhs)
+{
+  int64x64_t tmp = lhs;
+  tmp -= rhs;
+  return tmp;
+}
+/**
+ * \ingroup highprec
+ * Multiplication operator.
+ */
+inline
+int64x64_t operator * (const int64x64_t & lhs, const int64x64_t & rhs)
+{
+  int64x64_t tmp = lhs;
+  tmp *= rhs;
+  return tmp;
+}
+/**
+ * \ingroup highprec
+ * Division operator.
+ */
+inline
+int64x64_t operator / (const int64x64_t & lhs, const int64x64_t & rhs)
+{
+  int64x64_t tmp = lhs;
+  tmp /= rhs;
+  return tmp;
+}
+/**
+ * \ingroup highprec
+ * Inequality operator
+ */
+inline bool operator != (const int64x64_t & lhs, const int64x64_t & rhs)
+{
+  return !(lhs == rhs);
+}
+/**
+ * \ingroup highprec
+ * Less or equal operator
+ */
+inline bool operator <= (const int64x64_t & lhs, const int64x64_t & rhs)
+{
+  return !(lhs > rhs);
+}
+/**
+ * \ingroup highprec
+ * Greater or equal operator
+ */
+inline bool operator >= (const int64x64_t & lhs, const int64x64_t & rhs)
+{
+  return !(lhs < rhs);
+}
+/**
+ * \ingroup highprec
+ * Output streamer for int64x64_t
+ *
+ * Values are printed with the following format flags
+ * (independent of the the stream flags):
+ *   - `showpos`
+ *   - `left`
+ *
+ * The stream `width` is ignored.  If `floatfield` is set,
+ * `precision` decimal places are printed.  If `floatfield` is not set,
+ * all digits of the fractional part are printed, up to the
+ * representation limit of 20 digits; trailing zeros are omitted.
+ */
 std::ostream &operator << (std::ostream &os, const int64x64_t &val);
+/**
+ * \ingroup highprec
+ * Input streamer for int64x64_t
+ */
 std::istream &operator >> (std::istream &is, int64x64_t &val);
 
+/**
+ * \ingroup highprec
+ * Absolute value.
+ */
 inline int64x64_t Abs (const int64x64_t &value)
 {
   return (value < 0) ? -value : value;
 }
 
+/**
+ * \ingroup highprec
+ * Minimum.
+ *
+ * \return The smaller of the arguments.
+ */
 inline int64x64_t Min (const int64x64_t &a, const int64x64_t &b)
 {
   return (a < b) ? a : b;
 }
-
+/**
+ * \ingroup highprec
+ * Maximum.
+ *
+ * \return The larger of the arguments.
+ */
 inline int64x64_t Max (const int64x64_t &a, const int64x64_t &b)
 {
   return (a > b) ? a : b;
diff -Naur ns-3.19/src/core/model/list-scheduler.cc ns-3.20/src/core/model/list-scheduler.cc
--- ns-3.19/src/core/model/list-scheduler.cc	2014-06-17 10:34:00.596635442 -0700
+++ ns-3.20/src/core/model/list-scheduler.cc	2014-06-17 10:33:13.926995707 -0700
@@ -30,8 +30,7 @@
 namespace ns3 {
 
 
-NS_OBJECT_ENSURE_REGISTERED (ListScheduler)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (ListScheduler);
 
 TypeId
 ListScheduler::GetTypeId (void)
diff -Naur ns-3.19/src/core/model/log.cc ns-3.20/src/core/model/log.cc
--- ns-3.19/src/core/model/log.cc	2014-06-17 10:34:00.597635434 -0700
+++ ns-3.20/src/core/model/log.cc	2014-06-17 10:33:13.928995691 -0700
@@ -36,8 +36,8 @@
 
 namespace ns3 {
 
-LogTimePrinter g_logTimePrinter = 0;
-LogNodePrinter g_logNodePrinter = 0;
+static LogTimePrinter g_logTimePrinter = 0;
+static LogNodePrinter g_logNodePrinter = 0;
 
 typedef std::map<std::string, LogComponent *> ComponentList;
 typedef std::map<std::string, LogComponent *>::iterator ComponentListI;
@@ -84,10 +84,11 @@
 }
 
 
-LogComponent::LogComponent (const std::string & name)
-  : m_levels (0), m_name (name)
+LogComponent::LogComponent (const std::string & name,
+                            const enum LogLevel mask /* = 0 */)
+  : m_levels (0), m_mask (mask), m_name (name)
 {
-  EnvVarCheck (name);
+  EnvVarCheck ();
 
   ComponentList *components = GetComponentList ();
   for (ComponentListI i = components->begin ();
@@ -103,7 +104,7 @@
 }
 
 void
-LogComponent::EnvVarCheck (const std::string & name)
+LogComponent::EnvVarCheck (void)
 {
 #ifdef HAVE_GETENV
   char *envVar = getenv ("NS_LOG");
@@ -112,7 +113,6 @@
       return;
     }
   std::string env = envVar;
-  std::string myName = name;
 
   std::string::size_type cur = 0;
   std::string::size_type next = 0;
@@ -125,7 +125,7 @@
       if (equal == std::string::npos)
         {
           component = tmp;
-          if (component == myName || component == "*" || component == "***")
+          if (component == m_name || component == "*" || component == "***")
             {
               int level = LOG_LEVEL_ALL | LOG_PREFIX_ALL;
               Enable ((enum LogLevel)level);
@@ -135,7 +135,7 @@
       else
         {
           component = tmp.substr (0, equal);
-          if (component == myName || component == "*")
+          if (component == m_name || component == "*")
             {
               int level = 0;
               std::string::size_type cur_lev;
@@ -242,7 +242,7 @@
 
 
 bool 
-LogComponent::IsEnabled (enum LogLevel level) const
+LogComponent::IsEnabled (const enum LogLevel level) const
 {
   //  LogComponentEnableEnvVar ();
   return (level & m_levels) ? 1 : 0;
@@ -254,14 +254,20 @@
   return m_levels == 0;
 }
 
+void
+LogComponent::SetMask (const enum LogLevel level)
+{
+  m_mask |= level;
+}
+
 void 
-LogComponent::Enable (enum LogLevel level)
+LogComponent::Enable (const enum LogLevel level)
 {
-  m_levels |= level;
+  m_levels |= (level & ~m_mask);
 }
 
 void 
-LogComponent::Disable (enum LogLevel level)
+LogComponent::Disable (const enum LogLevel level)
 {
   m_levels &= ~level;
 }
@@ -272,8 +278,9 @@
   return m_name.c_str ();
 }
 
+/* static */
 std::string
-LogComponent::GetLevelLabel(const enum LogLevel level) const
+LogComponent::GetLevelLabel(const enum LogLevel level)
 {
   if (level == LOG_ERROR)
     {
@@ -580,8 +587,7 @@
 
 
 ParameterLogger::ParameterLogger (std::ostream &os)
-  : std::basic_ostream<char> (os.rdbuf ()),  //!< \bugid{1792}
-    m_itemNumber (0),
+  : m_first (true),
     m_os (os)
 {
 }
diff -Naur ns-3.19/src/core/model/log.h ns-3.20/src/core/model/log.h
--- ns-3.19/src/core/model/log.h	2014-06-17 10:34:00.598635426 -0700
+++ ns-3.20/src/core/model/log.h	2014-06-17 10:33:13.928995691 -0700
@@ -26,11 +26,15 @@
 #include <stdint.h>
 #include <map>
 
+#include "log-macros-enabled.h"
+#include "log-macros-disabled.h"
+
 namespace ns3 {
 
 /**
  * \ingroup debugging
  * \defgroup logging Logging
+ *
  * \brief Logging functions and macros
  *
  * LOG functionality: macros which allow developers to
@@ -59,85 +63,90 @@
  * Use NS_LOG_FUNCTION_NOARGS() only in static functions.
  */
 
-
 /**
  *  \ingroup logging
  *
  *  Logging severity classes and levels.
  */
 enum LogLevel {
-  LOG_NONE           = 0x00000000, // no logging
+  LOG_NONE           = 0x00000000, //!< no logging
 
-  LOG_ERROR          = 0x00000001, // serious error messages only
+  LOG_ERROR          = 0x00000001, //!< serious error messages only
   LOG_LEVEL_ERROR    = 0x00000001,
 
-  LOG_WARN           = 0x00000002, // warning messages
+  LOG_WARN           = 0x00000002, //!< warning messages
   LOG_LEVEL_WARN     = 0x00000003,
 
-  LOG_DEBUG          = 0x00000004, // rare ad-hoc debug messages
+  LOG_DEBUG          = 0x00000004, //!< rare ad-hoc debug messages
   LOG_LEVEL_DEBUG    = 0x00000007,
 
-  LOG_INFO           = 0x00000008, // informational messages (e.g., banners)
+  LOG_INFO           = 0x00000008, //!< informational messages (e.g., banners)
   LOG_LEVEL_INFO     = 0x0000000f,
 
-  LOG_FUNCTION       = 0x00000010, // function tracing
+  LOG_FUNCTION       = 0x00000010, //!< function tracing
   LOG_LEVEL_FUNCTION = 0x0000001f, 
 
-  LOG_LOGIC          = 0x00000020, // control flow tracing within functions
+  LOG_LOGIC          = 0x00000020, //!< control flow tracing within functions
   LOG_LEVEL_LOGIC    = 0x0000003f,
 
-  LOG_ALL            = 0x0fffffff, // print everything
+  LOG_ALL            = 0x0fffffff, //!< print everything
   LOG_LEVEL_ALL      = LOG_ALL,
 
-  LOG_PREFIX_FUNC    = 0x80000000, // prefix all trace prints with function
-  LOG_PREFIX_TIME    = 0x40000000, // prefix all trace prints with simulation time
-  LOG_PREFIX_NODE    = 0x20000000, // prefix all trace prints with simulation node
-  LOG_PREFIX_LEVEL   = 0x10000000, // prefix all trace prints with log level (severity)
-  LOG_PREFIX_ALL     = 0xf0000000  // all prefixes
+  LOG_PREFIX_FUNC    = 0x80000000, //!< prefix all trace prints with function
+  LOG_PREFIX_TIME    = 0x40000000, //!< prefix all trace prints with simulation time
+  LOG_PREFIX_NODE    = 0x20000000, //!< prefix all trace prints with simulation node
+  LOG_PREFIX_LEVEL   = 0x10000000, //!< prefix all trace prints with log level (severity)
+  LOG_PREFIX_ALL     = 0xf0000000  //!< all prefixes
 };
 
 /**
- * \param name a log component name
- * \param level a logging level
  * \ingroup logging
  *
  * Enable the logging output associated with that log component.
+ *
  * The logging output can be later disabled with a call
  * to ns3::LogComponentDisable.
  *
  * Same as running your program with the NS_LOG environment
  * variable set as NS_LOG='name=level'
+ *
+ * \param name a log component name
+ * \param level a logging level
  */
 void LogComponentEnable (char const *name, enum LogLevel level);
 
 /**
- * \param level a logging level
  * \ingroup logging
  *
  * Enable the logging output for all registered log components.
  *
  * Same as running your program with the NS_LOG environment
  * variable set as NS_LOG='*=level'
+ *
+ * \param level a logging level
  */
 void LogComponentEnableAll (enum LogLevel level);
 
 
 /**
- * \param name a log component name
- * \param level a logging level
  * \ingroup logging
  *
  * Disable the logging output associated with that log component.
+ *
  * The logging output can be later re-enabled with a call
  * to ns3::LogComponentEnable.
+ *
+ * \param name a log component name
+ * \param level a logging level
  */
 void LogComponentDisable (char const *name, enum LogLevel level);
 
 /**
- * \param level a logging level
  * \ingroup logging
  *
  * Disable all logging for all components.
+ *
+ * \param level a logging level
  */
 void LogComponentDisableAll (enum LogLevel level);
 
@@ -146,7 +155,6 @@
 
 /**
  * \ingroup logging
- * \param name a string
  *
  * Define a Log component with a specific name.
  *
@@ -157,143 +165,60 @@
  * ns3::LogComponentDisable functions or with the NS_LOG
  * environment variable.
  *
- * To create a log component Foo, at the top of foo.cc:
- *
- * \code
- *   NS_LOG_COMPONENT_DEFINE ("Foo")
- *     ;
- * \endcode
- *
- * Note the closing ';' is not on the same line;  this prevents 
- * Doxygen from spuriously warning that the macro invocation is undocumented.
- 
+ * \param name a string
  */
 #define NS_LOG_COMPONENT_DEFINE(name)                           \
   static ns3::LogComponent g_log = ns3::LogComponent (name)
 
 /**
  * \ingroup logging
- * Append the simulation time to a log message.
- */
-#define NS_LOG_APPEND_TIME_PREFIX                               \
-  if (g_log.IsEnabled (ns3::LOG_PREFIX_TIME))                   \
-    {                                                           \
-      ns3::LogTimePrinter printer = ns3::LogGetTimePrinter ();  \
-      if (printer != 0)                                         \
-        {                                                       \
-          (*printer)(std::clog);                                \
-          std::clog << " ";                                     \
-        }                                                       \
-    }
-
-/**
- * \ingroup logging
- * Append the simulation node id to a log message.
- */
-#define NS_LOG_APPEND_NODE_PREFIX                               \
-  if (g_log.IsEnabled (ns3::LOG_PREFIX_NODE))                   \
-    {                                                           \
-      ns3::LogNodePrinter printer = ns3::LogGetNodePrinter ();  \
-      if (printer != 0)                                         \
-        {                                                       \
-          (*printer)(std::clog);                                \
-          std::clog << " ";                                     \
-        }                                                       \
-    }
-
-/**
- * \ingroup logging
- * Append the function name to a log message.
- */
-#define NS_LOG_APPEND_FUNC_PREFIX                               \
-  if (g_log.IsEnabled (ns3::LOG_PREFIX_FUNC))                   \
-    {                                                           \
-      std::clog << g_log.Name () << ":" <<                      \
-      __FUNCTION__ << "(): ";                                   \
-    }                                                           \
-
-/**
- * \ingroup logging
- * Append the log severity level to a log message.
- */
-#define NS_LOG_APPEND_LEVEL_PREFIX(level)                       \
-  if (g_log.IsEnabled (ns3::LOG_PREFIX_LEVEL))                  \
-    {                                                           \
-      std::clog << "[" << g_log.GetLevelLabel (level) << "] ";  \
-    }                                                           \
-  
-
-#ifndef NS_LOG_APPEND_CONTEXT
-#define NS_LOG_APPEND_CONTEXT
-#endif /* NS_LOG_APPEND_CONTEXT */
-
-
-
-#ifdef NS3_LOG_ENABLE
-
-
-
-/**
- * \ingroup logging
- * \param level the log level
- * \param msg the message to log
  *
- * This macro allows you to log an arbitrary message at a specific
- * log level. The log message is expected to be a C++ ostream
- * message such as "my string" << aNumber << "my oth stream".
- *
- * Typical usage looks like:
- * \code
- * NS_LOG (LOG_DEBUG, "a number="<<aNumber<<", anotherNumber="<<anotherNumber);
- * \endcode
- */
-#define NS_LOG(level, msg)                                      \
-  do                                                            \
-    {                                                           \
-      if (g_log.IsEnabled (level))                              \
-        {                                                       \
-          NS_LOG_APPEND_TIME_PREFIX;                            \
-          NS_LOG_APPEND_NODE_PREFIX;                            \
-          NS_LOG_APPEND_CONTEXT;                                \
-          NS_LOG_APPEND_FUNC_PREFIX;                            \
-          NS_LOG_APPEND_LEVEL_PREFIX (level);                   \
-          std::clog << msg << std::endl;                        \
-        }                                                       \
-    }                                                           \
-  while (false)
+ * Define a logging component with a mask.
+ *
+ * See LogComponent().
+ *
+ * \param name a string
+ * \param mask the default mask
+ */
+#define NS_LOG_COMPONENT_DEFINE_MASK(name, mask)                \
+  static ns3::LogComponent g_log = ns3::LogComponent (name, mask)
 
 /**
  * \ingroup logging
- * \param msg the message to log
  *
  * Use \ref NS_LOG to output a message of level LOG_ERROR.
+ *
+ * \param msg the message to log
  */
 #define NS_LOG_ERROR(msg) \
   NS_LOG (ns3::LOG_ERROR, msg)
 
 /**
  * \ingroup logging
- * \param msg the message to log
  *
  * Use \ref NS_LOG to output a message of level LOG_WARN.
+ *
+ * \param msg the message to log
  */
 #define NS_LOG_WARN(msg) \
   NS_LOG (ns3::LOG_WARN, msg)
 
 /**
  * \ingroup logging
- * \param msg the message to log
  *
  * Use \ref NS_LOG to output a message of level LOG_DEBUG.
+ *
+ * \param msg the message to log
  */
 #define NS_LOG_DEBUG(msg) \
   NS_LOG (ns3::LOG_DEBUG, msg)
 
 /**
  * \ingroup logging
- * \param msg the message to log
  *
  * Use \ref NS_LOG to output a message of level LOG_INFO.
+ *
+ * \param msg the message to log
  */
 #define NS_LOG_INFO(msg) \
   NS_LOG (ns3::LOG_INFO, msg)
@@ -301,99 +226,13 @@
 /**
  * \ingroup logging
  *
- * Output the name of the function.
+ * Use \ref NS_LOG to output a message of level LOG_LOGIC
  *
- * This should be used only in static functions; most member functions
- * should instead use NS_LOG_FUNCTION().
- */
-#define NS_LOG_FUNCTION_NOARGS()                                \
-  do                                                            \
-    {                                                           \
-      if (g_log.IsEnabled (ns3::LOG_FUNCTION))                  \
-        {                                                       \
-          NS_LOG_APPEND_TIME_PREFIX;                            \
-          NS_LOG_APPEND_NODE_PREFIX;                            \
-          NS_LOG_APPEND_CONTEXT;                                \
-          std::clog << g_log.Name () << ":"                     \
-                    << __FUNCTION__ << "()" << std::endl;       \
-        }                                                       \
-    }                                                           \
-  while (false)
-
-
-/**
- * \ingroup logging
- * \param parameters the parameters to output.
- *
- * If log level LOG_FUNCTION is enabled, this macro will output
- * all input parameters separated by ", ".
- *
- * Typical usage looks like:
- * \code
- * NS_LOG_FUNCTION (aNumber<<anotherNumber);
- * \endcode
- * And the output will look like:
- * \code
- * Component:Function (aNumber, anotherNumber)
- * \endcode
- *
- * To facilitate function tracing, most functions should begin with
- * (at least) NS_LOG_FUNCTION(this).  Static functions should use
- * NS_LOG_FUNCTION_NOARGS() instead.
- *
- */
-#define NS_LOG_FUNCTION(parameters)                             \
-  do                                                            \
-    {                                                           \
-      if (g_log.IsEnabled (ns3::LOG_FUNCTION))                  \
-        {                                                       \
-          NS_LOG_APPEND_TIME_PREFIX;                            \
-          NS_LOG_APPEND_NODE_PREFIX;                            \
-          NS_LOG_APPEND_CONTEXT;                                \
-          std::clog << g_log.Name () << ":"                     \
-                    << __FUNCTION__ << "(";                     \
-          ns3::ParameterLogger (std::clog) << parameters;       \
-          std::clog << ")" << std::endl;                        \
-        }                                                       \
-    }                                                           \
-  while (false)
-
-
-/**
- * \ingroup logging
  * \param msg the message to log
- *
- * Use \ref NS_LOG to output a message of level LOG_LOGIC
  */
 #define NS_LOG_LOGIC(msg) \
   NS_LOG (ns3::LOG_LOGIC, msg)
 
-/**
- * \ingroup logging
- * \param msg the message to log
- *
- * Output the requested message unconditionaly.
- */
-#define NS_LOG_UNCOND(msg)              \
-  do                                    \
-    {                                   \
-      std::clog << msg << std::endl;    \
-    }                                   \
-  while (false)
-
-#else /* LOG_ENABLE */
-
-#define NS_LOG(level, msg)
-#define NS_LOG_ERROR(msg)
-#define NS_LOG_WARN(msg)
-#define NS_LOG_DEBUG(msg)
-#define NS_LOG_INFO(msg)
-#define NS_LOG_FUNCTION_NOARGS()
-#define NS_LOG_FUNCTION(msg)
-#define NS_LOG_LOGIC(msg)
-#define NS_LOG_UNCOND(msg)
-
-#endif /* LOG_ENABLE */
 
 namespace ns3 {
 
@@ -416,41 +255,115 @@
 LogNodePrinter LogGetNodePrinter (void);
 
 
-class LogComponent {
+/**
+ * \ingroup logging
+ *
+ * A single log component configuration.
+ */
+class LogComponent
+{
 public:
-  LogComponent (const std::string & name);
-  void EnvVarCheck (const std::string & name);
-  bool IsEnabled (enum LogLevel level) const;
+  /**
+   * Constructor
+   *
+   * \param [in] name the user-visible name for this component.
+   * \param [in] mask LogLevels blocked for this LogComponent.  Blocking
+   *                  a log level helps prevent recursion by logging in
+   *                  functions which help implement the logging facility.
+   */
+  LogComponent (const std::string & name, const enum LogLevel mask = LOG_NONE);
+  /**
+   * Check if this LogComponent is enabled for \pname{level}
+   *
+   * \param [in] level the level to check for.
+   * \return true if \pname{level} is enabled.
+   */
+  bool IsEnabled (const enum LogLevel level) const;
+  /**
+   * Check if all levels are disabled.
+   *
+   * \return true if all levels are disabled.
+   */
   bool IsNoneEnabled (void) const;
-  void Enable (enum LogLevel level);
-  void Disable (enum LogLevel level);
+  /**
+   * Enable this LogComponent at \pname{level}
+   *
+   * \param [in] level the LogLevel to enable.
+   */
+  void Enable (const enum LogLevel level);
+  /**
+   * Disable logging at \pname{level} for this LogComponent.
+   *
+   * \param [in] level the LogLevel to disable.
+   */
+  void Disable (const enum LogLevel level);
+  /**
+   * Get the name of this LogComponent.
+   *
+   * \return the name of this LogComponent.
+   */
   char const *Name (void) const;
-  std::string GetLevelLabel(const enum LogLevel level) const;
+  /**
+   * Get the string label for the given LogLevel.
+   *
+   * \param [in] level the LogLevel to get the label for.
+   * \return the string label for \pname{level}
+   */
+  static std::string GetLevelLabel(const enum LogLevel level);
+  /**
+   * Prevent the enabling of a specific LogLevel.
+   *
+   * \param level the LogLevel to block
+   */
+  void SetMask (const enum LogLevel level);
 private:
-  int32_t     m_levels;
-  std::string m_name;
-};
+  /**
+   * Parse the `NS_LOG` environment variable for options relating to this
+   * LogComponent.
+   */
+  void EnvVarCheck (void);
+  
+  int32_t     m_levels;  //!< Enabled LogLevels
+  int32_t     m_mask;    //!< Blocked LogLevels
+  std::string m_name;    //!< LogComponent name
+
+};  // class LogComponent
 
-class ParameterLogger : public std::ostream
+/**
+ * \ingroup logging
+ *
+ * Insert `, ` when streaming function arguments.
+ */
+class ParameterLogger
 {
-  int m_itemNumber;
-  std::ostream &m_os;
+  bool m_first;        //!< First argument flag, doesn't get `, `.
+  std::ostream &m_os;  //!< Underlying output stream.
 public:
+  /**
+   * Constructor.
+   *
+   * \param [in] os Underlying output stream.
+   */
   ParameterLogger (std::ostream &os);
 
+  /**
+   * Write a function parameter on the output stream,
+   * separating paramters after the first by `,` strings.
+   *
+   * \param [in] param the function parameter
+   */
   template<typename T>
   ParameterLogger& operator<< (T param)
   {
-    switch (m_itemNumber)
+    if (m_first)
       {
-      case 0: // first parameter
         m_os << param;
-        break;
-      default: // parameter following a previous parameter
+        m_first = false;
+      }
+    else
+      {
         m_os << ", " << param;
-        break;
       }
-    m_itemNumber++;
     return *this;
   }
 };
diff -Naur ns-3.19/src/core/model/log-macros-disabled.h ns-3.20/src/core/model/log-macros-disabled.h
--- ns-3.19/src/core/model/log-macros-disabled.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.20/src/core/model/log-macros-disabled.h	2014-06-17 10:33:13.927995699 -0700
@@ -0,0 +1,50 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2014 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 NS3_LOG_MACROS_DISABLED_H
+#define NS3_LOG_MACROS_DISABLED_H
+
+#ifndef NS3_LOG_ENABLE
+
+#define NS_LOG_NOOP_INTERNAL(msg)           \
+  do                                        \
+    {                                       \
+      if (false)                            \
+        {                                   \
+          std::clog << msg;                 \
+        }                                   \
+    }                                       \
+  while (false)
+
+#define NS_LOG(level, msg) \
+        NS_LOG_NOOP_INTERNAL (msg)
+
+#define NS_LOG_FUNCTION_NOARGS()
+
+#define NS_LOG_FUNCTION(parameters) \
+        NS_LOG_NOOP_INTERNAL (parameters)
+
+#define NS_LOG_UNCOND(msg) \
+        NS_LOG_NOOP_INTERNAL (msg)
+
+
+#endif /* !NS3_LOG_ENABLE */
+
+#endif /* NS3_LOG_MACROS_DISABLED_H */
diff -Naur ns-3.19/src/core/model/log-macros-enabled.h ns-3.20/src/core/model/log-macros-enabled.h
--- ns-3.19/src/core/model/log-macros-enabled.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.20/src/core/model/log-macros-enabled.h	2014-06-17 10:33:13.927995699 -0700
@@ -0,0 +1,224 @@
+/* -*- 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>
+ */
+
+#ifndef NS3_LOG_MACROS_ENABLED_H
+#define NS3_LOG_MACROS_ENABLED_H
+
+#ifdef NS3_LOG_ENABLE
+
+
+/**
+ * \ingroup logging
+ * Append the simulation time to a log message.
+ * \internal
+ * Logging implementation macro; should not be called directly.
+ */
+#define NS_LOG_APPEND_TIME_PREFIX                               \
+  if (g_log.IsEnabled (ns3::LOG_PREFIX_TIME))                   \
+    {                                                           \
+      ns3::LogTimePrinter printer = ns3::LogGetTimePrinter ();  \
+      if (printer != 0)                                         \
+        {                                                       \
+          (*printer)(std::clog);                                \
+          std::clog << " ";                                     \
+        }                                                       \
+    }
+
+/**
+ * \ingroup logging
+ * Append the simulation node id to a log message.
+ * \internal
+ * Logging implementation macro; should not be called directly.
+ */
+#define NS_LOG_APPEND_NODE_PREFIX                               \
+  if (g_log.IsEnabled (ns3::LOG_PREFIX_NODE))                   \
+    {                                                           \
+      ns3::LogNodePrinter printer = ns3::LogGetNodePrinter ();  \
+      if (printer != 0)                                         \
+        {                                                       \
+          (*printer)(std::clog);                                \
+          std::clog << " ";                                     \
+        }                                                       \
+    }
+
+/**
+ * \ingroup logging
+ * Append the function name to a log message.
+ * \internal
+ * Logging implementation macro; should not be called directly.
+ */
+#define NS_LOG_APPEND_FUNC_PREFIX                               \
+  if (g_log.IsEnabled (ns3::LOG_PREFIX_FUNC))                   \
+    {                                                           \
+      std::clog << g_log.Name () << ":" <<                      \
+      __FUNCTION__ << "(): ";                                   \
+    }                                                           \
+
+/**
+ * \ingroup logging
+ * Append the log severity level to a log message.
+ * \internal
+ * Logging implementation macro; should not be called directly.
+ */
+#define NS_LOG_APPEND_LEVEL_PREFIX(level)                       \
+  if (g_log.IsEnabled (ns3::LOG_PREFIX_LEVEL))                  \
+    {                                                           \
+      std::clog << "[" << g_log.GetLevelLabel (level) << "] ";  \
+    }                                                           \
+
+
+#ifndef NS_LOG_APPEND_CONTEXT
+/**
+ * \ingroup logging
+ * Append the node id to a log message.
+ *
+ * This is implemented locally in `.cc` files because
+ * the the relevant variable is only known there.
+ *
+ * Preferred format is something like (assuming the node id is
+ * accessible from `var`:
+ * \code
+ *   if (var)
+ *     {
+ *       std::clog << "[node " << var->GetObject<Node> ()->GetId () << "] ";
+ *     }
+ * \endcode
+ *
+ * \internal
+ * Logging implementation macro; should not be called directly.
+ *
+ */
+#define NS_LOG_APPEND_CONTEXT
+#endif /* NS_LOG_APPEND_CONTEXT */
+
+
+/**
+ * \ingroup logging
+ *
+ * This macro allows you to log an arbitrary message at a specific
+ * log level.
+ *
+ * The log message is expected to be a C++ ostream
+ * message such as "my string" << aNumber << "my oth stream".
+ *
+ * Typical usage looks like:
+ * \code
+ * NS_LOG (LOG_DEBUG, "a number="<<aNumber<<", anotherNumber="<<anotherNumber);
+ * \endcode
+ *
+ * \param level the log level
+ * \param msg the message to log
+ * \internal
+ * Logging implementation macro; should not be called directly.
+ */
+#define NS_LOG(level, msg)                                      \
+  do                                                            \
+    {                                                           \
+      if (g_log.IsEnabled (level))                              \
+        {                                                       \
+          NS_LOG_APPEND_TIME_PREFIX;                            \
+          NS_LOG_APPEND_NODE_PREFIX;                            \
+          NS_LOG_APPEND_CONTEXT;                                \
+          NS_LOG_APPEND_FUNC_PREFIX;                            \
+          NS_LOG_APPEND_LEVEL_PREFIX (level);                   \
+          std::clog << msg << std::endl;                        \
+        }                                                       \
+    }                                                           \
+  while (false)
+
+/**
+ * \ingroup logging
+ *
+ * Output the name of the function.
+ *
+ * This should be used only in static functions; most member functions
+ * should instead use NS_LOG_FUNCTION().
+ */
+#define NS_LOG_FUNCTION_NOARGS()                                \
+  do                                                            \
+    {                                                           \
+      if (g_log.IsEnabled (ns3::LOG_FUNCTION))                  \
+        {                                                       \
+          NS_LOG_APPEND_TIME_PREFIX;                            \
+          NS_LOG_APPEND_NODE_PREFIX;                            \
+          NS_LOG_APPEND_CONTEXT;                                \
+          std::clog << g_log.Name () << ":"                     \
+                    << __FUNCTION__ << "()" << std::endl;       \
+        }                                                       \
+    }                                                           \
+  while (false)
+
+
+/**
+ * \ingroup logging
+ *
+ * If log level LOG_FUNCTION is enabled, this macro will output
+ * all input parameters separated by ", ".
+ *
+ * Typical usage looks like:
+ * \code
+ * NS_LOG_FUNCTION (aNumber<<anotherNumber);
+ * \endcode
+ * And the output will look like:
+ * \code
+ * Component:Function (aNumber, anotherNumber)
+ * \endcode
+ *
+ * To facilitate function tracing, most functions should begin with
+ * (at least) NS_LOG_FUNCTION(this).  Static functions should use
+ * NS_LOG_FUNCTION_NOARGS() instead.
+ *
+ * \param parameters the parameters to output.
+ */
+#define NS_LOG_FUNCTION(parameters)                             \
+  do                                                            \
+    {                                                           \
+      if (g_log.IsEnabled (ns3::LOG_FUNCTION))                  \
+        {                                                       \
+          NS_LOG_APPEND_TIME_PREFIX;                            \
+          NS_LOG_APPEND_NODE_PREFIX;                            \
+          NS_LOG_APPEND_CONTEXT;                                \
+          std::clog << g_log.Name () << ":"                     \
+                    << __FUNCTION__ << "(";                     \
+          ns3::ParameterLogger (std::clog) << parameters;       \
+          std::clog << ")" << std::endl;                        \
+        }                                                       \
+    }                                                           \
+  while (false)
+
+
+/**
+ * \ingroup logging
+ *
+ * Output the requested message unconditionaly.
+ *
+ * \param msg the message to log
+ */
+#define NS_LOG_UNCOND(msg)              \
+  do                                    \
+    {                                   \
+      std::clog << msg << std::endl;    \
+    }                                   \
+  while (false)
+
+
+#endif /* NS3_LOG_ENABLE */
+
+#endif /* NS3_LOG_MACROS_ENABLED_H */
diff -Naur ns-3.19/src/core/model/map-scheduler.cc ns-3.20/src/core/model/map-scheduler.cc
--- ns-3.19/src/core/model/map-scheduler.cc	2014-06-17 10:34:00.599635419 -0700
+++ ns-3.20/src/core/model/map-scheduler.cc	2014-06-17 10:33:13.929995684 -0700
@@ -29,8 +29,7 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (MapScheduler)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (MapScheduler);
 
 TypeId
 MapScheduler::GetTypeId (void)
diff -Naur ns-3.19/src/core/model/names.cc ns-3.20/src/core/model/names.cc
--- ns-3.19/src/core/model/names.cc	2014-06-17 10:34:00.600635411 -0700
+++ ns-3.20/src/core/model/names.cc	2014-06-17 10:33:13.930995676 -0700
@@ -25,8 +25,7 @@
 
 namespace ns3 {
 
-NS_LOG_COMPONENT_DEFINE ("Names")
-  ;
+NS_LOG_COMPONENT_DEFINE ("Names");
 
 class NameNode
 {
diff -Naur ns-3.19/src/core/model/names.h ns-3.20/src/core/model/names.h
--- ns-3.19/src/core/model/names.h	2014-06-17 10:34:00.600635411 -0700
+++ ns-3.20/src/core/model/names.h	2014-06-17 10:33:13.931995668 -0700
@@ -370,7 +370,7 @@
    *
    * \brief Non-templated internal version of Names::Find
    *
-   * \param name A string containing the path of the object to look for.
+   * \param path A string containing the path of the object to look for.
    *
    * \returns a smart pointer to the named object.
    */
@@ -381,7 +381,7 @@
    *
    * \brief Non-templated internal version of Names::Find
    *
-   * \param context A string containing the path to search for the object in.
+   * \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.
    *
    * \returns a smart pointer to the named object.
diff -Naur ns-3.19/src/core/model/nstime.h ns-3.20/src/core/model/nstime.h
--- ns-3.19/src/core/model/nstime.h	2014-06-17 10:34:00.602635395 -0700
+++ ns-3.20/src/core/model/nstime.h	2014-06-17 10:33:13.932995661 -0700
@@ -33,13 +33,11 @@
 
 namespace ns3 {
 
+class TimeWithUnit;
+  
 /**
  * \ingroup core
- * \defgroup time Time
- */
-/**
- * \ingroup time
- * \brief keep track of time values and allow control of global simulation resolution
+ * \brief Simulation virtual time values and global simulation resolution.
  *
  * This class defines all the classic C++ addition/subtraction
  * operators: +, -, +=, -=; and all the classic comparison operators:
@@ -99,7 +97,7 @@
     LAST = 10
   };
 
-  inline Time &operator = (const Time &o)
+  inline Time & operator = (const Time & o)
   {
     m_data = o.m_data;
     return *this;
@@ -112,7 +110,7 @@
 	Mark (this);
       }
   }
-  inline Time(const Time &o)
+  inline Time(const Time & o)
     : m_data (o.m_data)
   {
     if (g_markingTimes)
@@ -262,7 +260,7 @@
   /**
    *  \return -1,0,+1 if `this < o`, `this == o`, or `this > o`
    */
-  inline int Compare (const Time &o) const
+  inline int Compare (const Time & o) const
   {
     return (m_data < o.m_data) ? -1 : (m_data == o.m_data) ? 0 : 1;
   }
@@ -445,7 +443,7 @@
   {
     return To (timeUnit).GetDouble ();
   }
-  static inline Time From (const int64x64_t &from, enum Unit timeUnit)
+  static inline Time From (const int64x64_t & from, enum Unit timeUnit)
   {
     struct Information *info = PeekInformation (timeUnit);
     // DO NOT REMOVE this temporary variable. It's here
@@ -479,7 +477,7 @@
   {
     return int64x64_t (m_data);
   }
-  explicit inline Time (const int64x64_t &value)
+  explicit inline Time (const int64x64_t & value)
     : m_data (value.GetHigh ())
   {
     if (g_markingTimes)
@@ -487,11 +485,25 @@
 	Mark (this);
       }
   }
-  inline static Time From (const int64x64_t &value)
+  inline static Time From (const int64x64_t & value)
   {
     return Time (value);
   }
 
+  /**
+   * Attach a unit to a Time, to facilitate output in a specific unit.
+   *
+   * For example,
+   * \code
+   *   Time t (3.14e9);  // Pi seconds
+   *   std::cout << t.As (Time::MS) << std::endl;
+   * \endcode
+   * will print ``+3140.0ms``
+   *
+   * \param unit [in] The unit to use.
+   */
+  TimeWithUnit As (const enum Unit unit) const;
+
 private:
   /**
    * How to convert between other units and the current unit
@@ -516,11 +528,11 @@
   static inline struct Resolution *PeekResolution (void)
   {
     static struct Time::Resolution resolution = SetDefaultNsResolution ();
-    return &resolution;
+    return & resolution;
   }
   static inline struct Information *PeekInformation (enum Unit timeUnit)
   {
-    return &(PeekResolution ()->info[timeUnit]);
+    return & (PeekResolution ()->info[timeUnit]);
   }
 
   static struct Resolution SetDefaultNsResolution (void);
@@ -531,7 +543,7 @@
    *  Record all instances of Time, so we can rescale them when
    *  the resolution changes.
    *
-   *  \intern
+   *  \internal
    *
    *  We use a std::set so we can remove the record easily when
    *  ~Time() is called.
@@ -543,7 +555,7 @@
    *  [Stack Overflow](http://stackoverflow.com/questions/5526019/compile-errors-stdset-with-const-members)
    *  says otherwise, quoting the standard:
    *
-   *  > &sect;23.1/3 states that std::set key types must be assignable
+   *  > & sect;23.1/3 states that std::set key types must be assignable
    *  > and copy constructable; clearly a const type will not be assignable.
    */
   typedef std::set< Time * > MarkedTimes;
@@ -551,7 +563,7 @@
    *  Record of outstanding Time objects which will need conversion
    *  when the resolution is set.
    *
-   *  \intern
+   *  \internal
    *
    *  Use a classic static variable so we can check in Time ctors
    *  without a function call.
@@ -576,7 +588,7 @@
   /**
    *  Remove all MarkedTimes.
    *
-   *  \intern
+   *  \internal
    *  Has to be visible to the Simulator class, hence the friending.
    */
   static void ClearMarkedTimes ();
@@ -593,19 +605,23 @@
    */
   static void ConvertTimes (const enum Unit unit);
 
-  friend bool operator == (const Time &lhs, const Time &rhs);
-  friend bool operator != (const Time &lhs, const Time &rhs);
-  friend bool operator <= (const Time &lhs, const Time &rhs);
-  friend bool operator >= (const Time &lhs, const Time &rhs);
-  friend bool operator < (const Time &lhs, const Time &rhs);
-  friend bool operator > (const Time &lhs, const Time &rhs);
-  friend Time operator + (const Time &lhs, const Time &rhs);
-  friend Time operator - (const Time &lhs, const Time &rhs);
-  friend Time &operator += (Time &lhs, const Time &rhs);
-  friend Time &operator -= (Time &lhs, const Time &rhs);
-  friend Time Abs (const Time &time);
-  friend Time Max (const Time &ta, const Time &tb);
-  friend Time Min (const Time &ta, const Time &tb);
+  friend bool operator == (const Time & lhs, const Time & rhs);
+  friend bool operator != (const Time & lhs, const Time & rhs);
+  friend bool operator <= (const Time & lhs, const Time & rhs);
+  friend bool operator >= (const Time & lhs, const Time & rhs);
+  friend bool operator < (const Time & lhs, const Time & rhs);
+  friend bool operator > (const Time & lhs, const Time & rhs);
+  friend Time operator + (const Time & lhs, const Time & rhs);
+  friend Time operator - (const Time & lhs, const Time & rhs);
+  friend Time operator * (const Time & lhs, const int64_t & rhs);
+  friend Time operator * (const int64_t & lhs, const Time & rhs);
+  friend int64_t operator / (const Time & lhs, const Time & rhs);
+  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);
+  friend Time Abs (const Time & time);
+  friend Time Max (const Time & ta, const Time & tb);
+  friend Time Min (const Time & ta, const Time & tb);
 
 
   int64_t m_data;                   //!< Virtual time value, in the current unit.
@@ -613,105 +629,136 @@
 };  // class Time
 
 
-// Force static initialization of Time
+/// Force static initialization of Time
 static bool NS_UNUSED_GLOBAL (g_TimeStaticInit) = Time::StaticInit ();
 
 inline bool
-operator == (const Time &lhs, const Time &rhs)
+operator == (const Time & lhs, const Time & rhs)
 {
   return lhs.m_data == rhs.m_data;
 }
 inline bool
-operator != (const Time &lhs, const Time &rhs)
+operator != (const Time & lhs, const Time & rhs)
 {
   return lhs.m_data != rhs.m_data;
 }
 inline bool
-operator <= (const Time &lhs, const Time &rhs)
+operator <= (const Time & lhs, const Time & rhs)
 {
   return lhs.m_data <= rhs.m_data;
 }
 inline bool
-operator >= (const Time &lhs, const Time &rhs)
+operator >= (const Time & lhs, const Time & rhs)
 {
   return lhs.m_data >= rhs.m_data;
 }
 inline bool
-operator < (const Time &lhs, const Time &rhs)
+operator < (const Time & lhs, const Time & rhs)
 {
   return lhs.m_data < rhs.m_data;
 }
 inline bool
-operator > (const Time &lhs, const Time &rhs)
+operator > (const Time & lhs, const Time & rhs)
 {
   return lhs.m_data > rhs.m_data;
 }
-inline Time operator + (const Time &lhs, const Time &rhs)
+inline Time operator + (const Time & lhs, const Time & rhs)
 {
   return Time (lhs.m_data + rhs.m_data);
 }
-inline Time operator - (const Time &lhs, const Time &rhs)
+inline Time operator - (const Time & lhs, const Time & rhs)
 {
   return Time (lhs.m_data - rhs.m_data);
 }
-inline Time &operator += (Time &lhs, const Time &rhs)
+inline Time
+operator * (const Time & lhs, const int64_t & rhs)
+{
+  Time res = lhs;
+  res.m_data *= rhs;
+  return res;
+}
+inline Time
+operator * (const int64_t & lhs, const Time & rhs)
+{
+  Time res = rhs;
+  res.m_data *= lhs;
+  return res;
+}
+inline int64_t
+operator / (const Time & lhs, const Time & rhs)
+{
+  int64_t res = lhs.m_data / rhs.m_data;
+  return res;
+}
+inline Time
+operator / (const Time & lhs, const int64_t & rhs)
+{
+  Time res = lhs;
+  res.m_data /= rhs;
+  return res;
+}
+inline Time & operator += (Time & lhs, const Time & rhs)
 {
   lhs.m_data += rhs.m_data;
   return lhs;
 }
-inline Time &operator -= (Time &lhs, const Time &rhs)
+inline Time & operator -= (Time & lhs, const Time & rhs)
 {
   lhs.m_data -= rhs.m_data;
   return lhs;
 }
 
 /**
- * \anchor ns3-Time-Abs
- * \relates ns3::TimeUnit
- * Absolute value function for Time
- * \param time the input value
- * \returns the absolute value of the input value.
- */
-inline Time Abs (const Time &time)
-{
-  return Time ((time.m_data < 0) ? -time.m_data : time.m_data);
-}
-/**
- * \anchor ns3-Time-Max
- * \relates ns3::TimeUnit
+ * Max function for Time.
  * \param ta the first value
  * \param tb the seconds value
  * \returns the max of the two input values.
  */
-inline Time Max (const Time &ta, const Time &tb)
+inline Time Max (const Time & ta, const Time & tb)
 {
   return Time ((ta.m_data < tb.m_data) ? tb : ta);
 }
 /**
+ * Min function for Time.
  * \param ta the first value
  * \param tb the seconds value
  * \returns the min of the two input values.
  */
-inline Time Min (const Time &ta, const Time &tb)
+inline Time Min (const Time & ta, const Time & tb)
 {
   return Time ((ta.m_data > tb.m_data) ? tb : ta);
 }
 
+/**
+ * Absolute value function for Time
+ * \param time the input value
+ * \returns the absolute value of the input value.
+ */
+inline Time Abs (const Time & time)
+{
+  return Time ((time.m_data < 0) ? -time.m_data : time.m_data);
+}
 
 /**
  * \brief Time output streamer.
  * 
- * Generates output such as "3.96ns"
- * \relates ns3::Time
+ * Generates output such as "3.96ns".  Times are printed with the
+ * following format flags (independent of the stream flags):
+ *   - `showpos`
+ *   - `fixed`
+ *   - `left`
+ * The stream `width` and `precision` are ignored; Time output always
+ * includes ".0".
+ * \relates Time
  */
-std::ostream& operator<< (std::ostream& os, const Time & time);
+std::ostream & operator<< (std::ostream & os, const Time & time);
 /**
  * \brief Time input streamer
  *
  * Uses the Time::Time (const std::string &) constructor
- * \relates ns3::Time
+ * \relates Time
  */
-std::istream& operator>> (std::istream& is, Time & time);
+std::istream & operator>> (std::istream & is, Time & time);
 
 /**
  * \brief create ns3::Time instances in units of seconds.
@@ -722,7 +769,7 @@
  * Simulator::Schedule (Seconds (5.0), ...);
  * \endcode
  * \param seconds seconds value
- * \relates ns3::Time
+ * \relates Time
  */
 inline Time Seconds (double seconds)
 {
@@ -738,7 +785,7 @@
  * Simulator::Schedule (MilliSeconds (5), ...);
  * \endcode
  * \param ms milliseconds value
- * \relates ns3::Time
+ * \relates Time
  */
 inline Time MilliSeconds (uint64_t ms)
 {
@@ -753,7 +800,7 @@
  * Simulator::Schedule (MicroSeconds (5), ...);
  * \endcode
  * \param us microseconds value
- * \relates ns3::Time
+ * \relates Time
  */
 inline Time MicroSeconds (uint64_t us)
 {
@@ -768,7 +815,7 @@
  * Simulator::Schedule (NanoSeconds (5), ...);
  * \endcode
  * \param ns nanoseconds value
- * \relates ns3::Time
+ * \relates Time
  */
 inline Time NanoSeconds (uint64_t ns)
 {
@@ -783,7 +830,7 @@
  * Simulator::Schedule (PicoSeconds (5), ...);
  * \endcode
  * \param ps picoseconds value
- * \relates ns3::Time
+ * \relates Time
  */
 inline Time PicoSeconds (uint64_t ps)
 {
@@ -798,7 +845,7 @@
  * Simulator::Schedule (FemtoSeconds (5), ...);
  * \endcode
  * \param fs femtoseconds value
- * \relates ns3::Time
+ * \relates Time
  */
 inline Time FemtoSeconds (uint64_t fs)
 {
@@ -813,7 +860,7 @@
  * Simulator::Schedule (Minutes (5.0), ...);
  * \endcode
  * \param minutes mintues value
- * \relates ns3::Time
+ * \relates Time
  */
 inline Time Minutes (double minutes)
 {
@@ -828,7 +875,7 @@
  * Simulator::Schedule (Hours (5.0), ...);
  * \endcode
  * \param hours hours value
- * \relates ns3::Time
+ * \relates Time
  */
 inline Time Hours (double hours)
 {
@@ -843,7 +890,7 @@
  * Simulator::Schedule (Days (5.0), ...);
  * \endcode
  * \param days days value
- * \relates ns3::Time
+ * \relates Time
  */
 inline Time Days (double days)
 {
@@ -858,7 +905,7 @@
  * Simulator::Schedule (Years (5.0), ...);
  * \endcode
  * \param years years value
- * \relates ns3::Time
+ * \relates Time
  */
 inline Time Years (double years)
 {
@@ -867,7 +914,7 @@
 
 /**
  * \see Seconds(double)
- * \relates ns3::Time
+ * \relates Time
  */
 inline Time Seconds (int64x64_t seconds)
 {
@@ -875,7 +922,7 @@
 }
 /**
  * \see MilliSeconds(uint64_t)
- * \relates ns3::Time
+ * \relates Time
  */
 inline Time MilliSeconds (int64x64_t ms)
 {
@@ -883,7 +930,7 @@
 }
 /**
  * \see MicroSeconds(uint64_t)
- * \relates ns3::Time
+ * \relates Time
  */
 inline Time MicroSeconds (int64x64_t us)
 {
@@ -891,7 +938,7 @@
 }
 /**
  * \see NanoSeconds(uint64_t)
- * \relates ns3::Time
+ * \relates Time
  */
 inline Time NanoSeconds (int64x64_t ns)
 {
@@ -899,7 +946,7 @@
 }
 /**
  * \see PicoSeconds(uint64_t)
- * \relates ns3::Time
+ * \relates Time
  */
 inline Time PicoSeconds (int64x64_t ps)
 {
@@ -907,7 +954,7 @@
 }
 /**
  * \see FemtoSeconds(uint64_t)
- * \relates ns3::Time
+ * \relates Time
  */
 inline Time FemtoSeconds (int64x64_t fs)
 {
@@ -915,7 +962,7 @@
 }
 /**
  * \see Minutes(uint64_t)
- * \relates ns3::Time
+ * \relates Time
  */
 inline Time Minutes (int64x64_t minutes)
 {
@@ -923,7 +970,7 @@
 }
 /**
  * \see Minutes(uint64_t)
- * \relates ns3::Time
+ * \relates Time
  */
 inline Time Hours (int64x64_t hours)
 {
@@ -931,7 +978,7 @@
 }
 /**
  * \see Minutes(uint64_t)
- * \relates ns3::Time
+ * \relates Time
  */
 inline Time Days (int64x64_t days)
 {
@@ -939,7 +986,7 @@
 }
 /**
  * \see Minutes(uint64_t)
- * \relates ns3::Time
+ * \relates Time
  */
 inline Time Years (int64x64_t years)
 {
@@ -991,6 +1038,32 @@
   return MakeTimeChecker (min, Time::Max ());
 }
 
+/**
+ * \ingroup time
+ * \brief A Time with attached unit, to facilitate output in that unit.
+ */
+class TimeWithUnit
+{
+public:
+  /**
+   * Attach a unit to a Time
+   *
+   * \param [in] time The time.
+   * \param [in] unit The unit to use for output
+   */
+  TimeWithUnit (const Time time, const Time::Unit unit)
+    : m_time (time),
+      m_unit (unit)
+  { };
+
+private:
+  Time m_time;        //!< The time
+  Time::Unit m_unit;  //!< The unit to use in output
+
+  /// Output streamer
+  friend std::ostream & operator << (std::ostream & os, const TimeWithUnit & time);
+
+};  // class TimeWithUnit
 
 } // namespace ns3
 
diff -Naur ns-3.19/src/core/model/object-base.cc ns-3.20/src/core/model/object-base.cc
--- ns-3.19/src/core/model/object-base.cc	2014-06-17 10:34:00.602635395 -0700
+++ ns-3.20/src/core/model/object-base.cc	2014-06-17 10:33:13.933995653 -0700
@@ -31,8 +31,7 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (ObjectBase)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (ObjectBase);
 
 static TypeId
 GetObjectIid (void)
@@ -76,13 +75,29 @@
           struct TypeId::AttributeInformation info = tid.GetAttribute(i);
           NS_LOG_DEBUG ("try to construct \""<< tid.GetName ()<<"::"<<
                         info.name <<"\"");
+          // is this attribute stored in this AttributeConstructionList instance ?
+          Ptr<AttributeValue> value = attributes.Find(info.checker);
+          // See if this attribute should not be set here in the
+          // constructor.
           if (!(info.flags & TypeId::ATTR_CONSTRUCT))
             {
-              continue;
+              // Handle this attribute if it should not be 
+              // set here.
+              if (value == 0)
+                {
+                  // Skip this attribute if it's not in the
+                  // AttributeConstructionList.
+                  continue;
+                }              
+              else
+                {
+                  // This is an error because this attribute is not
+                  // settable in its constructor but is present in
+                  // the AttributeConstructionList.
+                  NS_FATAL_ERROR ("Attribute name="<<info.name<<" tid="<<tid.GetName () << ": initial value cannot be set using attributes");
+                }
             }
           bool found = false;
-          // is this attribute stored in this AttributeConstructionList instance ?
-          Ptr<AttributeValue> value = attributes.Find(info.checker);
           if (value != 0)
             {
               // We have a matching attribute value.
diff -Naur ns-3.19/src/core/model/object-base.h ns-3.20/src/core/model/object-base.h
--- ns-3.19/src/core/model/object-base.h	2014-06-17 10:34:00.602635395 -0700
+++ ns-3.20/src/core/model/object-base.h	2014-06-17 10:33:13.933995653 -0700
@@ -26,23 +26,14 @@
 #include <list>
 
 /**
+ * \ingroup object
  * \brief Register the class in the ns-3 factory.
  *
  * This macro should be invoked once for every class which
  * defines a new GetTypeId method.
  *
- * Given a class Foo, the .cc implementation should begin
- *
- * \code
- *   NS_OBJECT_ENSURE_REGISTERED (Foo)
- *     ;
- * \endcode
- *
  * If the class is in a namespace, then the macro call should also be
  * in the namespace.
- *
- * Note the closing ';' is not on the same line;  this prevents 
- * Doxygen from spuriously warning that the macro invocation is undocumented.
  */
 #define NS_OBJECT_ENSURE_REGISTERED(type)       \
   static struct X ## type ## RegistrationClass      \
diff -Naur ns-3.19/src/core/model/object.cc ns-3.20/src/core/model/object.cc
--- ns-3.19/src/core/model/object.cc	2014-06-17 10:34:00.605635372 -0700
+++ ns-3.20/src/core/model/object.cc	2014-06-17 10:33:13.936995630 -0700
@@ -41,8 +41,7 @@
  *         The Object implementation
  *********************************************************************/
 
-NS_OBJECT_ENSURE_REGISTERED (Object)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (Object);
 
 Object::AggregateIterator::AggregateIterator ()
   : m_object (0),
diff -Naur ns-3.19/src/core/model/object-factory.cc ns-3.20/src/core/model/object-factory.cc
--- ns-3.19/src/core/model/object-factory.cc	2014-06-17 10:34:00.603635387 -0700
+++ ns-3.20/src/core/model/object-factory.cc	2014-06-17 10:33:13.933995653 -0700
@@ -23,8 +23,7 @@
 
 namespace ns3 {
 
-NS_LOG_COMPONENT_DEFINE("ObjectFactory")
-  ;
+NS_LOG_COMPONENT_DEFINE("ObjectFactory");
 
 ObjectFactory::ObjectFactory ()
 {
diff -Naur ns-3.19/src/core/model/object.h ns-3.20/src/core/model/object.h
--- ns-3.19/src/core/model/object.h	2014-06-17 10:34:00.606635364 -0700
+++ ns-3.20/src/core/model/object.h	2014-06-17 10:33:13.936995630 -0700
@@ -46,6 +46,7 @@
 /**
  * \ingroup core
  * \defgroup object Object
+ * \brief Base classes which provides memory management and object aggregation.
  */
 /**
  * \ingroup object
diff -Naur ns-3.19/src/core/model/ptr.h ns-3.20/src/core/model/ptr.h
--- ns-3.19/src/core/model/ptr.h	2014-06-17 10:34:00.607635357 -0700
+++ ns-3.20/src/core/model/ptr.h	2014-06-17 10:33:13.937995622 -0700
@@ -30,6 +30,7 @@
 /**
  * \ingroup core
  * \defgroup ptr Smart Pointer
+ * \brief Heap memory management.
  */
 /**
  * \ingroup ptr
diff -Naur ns-3.19/src/core/model/random-variable.cc ns-3.20/src/core/model/random-variable.cc
--- ns-3.19/src/core/model/random-variable.cc	2014-06-17 10:34:00.610635334 -0700
+++ ns-3.20/src/core/model/random-variable.cc	2014-06-17 10:33:13.940995599 -0700
@@ -44,8 +44,7 @@
 // -----------------------------------------------------------------------------
 // RandomVariableBase methods
 
-NS_LOG_COMPONENT_DEFINE ("RandomVariable")
-  ;
+NS_LOG_COMPONENT_DEFINE ("RandomVariable");
 
 /** \ingroup legacyrandom */
 class RandomVariableBase
@@ -1362,7 +1361,7 @@
    * \brief Constructor
    *
    * Creates a generator that returns successive elements of the d array
-   * on successive calls to ::Value().  Note that the d pointer is copied
+   * on successive calls to GetValue().  Note that the d pointer is copied
    * for use by the generator (shallow-copy), not its contents, so the
    * contents of the array d points to have to remain unchanged for the use
    * of DeterministicVariableImpl to be meaningful.
@@ -1861,7 +1860,7 @@
   ZipfVariableImpl (long n, double alpha);
 
   /**
-   * \A zipf variable with N=1 and alpha=0
+   * A zipf variable with N=1 and alpha=0
    */
   ZipfVariableImpl ();
 
@@ -1953,7 +1952,7 @@
   ZetaVariableImpl (double alpha);
 
   /**
-   * \A zipf variable with alpha=1.1
+   * A zipf variable with alpha=1.1
    */
   ZetaVariableImpl ();
 
diff -Naur ns-3.19/src/core/model/random-variable-stream.cc ns-3.20/src/core/model/random-variable-stream.cc
--- ns-3.19/src/core/model/random-variable-stream.cc	2014-06-17 10:34:00.608635349 -0700
+++ ns-3.20/src/core/model/random-variable-stream.cc	2014-06-17 10:33:13.938995614 -0700
@@ -40,8 +40,7 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (RandomVariableStream)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (RandomVariableStream);
 
 TypeId 
 RandomVariableStream::GetTypeId (void)
@@ -131,8 +130,7 @@
   return m_rng;
 }
 
-NS_OBJECT_ENSURE_REGISTERED(UniformRandomVariable)
-  ;
+NS_OBJECT_ENSURE_REGISTERED(UniformRandomVariable);
 
 TypeId 
 UniformRandomVariable::GetTypeId (void)
@@ -202,8 +200,7 @@
   return (uint32_t)GetValue (m_min, m_max + 1);
 }
 
-NS_OBJECT_ENSURE_REGISTERED(ConstantRandomVariable)
-  ;
+NS_OBJECT_ENSURE_REGISTERED(ConstantRandomVariable);
 
 TypeId 
 ConstantRandomVariable::GetTypeId (void)
@@ -257,8 +254,7 @@
   return (uint32_t)GetValue (m_constant);
 }
 
-NS_OBJECT_ENSURE_REGISTERED(SequentialRandomVariable)
-  ;
+NS_OBJECT_ENSURE_REGISTERED(SequentialRandomVariable);
 
 TypeId 
 SequentialRandomVariable::GetTypeId (void)
@@ -357,8 +353,7 @@
   return (uint32_t)GetValue ();
 }
 
-NS_OBJECT_ENSURE_REGISTERED(ExponentialRandomVariable)
-  ;
+NS_OBJECT_ENSURE_REGISTERED(ExponentialRandomVariable);
 
 TypeId 
 ExponentialRandomVariable::GetTypeId (void)
@@ -439,8 +434,7 @@
   return (uint32_t)GetValue (m_mean, m_bound);
 }
 
-NS_OBJECT_ENSURE_REGISTERED(ParetoRandomVariable)
-  ;
+NS_OBJECT_ENSURE_REGISTERED(ParetoRandomVariable);
 
 TypeId 
 ParetoRandomVariable::GetTypeId (void)
@@ -535,8 +529,7 @@
   return (uint32_t)GetValue (m_mean, m_shape, m_bound);
 }
 
-NS_OBJECT_ENSURE_REGISTERED(WeibullRandomVariable)
-  ;
+NS_OBJECT_ENSURE_REGISTERED(WeibullRandomVariable);
 
 TypeId 
 WeibullRandomVariable::GetTypeId (void)
@@ -629,8 +622,7 @@
   return (uint32_t)GetValue (m_scale, m_shape, m_bound);
 }
 
-NS_OBJECT_ENSURE_REGISTERED(NormalRandomVariable)
-  ;
+NS_OBJECT_ENSURE_REGISTERED(NormalRandomVariable);
 
 const double NormalRandomVariable::INFINITE_VALUE = 1e307;
 
@@ -749,8 +741,7 @@
   return (uint32_t)GetValue (m_mean, m_variance, m_bound);
 }
 
-NS_OBJECT_ENSURE_REGISTERED(LogNormalRandomVariable)
-  ;
+NS_OBJECT_ENSURE_REGISTERED(LogNormalRandomVariable);
 
 TypeId 
 LogNormalRandomVariable::GetTypeId (void)
@@ -869,8 +860,7 @@
   return (uint32_t)GetValue (m_mu, m_sigma);
 }
 
-NS_OBJECT_ENSURE_REGISTERED(GammaRandomVariable)
-  ;
+NS_OBJECT_ENSURE_REGISTERED(GammaRandomVariable);
 
 TypeId 
 GammaRandomVariable::GetTypeId (void)
@@ -1045,8 +1035,7 @@
     }
 }
 
-NS_OBJECT_ENSURE_REGISTERED(ErlangRandomVariable)
-  ;
+NS_OBJECT_ENSURE_REGISTERED(ErlangRandomVariable);
 
 TypeId 
 ErlangRandomVariable::GetTypeId (void)
@@ -1157,8 +1146,7 @@
     }
 }
 
-NS_OBJECT_ENSURE_REGISTERED(TriangularRandomVariable)
-  ;
+NS_OBJECT_ENSURE_REGISTERED(TriangularRandomVariable);
 
 TypeId 
 TriangularRandomVariable::GetTypeId (void)
@@ -1252,8 +1240,7 @@
   return (uint32_t)GetValue (m_mean, m_min, m_max);
 }
 
-NS_OBJECT_ENSURE_REGISTERED(ZipfRandomVariable)
-  ;
+NS_OBJECT_ENSURE_REGISTERED(ZipfRandomVariable);
 
 TypeId 
 ZipfRandomVariable::GetTypeId (void)
@@ -1343,8 +1330,7 @@
   return (uint32_t)GetValue (m_n, m_alpha);
 }
 
-NS_OBJECT_ENSURE_REGISTERED(ZetaRandomVariable)
-  ;
+NS_OBJECT_ENSURE_REGISTERED(ZetaRandomVariable);
 
 TypeId 
 ZetaRandomVariable::GetTypeId (void)
@@ -1427,8 +1413,7 @@
   return (uint32_t)GetValue (m_alpha);
 }
 
-NS_OBJECT_ENSURE_REGISTERED(DeterministicRandomVariable)
-  ;
+NS_OBJECT_ENSURE_REGISTERED(DeterministicRandomVariable);
 
 TypeId 
 DeterministicRandomVariable::GetTypeId (void)
@@ -1500,8 +1485,7 @@
   return (uint32_t)GetValue ();
 }
 
-NS_OBJECT_ENSURE_REGISTERED(EmpiricalRandomVariable)
-  ;
+NS_OBJECT_ENSURE_REGISTERED(EmpiricalRandomVariable);
 
 // ValueCDF methods
 EmpiricalRandomVariable::ValueCDF::ValueCDF ()
diff -Naur ns-3.19/src/core/model/realtime-simulator-impl.cc ns-3.20/src/core/model/realtime-simulator-impl.cc
--- ns-3.19/src/core/model/realtime-simulator-impl.cc	2014-06-17 10:34:00.611635326 -0700
+++ ns-3.20/src/core/model/realtime-simulator-impl.cc	2014-06-17 10:33:13.942995584 -0700
@@ -43,8 +43,7 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (RealtimeSimulatorImpl)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (RealtimeSimulatorImpl);
 
 TypeId
 RealtimeSimulatorImpl::GetTypeId (void)
diff -Naur ns-3.19/src/core/model/scheduler.cc ns-3.20/src/core/model/scheduler.cc
--- ns-3.19/src/core/model/scheduler.cc	2014-06-17 10:34:00.614635302 -0700
+++ ns-3.20/src/core/model/scheduler.cc	2014-06-17 10:33:13.944995568 -0700
@@ -26,8 +26,7 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (Scheduler)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (Scheduler);
 
 Scheduler::~Scheduler ()
 {
diff -Naur ns-3.19/src/core/model/scheduler.h ns-3.20/src/core/model/scheduler.h
--- ns-3.19/src/core/model/scheduler.h	2014-06-17 10:34:00.614635302 -0700
+++ ns-3.20/src/core/model/scheduler.h	2014-06-17 10:33:13.945995560 -0700
@@ -31,6 +31,7 @@
 /**
  * \ingroup core
  * \defgroup scheduler Scheduler and Events
+ * \brief Manage the event list by creating and scheduling events.
  */
 /**
  * \ingroup scheduler
diff -Naur ns-3.19/src/core/model/simulator.cc ns-3.20/src/core/model/simulator.cc
--- ns-3.19/src/core/model/simulator.cc	2014-06-17 10:34:00.616635287 -0700
+++ ns-3.20/src/core/model/simulator.cc	2014-06-17 10:33:13.947995545 -0700
@@ -45,15 +45,15 @@
 
 namespace ns3 {
 
-GlobalValue g_simTypeImpl = GlobalValue ("SimulatorImplementationType", 
-                                         "The object class to use as the simulator implementation",
-                                         StringValue ("ns3::DefaultSimulatorImpl"),
-                                         MakeStringChecker ());
+static GlobalValue g_simTypeImpl = GlobalValue ("SimulatorImplementationType",
+                                                "The object class to use as the simulator implementation",
+                                                StringValue ("ns3::DefaultSimulatorImpl"),
+                                                MakeStringChecker ());
 
-GlobalValue g_schedTypeImpl = GlobalValue ("SchedulerType", 
-                                           "The object class to use as the scheduler implementation",
-                                           TypeIdValue (MapScheduler::GetTypeId ()),
-                                           MakeTypeIdChecker ());
+static GlobalValue g_schedTypeImpl = GlobalValue ("SchedulerType",
+                                                  "The object class to use as the scheduler implementation",
+                                                  TypeIdValue (MapScheduler::GetTypeId ()),
+                                                  MakeTypeIdChecker ());
 
 static void
 TimePrinter (std::ostream &os)
diff -Naur ns-3.19/src/core/model/simulator.h ns-3.20/src/core/model/simulator.h
--- ns-3.19/src/core/model/simulator.h	2014-06-17 10:34:00.616635287 -0700
+++ ns-3.20/src/core/model/simulator.h	2014-06-17 10:33:13.947995545 -0700
@@ -40,6 +40,7 @@
 /**
  * \ingroup core
  * \defgroup simulator Simulator
+ * \brief Control the virtual time and the execution of simulation events. 
  */
 /**
  * \ingroup simulator
diff -Naur ns-3.19/src/core/model/string.h ns-3.20/src/core/model/string.h
--- ns-3.19/src/core/model/string.h	2014-06-17 10:34:00.617635279 -0700
+++ ns-3.20/src/core/model/string.h	2014-06-17 10:33:13.948995537 -0700
@@ -15,7 +15,6 @@
  * This class can be used to hold variables of type string,
  * that is, either char * or std::string.
  */
-
 ATTRIBUTE_VALUE_DEFINE_WITH_NAME (std::string, String);
 ATTRIBUTE_ACCESSOR_DEFINE (String);
 ATTRIBUTE_CHECKER_DEFINE (String);
diff -Naur ns-3.19/src/core/model/synchronizer.cc ns-3.20/src/core/model/synchronizer.cc
--- ns-3.19/src/core/model/synchronizer.cc	2014-06-17 10:34:00.618635272 -0700
+++ ns-3.20/src/core/model/synchronizer.cc	2014-06-17 10:33:13.948995537 -0700
@@ -23,8 +23,7 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (Synchronizer)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (Synchronizer);
 
 TypeId 
 Synchronizer::GetTypeId (void)
diff -Naur ns-3.19/src/core/model/test.cc ns-3.20/src/core/model/test.cc
--- ns-3.19/src/core/model/test.cc	2014-06-17 10:34:00.621635249 -0700
+++ ns-3.20/src/core/model/test.cc	2014-06-17 10:33:13.952995506 -0700
@@ -30,8 +30,7 @@
 
 namespace ns3 {
 
-NS_LOG_COMPONENT_DEFINE ("Test")
-  ;
+NS_LOG_COMPONENT_DEFINE ("Test");
 
 bool
 TestDoubleIsEqual (const double x1, const double x2, const double epsilon)
@@ -73,6 +72,18 @@
   std::string file;
   int32_t line;
 };
+std::ostream & operator << (std::ostream & os, const TestCaseFailure & failure)
+{
+  os << "    test=\""  << failure.cond
+     << "\" actual=\"" << failure.actual
+     << "\" limit=\""  << failure.limit
+     << "\" in=\""     << failure.file
+     << ":"            << failure.line 
+     << "\" "          << failure.message;
+
+  return os;
+}
+
 struct TestCase::Result
 {
   Result ();
@@ -244,6 +255,12 @@
   NS_LOG_FUNCTION (this);
   return m_name;
 }
+TestCase *
+TestCase::GetParent () const
+{
+  return m_parent;
+}
+
 void
 TestCase::ReportTestFailure (std::string cond, std::string actual, 
                              std::string limit, std::string message, 
@@ -592,10 +609,7 @@
         {
           for (uint32_t i = 0; i < test->m_result->failure.size (); i++)
             {
-              TestCaseFailure failure = test->m_result->failure[i];
-              *os << Indent (level) << "    got=\"" << failure.cond << "\" expected=\"" 
-                  << failure.actual << "\" in=\"" << failure.file << ":" << failure.line 
-                  << "\" " << failure.message << std::endl;
+              *os << Indent (level) << test->m_result->failure[i] << std::endl;
             }
           for (uint32_t i = 0; i < test->m_children.size (); i++)
             {
diff -Naur ns-3.19/src/core/model/test.h ns-3.20/src/core/model/test.h
--- ns-3.19/src/core/model/test.h	2014-06-17 10:34:00.622635241 -0700
+++ ns-3.20/src/core/model/test.h	2014-06-17 10:33:13.953995499 -0700
@@ -31,6 +31,12 @@
 #include "system-wall-clock-ms.h"
 #include "deprecated.h"
 
+/**
+ * \ingroup core
+ * \defgroup testing Testing
+ * \brief Tools to define and execute unit tests.
+ */
+
 // 
 // Note on below macros:
 //
@@ -42,9 +48,9 @@
 //
 
 /**
+ * \ingroup testing
+ * \brief Check if we should assert on errors, and do so
  * \internal
- *
- * Check if we should assert on errors, and do so
  */
 #define ASSERT_ON_FAILURE                       \
   do {                                          \
@@ -55,9 +61,9 @@
   } while (false)
 
 /**
+ * \ingroup testing
+ * \brief If we shouldn't continue on errors, return
  * \internal
- *
- * If we shouldn't continue on errors, return
  */
 #define CONTINUE_ON_FAILURE                                             \
   do {                                                                  \
@@ -68,9 +74,9 @@
   } while (false)
 
 /**
+ * \ingroup testing
+ * \brief If we shouldn't continue on errors, return test status
  * \internal
- *
- * If we shouldn't continue on errors, return test status
  */
 #define CONTINUE_ON_FAILURE_RETURNS_BOOL                                \
   do {                                                                  \
@@ -87,6 +93,9 @@
 // ===========================================================================
 
 /**
+ * \ingroup testing
+ * \brief Test that an actual and expected (limit) value are equal and report
+ * and abort if not.
  * \internal
  */
 #define NS_TEST_ASSERT_MSG_EQ_INTERNAL(actual, limit, msg, file, line)  \
@@ -109,6 +118,8 @@
   } while (false)
 
 /**
+ * \ingroup testing
+ *
  * \brief Test that an actual and expected (limit) value are equal and report
  * and abort if not.
  *
@@ -138,6 +149,9 @@
   NS_TEST_ASSERT_MSG_EQ_INTERNAL (actual, limit, msg, __FILE__, __LINE__)
 
 /**
+ * \ingroup testing
+ * \brief Test that an actual and expected (limit) value are equal and report
+ * and abort if not.
  * \internal
  */
 #define NS_TEST_ASSERT_MSG_EQ_RETURNS_BOOL_INTERNAL(actual, limit, msg, file, line) \
@@ -160,6 +174,8 @@
   } while (false)
 
 /**
+ * \ingroup testing
+ *
  * \brief Test that an actual and expected (limit) value are equal and report
  * and abort if not.
  *
@@ -192,10 +208,13 @@
   NS_TEST_ASSERT_MSG_EQ_RETURNS_BOOL_INTERNAL (actual, limit, msg, __FILE__, __LINE__)
 
 /**
- * \internal
+ * \ingroup testing
+ * \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.
+ * \internal
  */
 #define NS_TEST_EXPECT_MSG_EQ_INTERNAL(actual, limit, msg, file, line)  \
   do {                                                                  \
@@ -216,6 +235,8 @@
   } while (false)
 
 /**
+ * \ingroup testing
+ *
  * \brief Test that an actual and expected (limit) value are equal and report
  * if not.
  *
@@ -250,6 +271,9 @@
 // ===========================================================================
 
 /**
+ * \ingroup testing
+ * \brief Test that actual and expected (limit) values are equal to plus
+ * or minus some tolerance and report and abort if not.
  * \internal
  */
 #define NS_TEST_ASSERT_MSG_EQ_TOL_INTERNAL(actual, limit, tol, msg, file, line) \
@@ -276,18 +300,21 @@
   } while (false)
 
 /**
- * \brief Test that actual and expected (limit) values are equal to plus or minus
- * some tolerance and report and abort if not.
+ * \ingroup testing
+ *
+ * \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 won't 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.
+ * 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
@@ -297,18 +324,20 @@
  * 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.
+ * 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().
+ * equality down to the numeric_limits<double>::epsilon () range, consider
+ * using ns3::TestDoubleIsEqual().
+ *
+ * \note Mixing signed and unsigned types can lead to misleading results.
  *
  * The message is interpreted as a stream, for example:
  *
@@ -327,6 +356,9 @@
   NS_TEST_ASSERT_MSG_EQ_TOL_INTERNAL (actual, limit, tol, msg, __FILE__, __LINE__)
 
 /**
+ * \ingroup testing
+ * \brief Test that actual and expected (limit) values are equal to plus
+ * or minus some tolerance and report and abort if not.
  * \internal
  */
 #define NS_TEST_ASSERT_MSG_EQ_TOL_RETURNS_BOOL_INTERNAL(actual, limit, tol, msg, file, line) \
@@ -353,18 +385,21 @@
   } while (false)
 
 /**
- * \brief Test that actual and expected (limit) values are equal to plus or minus
- * some tolerance and report and abort if not.
+ * \ingroup testing
+ *
+ * \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 won't 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.
+ * 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
@@ -374,18 +409,20 @@
  * 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.
+ * 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().
+ * equality down to the numeric_limits<double>::epsilon () range,
+ * consider using ns3::TestDoubleIsEqual().
+ *
+ * \note Mixing signed and unsigned types can lead to misleading results.
  *
  * The message is interpreted as a stream, for example:
  *
@@ -407,10 +444,13 @@
   NS_TEST_ASSERT_MSG_EQ_TOL_RETURNS_BOOL_INTERNAL (actual, limit, tol, msg, __FILE__, __LINE__)
 
 /**
- * \internal
+ * \ingroup testing
+ * \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.
+ * \internal
  */
 #define NS_TEST_EXPECT_MSG_EQ_TOL_INTERNAL(actual, limit, tol, msg, file, line) \
   do {                                                                  \
@@ -435,17 +475,20 @@
   } while (false)
 
 /**
- * \brief Test that actual and expected (limit) values are equal to plus or minus
- * some tolerance and report if not.
+ * \ingroup testing
+ *
+ * \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 won't 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
+ * 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
@@ -456,18 +499,20 @@
  * 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.
+ * 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().
+ * equality down to the numeric_limits<double>::epsilon () range,
+ * consider using ns3::TestDoubleIsEqual().
+ *
+ * \note Mixing signed and unsigned types can lead to misleading results.
  *
  * The message is interpreted as a stream, for example:
  *
@@ -490,6 +535,9 @@
 // ===========================================================================
 
 /**
+ * \ingroup testing
+ * \brief Test that an actual and expected (limit) value are not equal and 
+ * report and abort if not.
  * \internal
  */
 #define NS_TEST_ASSERT_MSG_NE_INTERNAL(actual, limit, msg, file, line)  \
@@ -512,6 +560,8 @@
   } while (false)
 
 /**
+ * \ingroup testing
+ *
  * \brief Test that an actual and expected (limit) value are not equal and 
  * report and abort if not.
  *
@@ -540,6 +590,9 @@
   NS_TEST_ASSERT_MSG_NE_INTERNAL (actual, limit, msg, __FILE__, __LINE__)
 
 /**
+ * \ingroup testing
+ * \brief Test that an actual and expected (limit) value are not equal and 
+ * report and abort if not.
  * \internal
  */
 #define NS_TEST_ASSERT_MSG_NE_RETURNS_BOOL_INTERNAL(actual, limit, msg, file, line) \
@@ -562,6 +615,8 @@
   } while (false)
 
 /**
+ * \ingroup testing
+ *
  * \brief Test that an actual and expected (limit) value are not equal and 
  * report and abort if not.
  *
@@ -593,10 +648,13 @@
   NS_TEST_ASSERT_MSG_NE_RETURNS_BOOL_INTERNAL (actual, limit, msg, __FILE__, __LINE__)
 
 /**
- * \internal
+ * \ingroup testing
+ * \brief Test that an actual and expected (limit) value are not equal and 
+ * report if not.
  * 
  * Required to avoid use of return statement which allows use in methods 
  * (callbacks) returning void.
+ * \internal
  */
 #define NS_TEST_EXPECT_MSG_NE_INTERNAL(actual, limit, msg, file, line)  \
   do {                                                                  \
@@ -617,6 +675,8 @@
   } while (false)
 
 /**
+ * \ingroup testing
+ *
  * \brief Test that an actual and expected (limit) value are not equal and 
  * report if not.
  *
@@ -649,6 +709,9 @@
 // ===========================================================================
 
 /**
+ * \ingroup testing
+ * \brief Test that an actual value is less than a limit and report and abort
+ * if not.
  * \internal
  */
 #define NS_TEST_ASSERT_MSG_LT_INTERNAL(actual, limit, msg, file, line)  \
@@ -671,6 +734,8 @@
   } while (false)
 
 /**
+ * \ingroup testing
+ *
  * \brief Test that an actual value is less than a limit and report and abort
  * if not.
  *
@@ -689,10 +754,12 @@
   NS_TEST_ASSERT_MSG_LT_INTERNAL (actual, limit, msg, __FILE__, __LINE__)
 
 /**
- * \internal
+ * \ingroup testing
+ * \brief Test that an actual value is less than a limit and report if not.
  * 
  * Required to avoid use of return statement which allows use in methods 
  * (callbacks) returning void.
+ * \internal
  */
 #define NS_TEST_EXPECT_MSG_LT_INTERNAL(actual, limit, msg, file, line)  \
   do {                                                                  \
@@ -713,6 +780,8 @@
   } while (false)
 
 /**
+ * \ingroup testing
+ *
  * \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 
@@ -734,6 +803,9 @@
 // ===========================================================================
 
 /**
+ * \ingroup testing
+ * \brief Test that an actual value is greater than a limit and report and abort
+ * if not.
  * \internal
  */
 #define NS_TEST_ASSERT_MSG_GT_INTERNAL(actual, limit, msg, file, line)  \
@@ -756,6 +828,8 @@
   } while (false)
 
 /**
+ * \ingroup testing
+ *
  * \brief Test that an actual value is greater than a limit and report and abort
  * if not.
  *
@@ -774,10 +848,12 @@
   NS_TEST_ASSERT_MSG_GT_INTERNAL (actual, limit, msg, __FILE__, __LINE__)
 
 /**
- * \internal
+ * \ingroup testing
+ * \brief Test that an actual value is greater than a limit and report if not.
  * 
  * Required to avoid use of return statement which allows use in methods 
  * (callbacks) returning void.
+ * \internal
  */
 #define NS_TEST_EXPECT_MSG_GT_INTERNAL(actual, limit, msg, file, line)  \
   do {                                                                  \
@@ -798,6 +874,8 @@
   } while (false)
 
 /**
+ * \ingroup testing
+ *
  * \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 
@@ -840,6 +918,8 @@
 class TestRunnerImpl;
 
 /**
+ * \ingroup testing
+ *
  * \brief encapsulates test code
  *
  * To allow a new test to be run within the ns-3 test framework, users
@@ -864,6 +944,11 @@
    */
   virtual ~TestCase ();
 
+  /**
+   * \return name of this test
+   */
+  std::string GetName (void) const;  
+
 protected:
   /**
    * \param name the name of the new TestCase created
@@ -917,47 +1002,43 @@
   bool IsStatusSuccess (void) const;
 
   /**
-   * \return name of this test
+   * \return a pointer to the parent of this test
    */
-  std::string GetName (void) const;
-  
-  // The methods below are used only by test macros and should not
-  // be used by normal users.
+  TestCase * GetParent () const;
 
   /**
+   * @{
    * \internal
-   *
+   * The methods below are used only by test macros and should not
+   * be used by normal users.
+   */
+  /**
    * Log the failure of this TestCase.
    */
   void ReportTestFailure (std::string cond, std::string actual, 
                       std::string limit, std::string message, 
                       std::string file, int32_t line);
   /**
-   * \internal
-   *
    * \return should we assert on failure, per the TestSuite configuration
    */
   bool MustAssertOnFailure (void) const;
   /**
-   * \internal
-   *
    * \return should we continue on failure, per the TestSuite configuration
    */
   bool MustContinueOnFailure (void) const;
   /**
-   * \internal
    * \param filename the bare (no path) file name
    * \return the full path to filename in the data directory
    */
   std::string CreateDataDirFilename (std::string filename);
   /**
-   * \internal
    * \param filename the bare (no path) file name
    * \return the full path to filename in the temporary directory.
    *  If the TestRunner is invoked with "--update-data", this will be
    *  the data directory instead.
    */
   std::string CreateTempDirFilename (std::string filename);
+  /**@}*/
 private:
   friend class TestRunnerImpl;
 
@@ -983,26 +1064,23 @@
    */
   virtual void DoTeardown (void);
 
-  // forbid copying objects
   /**
-   * \internal
    * Private, to block copying
    */
   TestCase (TestCase& tc);
   /**
-   * \internal
    * Private, to block copying
    */
   TestCase& operator= (TestCase& tc);
 
   // methods called by TestRunnerImpl
   /**
-   * \internal
    * Actually run this TestCase
+   *
+   * \param runner The test runner implementation.
    */
   void Run (TestRunnerImpl *runner);
   /**
-   * \internal
    * \return the failure status of this TestCase and all it's children
    */
   bool IsFailed (void) const;
@@ -1020,6 +1098,8 @@
 };
 
 /**
+ * \ingroup testing
+ *
  * \brief A suite of tests to run.
  */
 class TestSuite : public TestCase
@@ -1061,6 +1141,8 @@
 };
 
 /**
+ * \ingroup testing
+ *
  * \brief A runner to execute tests.
  */
 class TestRunner
@@ -1069,14 +1151,16 @@
   /**
    * Run the requested suite of tests.
    *
-   * \param list of command line arguments
-   * \param argc number of elements in argv
+   * \param argc number of elements in \pname{argv}
+   * \param argv vector of command line arguments
    * \returns success status
    */
   static int Run (int argc, char *argv[]);
 };
 
 /**
+ * \ingroup testing
+ *
  * \brief A simple way to store test vectors (for stimulus or from responses)
  */
 template <typename T>
diff -Naur ns-3.19/src/core/model/time.cc ns-3.20/src/core/model/time.cc
--- ns-3.19/src/core/model/time.cc	2014-06-17 10:34:00.623635233 -0700
+++ ns-3.20/src/core/model/time.cc	2014-06-17 10:33:13.954995491 -0700
@@ -32,7 +32,7 @@
 #include <iomanip>  // showpos
 #include <sstream>
 
-NS_LOG_COMPONENT_DEFINE ("Time");
+NS_LOG_COMPONENT_DEFINE_MASK ("Time", ns3::LOG_PREFIX_TIME);
 
 namespace ns3 {
 
@@ -41,6 +41,7 @@
 Time::MarkedTimes * Time::g_markingTimes = 0;
 
 /**
+ * \internal
  * Get mutex for critical sections around modification of Time::g_markingTimes
  *
  * \relates Time
@@ -379,65 +380,53 @@
 }
 
 
+TimeWithUnit
+Time::As (const enum Unit unit) const
+{
+  return TimeWithUnit (*this, unit);
+}
+ 
+
 std::ostream&
 operator<< (std::ostream& os, const Time & time)
 {
+  os << time.As (Time::GetResolution ());
+  return os;
+}
+
+
+std::ostream &
+operator << (std::ostream & os, const TimeWithUnit & timeU)
+{
   std::string unit;
-  Time::Unit res = Time::GetResolution ();
-  switch (res)
+
+  switch (timeU.m_unit)
     {
-    case Time::S:
-      unit = "s";
-      break;
-    case Time::MS:
-      unit = "ms";
-      break;
-    case Time::US:
-      unit = "us";
-      break;
-    case Time::NS:
-      unit = "ns";
-      break;
-    case Time::PS:
-      unit = "ps";
-      break;
-    case Time::FS:
-      unit = "fs";
-      break;
-    case Time::MIN:
-      unit = "min";
-      break;
-    case Time::H:
-      unit = "h";
-      break;
-    case Time::D:
-      unit = "d";
-      break;
-    case Time::Y:
-      unit = "y";
-      break;
+    case Time::Y:    unit = "y";    break;
+    case Time::D:    unit = "d";    break;
+    case Time::H:    unit = "h";    break;
+    case Time::MIN:  unit = "min";  break;
+    case Time::S:    unit = "s";    break;
+    case Time::MS:   unit = "ms";   break;
+    case Time::US:   unit = "us";   break;
+    case Time::NS:   unit = "ns";   break;
+    case Time::PS:   unit = "ps";   break;
+    case Time::FS:   unit = "fs";   break;
+
     case Time::LAST:
+    default:
       NS_ABORT_MSG ("can't be reached");
       unit = "unreachable";
       break;
     }
-  int64_t v = time.ToInteger (res);
 
-  std::ios_base::fmtflags ff = os.flags ();
-  { // See bug 1737:  gcc libstc++ 4.2 bug
-    if (v == 0)
-      {
-        os << '+';
-      }
-    else
-      {
-        os << std::showpos;
-      }
-  }
-  os << v << ".0" << unit;
-  os.flags (ff);  // Restore stream flags
+  int64x64_t v = timeU.m_time.To (timeU.m_unit);
+  os << v << unit;
+  
   return os;
 }
+
+
 std::istream& operator>> (std::istream& is, Time & time)
 {
   std::string value;
diff -Naur ns-3.19/src/core/model/traced-value.h ns-3.20/src/core/model/traced-value.h
--- ns-3.19/src/core/model/traced-value.h	2014-06-17 10:34:00.626635210 -0700
+++ ns-3.20/src/core/model/traced-value.h	2014-06-17 10:33:13.957995468 -0700
@@ -34,6 +34,8 @@
 /**
  * \ingroup core
  * \defgroup tracing Tracing
+ * \brief Publish/subscribe tools to collect and report changes to any
+ *        values used by the various model components.
  */
 
 /**
diff -Naur ns-3.19/src/core/model/type-id.cc ns-3.20/src/core/model/type-id.cc
--- ns-3.19/src/core/model/type-id.cc	2014-06-17 10:34:00.626635210 -0700
+++ ns-3.20/src/core/model/type-id.cc	2014-06-17 10:33:13.957995468 -0700
@@ -34,8 +34,7 @@
 
 namespace ns3 {
 
-NS_LOG_COMPONENT_DEFINE ("TypeId")
-  ;
+NS_LOG_COMPONENT_DEFINE ("TypeId");
 
 // IidManager needs to be in ns3 namespace for NS_ASSERT and NS_LOG
 // to find g_log
diff -Naur ns-3.19/src/core/model/unix-system-condition.cc ns-3.20/src/core/model/unix-system-condition.cc
--- ns-3.19/src/core/model/unix-system-condition.cc	2014-06-17 10:34:00.630635179 -0700
+++ ns-3.20/src/core/model/unix-system-condition.cc	2014-06-17 10:33:13.961995437 -0700
@@ -30,7 +30,8 @@
 namespace ns3 {
 
 class SystemConditionPrivate {
-public: 
+public:
+  /// Conversion from ns to s.
   static const uint64_t NS_PER_SEC = (uint64_t)1000000000;
 
   SystemConditionPrivate ();
diff -Naur ns-3.19/src/core/model/unix-system-mutex.cc ns-3.20/src/core/model/unix-system-mutex.cc
--- ns-3.19/src/core/model/unix-system-mutex.cc	2014-06-17 10:34:00.630635179 -0700
+++ ns-3.20/src/core/model/unix-system-mutex.cc	2014-06-17 10:33:13.961995437 -0700
@@ -27,7 +27,7 @@
 #include "log.h"
 
 
-NS_LOG_COMPONENT_DEFINE ("SystemMutex");
+NS_LOG_COMPONENT_DEFINE_MASK ("SystemMutex", ns3::LOG_PREFIX_TIME);
 
 namespace ns3 {
 
diff -Naur ns-3.19/src/core/model/valgrind.h ns-3.20/src/core/model/valgrind.h
--- ns-3.19/src/core/model/valgrind.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.20/src/core/model/valgrind.h	2014-06-17 10:33:13.964995414 -0700
@@ -0,0 +1,5624 @@
+/* -*- c -*-
+   ----------------------------------------------------------------
+
+   Notice that the following BSD-style license applies to this one
+   file (valgrind.h) only.  The rest of Valgrind is licensed under the
+   terms of the GNU General Public License, version 2, unless
+   otherwise indicated.  See the COPYING file in the source
+   distribution for details.
+
+   ----------------------------------------------------------------
+
+   This file is part of Valgrind, a dynamic binary instrumentation
+   framework.
+
+   Copyright (C) 2000-2013 Julian Seward.  All rights reserved.
+
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions
+   are met:
+
+   1. Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+
+   2. The origin of this software must not be misrepresented; you must 
+      not claim that you wrote the original software.  If you use this 
+      software in a product, an acknowledgment in the product 
+      documentation would be appreciated but is not required.
+
+   3. Altered source versions must be plainly marked as such, and must
+      not be misrepresented as being the original software.
+
+   4. The name of the author may not be used to endorse or promote 
+      products derived from this software without specific prior written 
+      permission.
+
+   THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+   OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+   WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+   ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+   DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+   DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+   GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+   WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+   ----------------------------------------------------------------
+
+   Notice that the above BSD-style license applies to this one file
+   (valgrind.h) only.  The entire rest of Valgrind is licensed under
+   the terms of the GNU General Public License, version 2.  See the
+   COPYING file in the source distribution for details.
+
+   ---------------------------------------------------------------- 
+*/
+
+
+/* This file is for inclusion into client (your!) code.
+
+   You can use these macros to manipulate and query Valgrind's 
+   execution inside your own programs.
+
+   The resulting executables will still run without Valgrind, just a
+   little bit more slowly than they otherwise would, but otherwise
+   unchanged.  When not running on valgrind, each client request
+   consumes very few (eg. 7) instructions, so the resulting performance
+   loss is negligible unless you plan to execute client requests
+   millions of times per second.  Nevertheless, if that is still a
+   problem, you can compile with the NVALGRIND symbol defined (gcc
+   -DNVALGRIND) so that client requests are not even compiled in.  */
+
+#ifndef __VALGRIND_H
+#define __VALGRIND_H
+
+
+/* ------------------------------------------------------------------ */
+/* VERSION NUMBER OF VALGRIND                                         */
+/* ------------------------------------------------------------------ */
+
+/* Specify Valgrind's version number, so that user code can
+   conditionally compile based on our version number.  Note that these
+   were introduced at version 3.6 and so do not exist in version 3.5
+   or earlier.  The recommended way to use them to check for "version
+   X.Y or later" is (eg)
+
+#if defined(__VALGRIND_MAJOR__) && defined(__VALGRIND_MINOR__)   \
+    && (__VALGRIND_MAJOR__ > 3                                   \
+        || (__VALGRIND_MAJOR__ == 3 && __VALGRIND_MINOR__ >= 6))
+*/
+#define __VALGRIND_MAJOR__    3
+#define __VALGRIND_MINOR__    9
+
+
+#include <stdarg.h>
+
+/* Nb: this file might be included in a file compiled with -ansi.  So
+   we can't use C++ style "//" comments nor the "asm" keyword (instead
+   use "__asm__"). */
+
+/* Derive some tags indicating what the target platform is.  Note
+   that in this file we're using the compiler's CPP symbols for
+   identifying architectures, which are different to the ones we use
+   within the rest of Valgrind.  Note, __powerpc__ is active for both
+   32 and 64-bit PPC, whereas __powerpc64__ is only active for the
+   latter (on Linux, that is).
+
+   Misc note: how to find out what's predefined in gcc by default:
+   gcc -Wp,-dM somefile.c
+*/
+#undef PLAT_x86_darwin
+#undef PLAT_amd64_darwin
+#undef PLAT_x86_win32
+#undef PLAT_amd64_win64
+#undef PLAT_x86_linux
+#undef PLAT_amd64_linux
+#undef PLAT_ppc32_linux
+#undef PLAT_ppc64_linux
+#undef PLAT_arm_linux
+#undef PLAT_arm64_linux
+#undef PLAT_s390x_linux
+#undef PLAT_mips32_linux
+#undef PLAT_mips64_linux
+
+
+#if defined(__APPLE__) && defined(__i386__)
+#  define PLAT_x86_darwin 1
+#elif defined(__APPLE__) && defined(__x86_64__)
+#  define PLAT_amd64_darwin 1
+#elif defined(__MINGW32__) || defined(__CYGWIN32__) \
+      || (defined(_WIN32) && defined(_M_IX86))
+#  define PLAT_x86_win32 1
+#elif defined(__MINGW64__) || (defined(_WIN64) && defined(_M_X64))
+#  define PLAT_amd64_win64 1
+#elif defined(__linux__) && defined(__i386__)
+#  define PLAT_x86_linux 1
+#elif defined(__linux__) && defined(__x86_64__)
+#  define PLAT_amd64_linux 1
+#elif defined(__linux__) && defined(__powerpc__) && !defined(__powerpc64__)
+#  define PLAT_ppc32_linux 1
+#elif defined(__linux__) && defined(__powerpc__) && defined(__powerpc64__)
+#  define PLAT_ppc64_linux 1
+#elif defined(__linux__) && defined(__arm__) && !defined(__aarch64__)
+#  define PLAT_arm_linux 1
+#elif defined(__linux__) && defined(__aarch64__) && !defined(__arm__)
+#  define PLAT_arm64_linux 1
+#elif defined(__linux__) && defined(__s390__) && defined(__s390x__)
+#  define PLAT_s390x_linux 1
+#elif defined(__linux__) && defined(__mips__) && (__mips==64)
+#  define PLAT_mips64_linux 1
+#elif defined(__linux__) && defined(__mips__) && (__mips!=64)
+#  define PLAT_mips32_linux 1
+#else
+/* If we're not compiling for our target platform, don't generate
+   any inline asms.  */
+#  if !defined(NVALGRIND)
+#    define NVALGRIND 1
+#  endif
+#endif
+
+
+/* ------------------------------------------------------------------ */
+/* ARCHITECTURE SPECIFICS for SPECIAL INSTRUCTIONS.  There is nothing */
+/* in here of use to end-users -- skip to the next section.           */
+/* ------------------------------------------------------------------ */
+
+/*
+ * VALGRIND_DO_CLIENT_REQUEST(): a statement that invokes a Valgrind client
+ * request. Accepts both pointers and integers as arguments.
+ *
+ * VALGRIND_DO_CLIENT_REQUEST_STMT(): a statement that invokes a Valgrind
+ * client request that does not return a value.
+
+ * VALGRIND_DO_CLIENT_REQUEST_EXPR(): a C expression that invokes a Valgrind
+ * client request and whose value equals the client request result.  Accepts
+ * both pointers and integers as arguments.  Note that such calls are not
+ * necessarily pure functions -- they may have side effects.
+ */
+
+#define VALGRIND_DO_CLIENT_REQUEST(_zzq_rlval, _zzq_default,            \
+                                   _zzq_request, _zzq_arg1, _zzq_arg2,  \
+                                   _zzq_arg3, _zzq_arg4, _zzq_arg5)     \
+  do { (_zzq_rlval) = VALGRIND_DO_CLIENT_REQUEST_EXPR((_zzq_default),   \
+                        (_zzq_request), (_zzq_arg1), (_zzq_arg2),       \
+                        (_zzq_arg3), (_zzq_arg4), (_zzq_arg5)); } while (0)
+
+#define VALGRIND_DO_CLIENT_REQUEST_STMT(_zzq_request, _zzq_arg1,        \
+                           _zzq_arg2,  _zzq_arg3, _zzq_arg4, _zzq_arg5) \
+  do { (void) VALGRIND_DO_CLIENT_REQUEST_EXPR(0,                        \
+                    (_zzq_request), (_zzq_arg1), (_zzq_arg2),           \
+                    (_zzq_arg3), (_zzq_arg4), (_zzq_arg5)); } while (0)
+
+#if defined(NVALGRIND)
+
+/* Define NVALGRIND to completely remove the Valgrind magic sequence
+   from the compiled code (analogous to NDEBUG's effects on
+   assert()) */
+#define VALGRIND_DO_CLIENT_REQUEST_EXPR(                          \
+        _zzq_default, _zzq_request,                               \
+        _zzq_arg1, _zzq_arg2, _zzq_arg3, _zzq_arg4, _zzq_arg5)    \
+      (_zzq_default)
+
+#else  /* ! NVALGRIND */
+
+/* The following defines the magic code sequences which the JITter
+   spots and handles magically.  Don't look too closely at them as
+   they will rot your brain.
+
+   The assembly code sequences for all architectures is in this one
+   file.  This is because this file must be stand-alone, and we don't
+   want to have multiple files.
+
+   For VALGRIND_DO_CLIENT_REQUEST, we must ensure that the default
+   value gets put in the return slot, so that everything works when
+   this is executed not under Valgrind.  Args are passed in a memory
+   block, and so there's no intrinsic limit to the number that could
+   be passed, but it's currently five.
+   
+   The macro args are: 
+      _zzq_rlval    result lvalue
+      _zzq_default  default value (result returned when running on real CPU)
+      _zzq_request  request code
+      _zzq_arg1..5  request params
+
+   The other two macros are used to support function wrapping, and are
+   a lot simpler.  VALGRIND_GET_NR_CONTEXT returns the value of the
+   guest's NRADDR pseudo-register and whatever other information is
+   needed to safely run the call original from the wrapper: on
+   ppc64-linux, the R2 value at the divert point is also needed.  This
+   information is abstracted into a user-visible type, OrigFn.
+
+   VALGRIND_CALL_NOREDIR_* behaves the same as the following on the
+   guest, but guarantees that the branch instruction will not be
+   redirected: x86: call *%eax, amd64: call *%rax, ppc32/ppc64:
+   branch-and-link-to-r11.  VALGRIND_CALL_NOREDIR is just text, not a
+   complete inline asm, since it needs to be combined with more magic
+   inline asm stuff to be useful.
+*/
+
+/* ------------------------- x86-{linux,darwin} ---------------- */
+
+#if defined(PLAT_x86_linux)  ||  defined(PLAT_x86_darwin)  \
+    ||  (defined(PLAT_x86_win32) && defined(__GNUC__))
+
+typedef
+   struct { 
+      unsigned int nraddr; /* where's the code? */
+   }
+   OrigFn;
+
+#define __SPECIAL_INSTRUCTION_PREAMBLE                            \
+                     "roll $3,  %%edi ; roll $13, %%edi\n\t"      \
+                     "roll $29, %%edi ; roll $19, %%edi\n\t"
+
+#define VALGRIND_DO_CLIENT_REQUEST_EXPR(                          \
+        _zzq_default, _zzq_request,                               \
+        _zzq_arg1, _zzq_arg2, _zzq_arg3, _zzq_arg4, _zzq_arg5)    \
+  __extension__                                                   \
+  ({volatile unsigned int _zzq_args[6];                           \
+    volatile unsigned int _zzq_result;                            \
+    _zzq_args[0] = (unsigned int)(_zzq_request);                  \
+    _zzq_args[1] = (unsigned int)(_zzq_arg1);                     \
+    _zzq_args[2] = (unsigned int)(_zzq_arg2);                     \
+    _zzq_args[3] = (unsigned int)(_zzq_arg3);                     \
+    _zzq_args[4] = (unsigned int)(_zzq_arg4);                     \
+    _zzq_args[5] = (unsigned int)(_zzq_arg5);                     \
+    __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE               \
+                     /* %EDX = client_request ( %EAX ) */         \
+                     "xchgl %%ebx,%%ebx"                          \
+                     : "=d" (_zzq_result)                         \
+                     : "a" (&_zzq_args[0]), "0" (_zzq_default)    \
+                     : "cc", "memory"                             \
+                    );                                            \
+    _zzq_result;                                                  \
+  })
+
+#define VALGRIND_GET_NR_CONTEXT(_zzq_rlval)                       \
+  { volatile OrigFn* _zzq_orig = &(_zzq_rlval);                   \
+    volatile unsigned int __addr;                                 \
+    __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE               \
+                     /* %EAX = guest_NRADDR */                    \
+                     "xchgl %%ecx,%%ecx"                          \
+                     : "=a" (__addr)                              \
+                     :                                            \
+                     : "cc", "memory"                             \
+                    );                                            \
+    _zzq_orig->nraddr = __addr;                                   \
+  }
+
+#define VALGRIND_CALL_NOREDIR_EAX                                 \
+                     __SPECIAL_INSTRUCTION_PREAMBLE               \
+                     /* call-noredir *%EAX */                     \
+                     "xchgl %%edx,%%edx\n\t"
+
+#define VALGRIND_VEX_INJECT_IR()                                 \
+ do {                                                            \
+    __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE              \
+                     "xchgl %%edi,%%edi\n\t"                     \
+                     : : : "cc", "memory"                        \
+                    );                                           \
+ } while (0)
+
+#endif /* PLAT_x86_linux || PLAT_x86_darwin || (PLAT_x86_win32 && __GNUC__) */
+
+/* ------------------------- x86-Win32 ------------------------- */
+
+#if defined(PLAT_x86_win32) && !defined(__GNUC__)
+
+typedef
+   struct { 
+      unsigned int nraddr; /* where's the code? */
+   }
+   OrigFn;
+
+#if defined(_MSC_VER)
+
+#define __SPECIAL_INSTRUCTION_PREAMBLE                            \
+                     __asm rol edi, 3  __asm rol edi, 13          \
+                     __asm rol edi, 29 __asm rol edi, 19
+
+#define VALGRIND_DO_CLIENT_REQUEST_EXPR(                          \
+        _zzq_default, _zzq_request,                               \
+        _zzq_arg1, _zzq_arg2, _zzq_arg3, _zzq_arg4, _zzq_arg5)    \
+    valgrind_do_client_request_expr((uintptr_t)(_zzq_default),    \
+        (uintptr_t)(_zzq_request), (uintptr_t)(_zzq_arg1),        \
+        (uintptr_t)(_zzq_arg2), (uintptr_t)(_zzq_arg3),           \
+        (uintptr_t)(_zzq_arg4), (uintptr_t)(_zzq_arg5))
+
+static __inline uintptr_t
+valgrind_do_client_request_expr(uintptr_t _zzq_default, uintptr_t _zzq_request,
+                                uintptr_t _zzq_arg1, uintptr_t _zzq_arg2,
+                                uintptr_t _zzq_arg3, uintptr_t _zzq_arg4,
+                                uintptr_t _zzq_arg5)
+{
+    volatile uintptr_t _zzq_args[6];
+    volatile unsigned int _zzq_result;
+    _zzq_args[0] = (uintptr_t)(_zzq_request);
+    _zzq_args[1] = (uintptr_t)(_zzq_arg1);
+    _zzq_args[2] = (uintptr_t)(_zzq_arg2);
+    _zzq_args[3] = (uintptr_t)(_zzq_arg3);
+    _zzq_args[4] = (uintptr_t)(_zzq_arg4);
+    _zzq_args[5] = (uintptr_t)(_zzq_arg5);
+    __asm { __asm lea eax, _zzq_args __asm mov edx, _zzq_default
+            __SPECIAL_INSTRUCTION_PREAMBLE
+            /* %EDX = client_request ( %EAX ) */
+            __asm xchg ebx,ebx
+            __asm mov _zzq_result, edx
+    }
+    return _zzq_result;
+}
+
+#define VALGRIND_GET_NR_CONTEXT(_zzq_rlval)                       \
+  { volatile OrigFn* _zzq_orig = &(_zzq_rlval);                   \
+    volatile unsigned int __addr;                                 \
+    __asm { __SPECIAL_INSTRUCTION_PREAMBLE                        \
+            /* %EAX = guest_NRADDR */                             \
+            __asm xchg ecx,ecx                                    \
+            __asm mov __addr, eax                                 \
+    }                                                             \
+    _zzq_orig->nraddr = __addr;                                   \
+  }
+
+#define VALGRIND_CALL_NOREDIR_EAX ERROR
+
+#define VALGRIND_VEX_INJECT_IR()                                 \
+ do {                                                            \
+    __asm { __SPECIAL_INSTRUCTION_PREAMBLE                       \
+            __asm xchg edi,edi                                   \
+    }                                                            \
+ } while (0)
+
+#else
+#error Unsupported compiler.
+#endif
+
+#endif /* PLAT_x86_win32 */
+
+/* ------------------------ amd64-{linux,darwin} --------------- */
+
+#if defined(PLAT_amd64_linux)  ||  defined(PLAT_amd64_darwin)
+
+typedef
+   struct { 
+      unsigned long long int nraddr; /* where's the code? */
+   }
+   OrigFn;
+
+#define __SPECIAL_INSTRUCTION_PREAMBLE                            \
+                     "rolq $3,  %%rdi ; rolq $13, %%rdi\n\t"      \
+                     "rolq $61, %%rdi ; rolq $51, %%rdi\n\t"
+
+#define VALGRIND_DO_CLIENT_REQUEST_EXPR(                          \
+        _zzq_default, _zzq_request,                               \
+        _zzq_arg1, _zzq_arg2, _zzq_arg3, _zzq_arg4, _zzq_arg5)    \
+    __extension__                                                 \
+    ({ volatile unsigned long long int _zzq_args[6];              \
+    volatile unsigned long long int _zzq_result;                  \
+    _zzq_args[0] = (unsigned long long int)(_zzq_request);        \
+    _zzq_args[1] = (unsigned long long int)(_zzq_arg1);           \
+    _zzq_args[2] = (unsigned long long int)(_zzq_arg2);           \
+    _zzq_args[3] = (unsigned long long int)(_zzq_arg3);           \
+    _zzq_args[4] = (unsigned long long int)(_zzq_arg4);           \
+    _zzq_args[5] = (unsigned long long int)(_zzq_arg5);           \
+    __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE               \
+                     /* %RDX = client_request ( %RAX ) */         \
+                     "xchgq %%rbx,%%rbx"                          \
+                     : "=d" (_zzq_result)                         \
+                     : "a" (&_zzq_args[0]), "0" (_zzq_default)    \
+                     : "cc", "memory"                             \
+                    );                                            \
+    _zzq_result;                                                  \
+    })
+
+#define VALGRIND_GET_NR_CONTEXT(_zzq_rlval)                       \
+  { volatile OrigFn* _zzq_orig = &(_zzq_rlval);                   \
+    volatile unsigned long long int __addr;                       \
+    __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE               \
+                     /* %RAX = guest_NRADDR */                    \
+                     "xchgq %%rcx,%%rcx"                          \
+                     : "=a" (__addr)                              \
+                     :                                            \
+                     : "cc", "memory"                             \
+                    );                                            \
+    _zzq_orig->nraddr = __addr;                                   \
+  }
+
+#define VALGRIND_CALL_NOREDIR_RAX                                 \
+                     __SPECIAL_INSTRUCTION_PREAMBLE               \
+                     /* call-noredir *%RAX */                     \
+                     "xchgq %%rdx,%%rdx\n\t"
+
+#define VALGRIND_VEX_INJECT_IR()                                 \
+ do {                                                            \
+    __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE              \
+                     "xchgq %%rdi,%%rdi\n\t"                     \
+                     : : : "cc", "memory"                        \
+                    );                                           \
+ } while (0)
+
+#endif /* PLAT_amd64_linux || PLAT_amd64_darwin */
+
+/* ------------------------ ppc32-linux ------------------------ */
+
+#if defined(PLAT_ppc32_linux)
+
+typedef
+   struct { 
+      unsigned int nraddr; /* where's the code? */
+   }
+   OrigFn;
+
+#define __SPECIAL_INSTRUCTION_PREAMBLE                            \
+                    "rlwinm 0,0,3,0,31  ; rlwinm 0,0,13,0,31\n\t" \
+                    "rlwinm 0,0,29,0,31 ; rlwinm 0,0,19,0,31\n\t"
+
+#define VALGRIND_DO_CLIENT_REQUEST_EXPR(                          \
+        _zzq_default, _zzq_request,                               \
+        _zzq_arg1, _zzq_arg2, _zzq_arg3, _zzq_arg4, _zzq_arg5)    \
+                                                                  \
+    __extension__                                                 \
+  ({         unsigned int  _zzq_args[6];                          \
+             unsigned int  _zzq_result;                           \
+             unsigned int* _zzq_ptr;                              \
+    _zzq_args[0] = (unsigned int)(_zzq_request);                  \
+    _zzq_args[1] = (unsigned int)(_zzq_arg1);                     \
+    _zzq_args[2] = (unsigned int)(_zzq_arg2);                     \
+    _zzq_args[3] = (unsigned int)(_zzq_arg3);                     \
+    _zzq_args[4] = (unsigned int)(_zzq_arg4);                     \
+    _zzq_args[5] = (unsigned int)(_zzq_arg5);                     \
+    _zzq_ptr = _zzq_args;                                         \
+    __asm__ volatile("mr 3,%1\n\t" /*default*/                    \
+                     "mr 4,%2\n\t" /*ptr*/                        \
+                     __SPECIAL_INSTRUCTION_PREAMBLE               \
+                     /* %R3 = client_request ( %R4 ) */           \
+                     "or 1,1,1\n\t"                               \
+                     "mr %0,3"     /*result*/                     \
+                     : "=b" (_zzq_result)                         \
+                     : "b" (_zzq_default), "b" (_zzq_ptr)         \
+                     : "cc", "memory", "r3", "r4");               \
+    _zzq_result;                                                  \
+    })
+
+#define VALGRIND_GET_NR_CONTEXT(_zzq_rlval)                       \
+  { volatile OrigFn* _zzq_orig = &(_zzq_rlval);                   \
+    unsigned int __addr;                                          \
+    __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE               \
+                     /* %R3 = guest_NRADDR */                     \
+                     "or 2,2,2\n\t"                               \
+                     "mr %0,3"                                    \
+                     : "=b" (__addr)                              \
+                     :                                            \
+                     : "cc", "memory", "r3"                       \
+                    );                                            \
+    _zzq_orig->nraddr = __addr;                                   \
+  }
+
+#define VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11                   \
+                     __SPECIAL_INSTRUCTION_PREAMBLE               \
+                     /* branch-and-link-to-noredir *%R11 */       \
+                     "or 3,3,3\n\t"
+
+#define VALGRIND_VEX_INJECT_IR()                                 \
+ do {                                                            \
+    __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE              \
+                     "or 5,5,5\n\t"                              \
+                    );                                           \
+ } while (0)
+
+#endif /* PLAT_ppc32_linux */
+
+/* ------------------------ ppc64-linux ------------------------ */
+
+#if defined(PLAT_ppc64_linux)
+
+typedef
+   struct { 
+      unsigned long long int nraddr; /* where's the code? */
+      unsigned long long int r2;  /* what tocptr do we need? */
+   }
+   OrigFn;
+
+#define __SPECIAL_INSTRUCTION_PREAMBLE                            \
+                     "rotldi 0,0,3  ; rotldi 0,0,13\n\t"          \
+                     "rotldi 0,0,61 ; rotldi 0,0,51\n\t"
+
+#define VALGRIND_DO_CLIENT_REQUEST_EXPR(                          \
+        _zzq_default, _zzq_request,                               \
+        _zzq_arg1, _zzq_arg2, _zzq_arg3, _zzq_arg4, _zzq_arg5)    \
+                                                                  \
+  __extension__                                                   \
+  ({         unsigned long long int  _zzq_args[6];                \
+             unsigned long long int  _zzq_result;                 \
+             unsigned long long int* _zzq_ptr;                    \
+    _zzq_args[0] = (unsigned long long int)(_zzq_request);        \
+    _zzq_args[1] = (unsigned long long int)(_zzq_arg1);           \
+    _zzq_args[2] = (unsigned long long int)(_zzq_arg2);           \
+    _zzq_args[3] = (unsigned long long int)(_zzq_arg3);           \
+    _zzq_args[4] = (unsigned long long int)(_zzq_arg4);           \
+    _zzq_args[5] = (unsigned long long int)(_zzq_arg5);           \
+    _zzq_ptr = _zzq_args;                                         \
+    __asm__ volatile("mr 3,%1\n\t" /*default*/                    \
+                     "mr 4,%2\n\t" /*ptr*/                        \
+                     __SPECIAL_INSTRUCTION_PREAMBLE               \
+                     /* %R3 = client_request ( %R4 ) */           \
+                     "or 1,1,1\n\t"                               \
+                     "mr %0,3"     /*result*/                     \
+                     : "=b" (_zzq_result)                         \
+                     : "b" (_zzq_default), "b" (_zzq_ptr)         \
+                     : "cc", "memory", "r3", "r4");               \
+    _zzq_result;                                                  \
+  })
+
+#define VALGRIND_GET_NR_CONTEXT(_zzq_rlval)                       \
+  { volatile OrigFn* _zzq_orig = &(_zzq_rlval);                   \
+    unsigned long long int __addr;                                \
+    __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE               \
+                     /* %R3 = guest_NRADDR */                     \
+                     "or 2,2,2\n\t"                               \
+                     "mr %0,3"                                    \
+                     : "=b" (__addr)                              \
+                     :                                            \
+                     : "cc", "memory", "r3"                       \
+                    );                                            \
+    _zzq_orig->nraddr = __addr;                                   \
+    __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE               \
+                     /* %R3 = guest_NRADDR_GPR2 */                \
+                     "or 4,4,4\n\t"                               \
+                     "mr %0,3"                                    \
+                     : "=b" (__addr)                              \
+                     :                                            \
+                     : "cc", "memory", "r3"                       \
+                    );                                            \
+    _zzq_orig->r2 = __addr;                                       \
+  }
+
+#define VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11                   \
+                     __SPECIAL_INSTRUCTION_PREAMBLE               \
+                     /* branch-and-link-to-noredir *%R11 */       \
+                     "or 3,3,3\n\t"
+
+#define VALGRIND_VEX_INJECT_IR()                                 \
+ do {                                                            \
+    __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE              \
+                     "or 5,5,5\n\t"                              \
+                    );                                           \
+ } while (0)
+
+#endif /* PLAT_ppc64_linux */
+
+/* ------------------------- arm-linux ------------------------- */
+
+#if defined(PLAT_arm_linux)
+
+typedef
+   struct { 
+      unsigned int nraddr; /* where's the code? */
+   }
+   OrigFn;
+
+#define __SPECIAL_INSTRUCTION_PREAMBLE                            \
+            "mov r12, r12, ror #3  ; mov r12, r12, ror #13 \n\t"  \
+            "mov r12, r12, ror #29 ; mov r12, r12, ror #19 \n\t"
+
+#define VALGRIND_DO_CLIENT_REQUEST_EXPR(                          \
+        _zzq_default, _zzq_request,                               \
+        _zzq_arg1, _zzq_arg2, _zzq_arg3, _zzq_arg4, _zzq_arg5)    \
+                                                                  \
+  __extension__                                                   \
+  ({volatile unsigned int  _zzq_args[6];                          \
+    volatile unsigned int  _zzq_result;                           \
+    _zzq_args[0] = (unsigned int)(_zzq_request);                  \
+    _zzq_args[1] = (unsigned int)(_zzq_arg1);                     \
+    _zzq_args[2] = (unsigned int)(_zzq_arg2);                     \
+    _zzq_args[3] = (unsigned int)(_zzq_arg3);                     \
+    _zzq_args[4] = (unsigned int)(_zzq_arg4);                     \
+    _zzq_args[5] = (unsigned int)(_zzq_arg5);                     \
+    __asm__ volatile("mov r3, %1\n\t" /*default*/                 \
+                     "mov r4, %2\n\t" /*ptr*/                     \
+                     __SPECIAL_INSTRUCTION_PREAMBLE               \
+                     /* R3 = client_request ( R4 ) */             \
+                     "orr r10, r10, r10\n\t"                      \
+                     "mov %0, r3"     /*result*/                  \
+                     : "=r" (_zzq_result)                         \
+                     : "r" (_zzq_default), "r" (&_zzq_args[0])    \
+                     : "cc","memory", "r3", "r4");                \
+    _zzq_result;                                                  \
+  })
+
+#define VALGRIND_GET_NR_CONTEXT(_zzq_rlval)                       \
+  { volatile OrigFn* _zzq_orig = &(_zzq_rlval);                   \
+    unsigned int __addr;                                          \
+    __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE               \
+                     /* R3 = guest_NRADDR */                      \
+                     "orr r11, r11, r11\n\t"                      \
+                     "mov %0, r3"                                 \
+                     : "=r" (__addr)                              \
+                     :                                            \
+                     : "cc", "memory", "r3"                       \
+                    );                                            \
+    _zzq_orig->nraddr = __addr;                                   \
+  }
+
+#define VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R4                    \
+                     __SPECIAL_INSTRUCTION_PREAMBLE               \
+                     /* branch-and-link-to-noredir *%R4 */        \
+                     "orr r12, r12, r12\n\t"
+
+#define VALGRIND_VEX_INJECT_IR()                                 \
+ do {                                                            \
+    __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE              \
+                     "orr r9, r9, r9\n\t"                        \
+                     : : : "cc", "memory"                        \
+                    );                                           \
+ } while (0)
+
+#endif /* PLAT_arm_linux */
+
+/* ------------------------ arm64-linux ------------------------- */
+
+#if defined(PLAT_arm64_linux)
+
+typedef
+   struct { 
+      unsigned long long int nraddr; /* where's the code? */
+   }
+   OrigFn;
+
+#define __SPECIAL_INSTRUCTION_PREAMBLE                            \
+            "ror x12, x12, #3  ;  ror x12, x12, #13 \n\t"         \
+            "ror x12, x12, #51 ;  ror x12, x12, #61 \n\t"
+
+#define VALGRIND_DO_CLIENT_REQUEST_EXPR(                          \
+        _zzq_default, _zzq_request,                               \
+        _zzq_arg1, _zzq_arg2, _zzq_arg3, _zzq_arg4, _zzq_arg5)    \
+                                                                  \
+  __extension__                                                   \
+  ({volatile unsigned long long int  _zzq_args[6];                \
+    volatile unsigned long long int  _zzq_result;                 \
+    _zzq_args[0] = (unsigned long long int)(_zzq_request);        \
+    _zzq_args[1] = (unsigned long long int)(_zzq_arg1);           \
+    _zzq_args[2] = (unsigned long long int)(_zzq_arg2);           \
+    _zzq_args[3] = (unsigned long long int)(_zzq_arg3);           \
+    _zzq_args[4] = (unsigned long long int)(_zzq_arg4);           \
+    _zzq_args[5] = (unsigned long long int)(_zzq_arg5);           \
+    __asm__ volatile("mov x3, %1\n\t" /*default*/                 \
+                     "mov x4, %2\n\t" /*ptr*/                     \
+                     __SPECIAL_INSTRUCTION_PREAMBLE               \
+                     /* X3 = client_request ( X4 ) */             \
+                     "orr x10, x10, x10\n\t"                      \
+                     "mov %0, x3"     /*result*/                  \
+                     : "=r" (_zzq_result)                         \
+                     : "r" (_zzq_default), "r" (&_zzq_args[0])    \
+                     : "cc","memory", "x3", "x4");                \
+    _zzq_result;                                                  \
+  })
+
+#define VALGRIND_GET_NR_CONTEXT(_zzq_rlval)                       \
+  { volatile OrigFn* _zzq_orig = &(_zzq_rlval);                   \
+    unsigned long long int __addr;                                \
+    __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE               \
+                     /* X3 = guest_NRADDR */                      \
+                     "orr x11, x11, x11\n\t"                      \
+                     "mov %0, x3"                                 \
+                     : "=r" (__addr)                              \
+                     :                                            \
+                     : "cc", "memory", "x3"                       \
+                    );                                            \
+    _zzq_orig->nraddr = __addr;                                   \
+  }
+
+#define VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_X8                    \
+                     __SPECIAL_INSTRUCTION_PREAMBLE               \
+                     /* branch-and-link-to-noredir X8 */          \
+                     "orr x12, x12, x12\n\t"
+
+#define VALGRIND_VEX_INJECT_IR()                                 \
+ do {                                                            \
+    __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE              \
+                     "orr x9, x9, x9\n\t"                        \
+                     : : : "cc", "memory"                        \
+                    );                                           \
+ } while (0)
+
+#endif /* PLAT_arm64_linux */
+
+/* ------------------------ s390x-linux ------------------------ */
+
+#if defined(PLAT_s390x_linux)
+
+typedef
+  struct {
+     unsigned long long int nraddr; /* where's the code? */
+  }
+  OrigFn;
+
+/* __SPECIAL_INSTRUCTION_PREAMBLE will be used to identify Valgrind specific
+ * code. This detection is implemented in platform specific toIR.c
+ * (e.g. VEX/priv/guest_s390_decoder.c).
+ */
+#define __SPECIAL_INSTRUCTION_PREAMBLE                           \
+                     "lr 15,15\n\t"                              \
+                     "lr 1,1\n\t"                                \
+                     "lr 2,2\n\t"                                \
+                     "lr 3,3\n\t"
+
+#define __CLIENT_REQUEST_CODE "lr 2,2\n\t"
+#define __GET_NR_CONTEXT_CODE "lr 3,3\n\t"
+#define __CALL_NO_REDIR_CODE  "lr 4,4\n\t"
+#define __VEX_INJECT_IR_CODE  "lr 5,5\n\t"
+
+#define VALGRIND_DO_CLIENT_REQUEST_EXPR(                         \
+       _zzq_default, _zzq_request,                               \
+       _zzq_arg1, _zzq_arg2, _zzq_arg3, _zzq_arg4, _zzq_arg5)    \
+  __extension__                                                  \
+ ({volatile unsigned long long int _zzq_args[6];                 \
+   volatile unsigned long long int _zzq_result;                  \
+   _zzq_args[0] = (unsigned long long int)(_zzq_request);        \
+   _zzq_args[1] = (unsigned long long int)(_zzq_arg1);           \
+   _zzq_args[2] = (unsigned long long int)(_zzq_arg2);           \
+   _zzq_args[3] = (unsigned long long int)(_zzq_arg3);           \
+   _zzq_args[4] = (unsigned long long int)(_zzq_arg4);           \
+   _zzq_args[5] = (unsigned long long int)(_zzq_arg5);           \
+   __asm__ volatile(/* r2 = args */                              \
+                    "lgr 2,%1\n\t"                               \
+                    /* r3 = default */                           \
+                    "lgr 3,%2\n\t"                               \
+                    __SPECIAL_INSTRUCTION_PREAMBLE               \
+                    __CLIENT_REQUEST_CODE                        \
+                    /* results = r3 */                           \
+                    "lgr %0, 3\n\t"                              \
+                    : "=d" (_zzq_result)                         \
+                    : "a" (&_zzq_args[0]), "0" (_zzq_default)    \
+                    : "cc", "2", "3", "memory"                   \
+                   );                                            \
+   _zzq_result;                                                  \
+ })
+
+#define VALGRIND_GET_NR_CONTEXT(_zzq_rlval)                      \
+ { volatile OrigFn* _zzq_orig = &(_zzq_rlval);                   \
+   volatile unsigned long long int __addr;                       \
+   __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE               \
+                    __GET_NR_CONTEXT_CODE                        \
+                    "lgr %0, 3\n\t"                              \
+                    : "=a" (__addr)                              \
+                    :                                            \
+                    : "cc", "3", "memory"                        \
+                   );                                            \
+   _zzq_orig->nraddr = __addr;                                   \
+ }
+
+#define VALGRIND_CALL_NOREDIR_R1                                 \
+                    __SPECIAL_INSTRUCTION_PREAMBLE               \
+                    __CALL_NO_REDIR_CODE
+
+#define VALGRIND_VEX_INJECT_IR()                                 \
+ do {                                                            \
+    __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE              \
+                     __VEX_INJECT_IR_CODE);                      \
+ } while (0)
+
+#endif /* PLAT_s390x_linux */
+
+/* ------------------------- mips32-linux ---------------- */
+
+#if defined(PLAT_mips32_linux)
+
+typedef
+   struct { 
+      unsigned int nraddr; /* where's the code? */
+   }
+   OrigFn;
+
+/* .word  0x342
+ * .word  0x742
+ * .word  0xC2
+ * .word  0x4C2*/
+#define __SPECIAL_INSTRUCTION_PREAMBLE          \
+                     "srl $0, $0, 13\n\t"       \
+                     "srl $0, $0, 29\n\t"       \
+                     "srl $0, $0, 3\n\t"        \
+                     "srl $0, $0, 19\n\t"
+                    
+#define VALGRIND_DO_CLIENT_REQUEST_EXPR(                          \
+       _zzq_default, _zzq_request,                                \
+       _zzq_arg1, _zzq_arg2, _zzq_arg3, _zzq_arg4, _zzq_arg5)     \
+  __extension__                                                   \
+  ({ volatile unsigned int _zzq_args[6];                          \
+    volatile unsigned int _zzq_result;                            \
+    _zzq_args[0] = (unsigned int)(_zzq_request);                  \
+    _zzq_args[1] = (unsigned int)(_zzq_arg1);                     \
+    _zzq_args[2] = (unsigned int)(_zzq_arg2);                     \
+    _zzq_args[3] = (unsigned int)(_zzq_arg3);                     \
+    _zzq_args[4] = (unsigned int)(_zzq_arg4);                     \
+    _zzq_args[5] = (unsigned int)(_zzq_arg5);                     \
+        __asm__ volatile("move $11, %1\n\t" /*default*/           \
+                     "move $12, %2\n\t" /*ptr*/                   \
+                     __SPECIAL_INSTRUCTION_PREAMBLE               \
+                     /* T3 = client_request ( T4 ) */             \
+                     "or $13, $13, $13\n\t"                       \
+                     "move %0, $11\n\t"     /*result*/            \
+                     : "=r" (_zzq_result)                         \
+                     : "r" (_zzq_default), "r" (&_zzq_args[0])    \
+                     : "$11", "$12");                             \
+    _zzq_result;                                                  \
+  })
+
+#define VALGRIND_GET_NR_CONTEXT(_zzq_rlval)                       \
+  { volatile OrigFn* _zzq_orig = &(_zzq_rlval);                   \
+    volatile unsigned int __addr;                                 \
+    __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE               \
+                     /* %t9 = guest_NRADDR */                     \
+                     "or $14, $14, $14\n\t"                       \
+                     "move %0, $11"     /*result*/                \
+                     : "=r" (__addr)                              \
+                     :                                            \
+                     : "$11"                                      \
+                    );                                            \
+    _zzq_orig->nraddr = __addr;                                   \
+  }
+
+#define VALGRIND_CALL_NOREDIR_T9                                 \
+                     __SPECIAL_INSTRUCTION_PREAMBLE              \
+                     /* call-noredir *%t9 */                     \
+                     "or $15, $15, $15\n\t"
+
+#define VALGRIND_VEX_INJECT_IR()                                 \
+ do {                                                            \
+    __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE              \
+                     "or $11, $11, $11\n\t"                      \
+                    );                                           \
+ } while (0)
+
+
+#endif /* PLAT_mips32_linux */
+
+/* ------------------------- mips64-linux ---------------- */
+
+#if defined(PLAT_mips64_linux)
+
+typedef
+   struct {
+      unsigned long long nraddr; /* where's the code? */
+   }
+   OrigFn;
+
+/* dsll $0,$0, 3
+ * dsll $0,$0, 13
+ * dsll $0,$0, 29
+ * dsll $0,$0, 19*/
+#define __SPECIAL_INSTRUCTION_PREAMBLE                              \
+                     "dsll $0,$0, 3 ; dsll $0,$0,13\n\t"            \
+                     "dsll $0,$0,29 ; dsll $0,$0,19\n\t"
+
+#define VALGRIND_DO_CLIENT_REQUEST_EXPR(                            \
+       _zzq_default, _zzq_request,                                  \
+       _zzq_arg1, _zzq_arg2, _zzq_arg3, _zzq_arg4, _zzq_arg5)       \
+  __extension__                                                     \
+  ({ volatile unsigned long long int _zzq_args[6];                  \
+    volatile unsigned long long int _zzq_result;                    \
+    _zzq_args[0] = (unsigned long long int)(_zzq_request);          \
+    _zzq_args[1] = (unsigned long long int)(_zzq_arg1);             \
+    _zzq_args[2] = (unsigned long long int)(_zzq_arg2);             \
+    _zzq_args[3] = (unsigned long long int)(_zzq_arg3);             \
+    _zzq_args[4] = (unsigned long long int)(_zzq_arg4);             \
+    _zzq_args[5] = (unsigned long long int)(_zzq_arg5);             \
+        __asm__ volatile("move $11, %1\n\t" /*default*/             \
+                         "move $12, %2\n\t" /*ptr*/                 \
+                         __SPECIAL_INSTRUCTION_PREAMBLE             \
+                         /* $11 = client_request ( $12 ) */         \
+                         "or $13, $13, $13\n\t"                     \
+                         "move %0, $11\n\t"     /*result*/          \
+                         : "=r" (_zzq_result)                       \
+                         : "r" (_zzq_default), "r" (&_zzq_args[0])  \
+                         : "$11", "$12");                           \
+    _zzq_result;                                                    \
+  })
+
+#define VALGRIND_GET_NR_CONTEXT(_zzq_rlval)                         \
+  { volatile OrigFn* _zzq_orig = &(_zzq_rlval);                     \
+    volatile unsigned long long int __addr;                         \
+    __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE                 \
+                     /* $11 = guest_NRADDR */                       \
+                     "or $14, $14, $14\n\t"                         \
+                     "move %0, $11"     /*result*/                  \
+                     : "=r" (__addr)                                \
+                     :                                              \
+                     : "$11");                                      \
+    _zzq_orig->nraddr = __addr;                                     \
+  }
+
+#define VALGRIND_CALL_NOREDIR_T9                                    \
+                     __SPECIAL_INSTRUCTION_PREAMBLE                 \
+                     /* call-noredir $25 */                         \
+                     "or $15, $15, $15\n\t"
+
+#define VALGRIND_VEX_INJECT_IR()                                    \
+ do {                                                               \
+    __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE                 \
+                     "or $11, $11, $11\n\t"                         \
+                    );                                              \
+ } while (0)
+
+#endif /* PLAT_mips64_linux */
+
+/* Insert assembly code for other platforms here... */
+
+#endif /* NVALGRIND */
+
+
+/* ------------------------------------------------------------------ */
+/* PLATFORM SPECIFICS for FUNCTION WRAPPING.  This is all very        */
+/* ugly.  It's the least-worst tradeoff I can think of.               */
+/* ------------------------------------------------------------------ */
+
+/* This section defines magic (a.k.a appalling-hack) macros for doing
+   guaranteed-no-redirection macros, so as to get from function
+   wrappers to the functions they are wrapping.  The whole point is to
+   construct standard call sequences, but to do the call itself with a
+   special no-redirect call pseudo-instruction that the JIT
+   understands and handles specially.  This section is long and
+   repetitious, and I can't see a way to make it shorter.
+
+   The naming scheme is as follows:
+
+      CALL_FN_{W,v}_{v,W,WW,WWW,WWWW,5W,6W,7W,etc}
+
+   'W' stands for "word" and 'v' for "void".  Hence there are
+   different macros for calling arity 0, 1, 2, 3, 4, etc, functions,
+   and for each, the possibility of returning a word-typed result, or
+   no result.
+*/
+
+/* Use these to write the name of your wrapper.  NOTE: duplicates
+   VG_WRAP_FUNCTION_Z{U,Z} in pub_tool_redir.h.  NOTE also: inserts
+   the default behaviour equivalance class tag "0000" into the name.
+   See pub_tool_redir.h for details -- normally you don't need to
+   think about this, though. */
+
+/* Use an extra level of macroisation so as to ensure the soname/fnname
+   args are fully macro-expanded before pasting them together. */
+#define VG_CONCAT4(_aa,_bb,_cc,_dd) _aa##_bb##_cc##_dd
+
+#define I_WRAP_SONAME_FNNAME_ZU(soname,fnname)                    \
+   VG_CONCAT4(_vgw00000ZU_,soname,_,fnname)
+
+#define I_WRAP_SONAME_FNNAME_ZZ(soname,fnname)                    \
+   VG_CONCAT4(_vgw00000ZZ_,soname,_,fnname)
+
+/* Use this macro from within a wrapper function to collect the
+   context (address and possibly other info) of the original function.
+   Once you have that you can then use it in one of the CALL_FN_
+   macros.  The type of the argument _lval is OrigFn. */
+#define VALGRIND_GET_ORIG_FN(_lval)  VALGRIND_GET_NR_CONTEXT(_lval)
+
+/* Also provide end-user facilities for function replacement, rather
+   than wrapping.  A replacement function differs from a wrapper in
+   that it has no way to get hold of the original function being
+   called, and hence no way to call onwards to it.  In a replacement
+   function, VALGRIND_GET_ORIG_FN always returns zero. */
+
+#define I_REPLACE_SONAME_FNNAME_ZU(soname,fnname)                 \
+   VG_CONCAT4(_vgr00000ZU_,soname,_,fnname)
+
+#define I_REPLACE_SONAME_FNNAME_ZZ(soname,fnname)                 \
+   VG_CONCAT4(_vgr00000ZZ_,soname,_,fnname)
+
+/* Derivatives of the main macros below, for calling functions
+   returning void. */
+
+#define CALL_FN_v_v(fnptr)                                        \
+   do { volatile unsigned long _junk;                             \
+        CALL_FN_W_v(_junk,fnptr); } while (0)
+
+#define CALL_FN_v_W(fnptr, arg1)                                  \
+   do { volatile unsigned long _junk;                             \
+        CALL_FN_W_W(_junk,fnptr,arg1); } while (0)
+
+#define CALL_FN_v_WW(fnptr, arg1,arg2)                            \
+   do { volatile unsigned long _junk;                             \
+        CALL_FN_W_WW(_junk,fnptr,arg1,arg2); } while (0)
+
+#define CALL_FN_v_WWW(fnptr, arg1,arg2,arg3)                      \
+   do { volatile unsigned long _junk;                             \
+        CALL_FN_W_WWW(_junk,fnptr,arg1,arg2,arg3); } while (0)
+
+#define CALL_FN_v_WWWW(fnptr, arg1,arg2,arg3,arg4)                \
+   do { volatile unsigned long _junk;                             \
+        CALL_FN_W_WWWW(_junk,fnptr,arg1,arg2,arg3,arg4); } while (0)
+
+#define CALL_FN_v_5W(fnptr, arg1,arg2,arg3,arg4,arg5)             \
+   do { volatile unsigned long _junk;                             \
+        CALL_FN_W_5W(_junk,fnptr,arg1,arg2,arg3,arg4,arg5); } while (0)
+
+#define CALL_FN_v_6W(fnptr, arg1,arg2,arg3,arg4,arg5,arg6)        \
+   do { volatile unsigned long _junk;                             \
+        CALL_FN_W_6W(_junk,fnptr,arg1,arg2,arg3,arg4,arg5,arg6); } while (0)
+
+#define CALL_FN_v_7W(fnptr, arg1,arg2,arg3,arg4,arg5,arg6,arg7)   \
+   do { volatile unsigned long _junk;                             \
+        CALL_FN_W_7W(_junk,fnptr,arg1,arg2,arg3,arg4,arg5,arg6,arg7); } while (0)
+
+/* ------------------------- x86-{linux,darwin} ---------------- */
+
+#if defined(PLAT_x86_linux)  ||  defined(PLAT_x86_darwin)
+
+/* These regs are trashed by the hidden call.  No need to mention eax
+   as gcc can already see that, plus causes gcc to bomb. */
+#define __CALLER_SAVED_REGS /*"eax"*/ "ecx", "edx"
+
+/* Macros to save and align the stack before making a function
+   call and restore it afterwards as gcc may not keep the stack
+   pointer aligned if it doesn't realise calls are being made
+   to other functions. */
+
+#define VALGRIND_ALIGN_STACK               \
+      "movl %%esp,%%edi\n\t"               \
+      "andl $0xfffffff0,%%esp\n\t"
+#define VALGRIND_RESTORE_STACK             \
+      "movl %%edi,%%esp\n\t"
+
+/* These CALL_FN_ macros assume that on x86-linux, sizeof(unsigned
+   long) == 4. */
+
+#define CALL_FN_W_v(lval, orig)                                   \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[1];                          \
+      volatile unsigned long _res;                                \
+      _argvec[0] = (unsigned long)_orig.nraddr;                   \
+      __asm__ volatile(                                           \
+         VALGRIND_ALIGN_STACK                                     \
+         "movl (%%eax), %%eax\n\t"  /* target->%eax */            \
+         VALGRIND_CALL_NOREDIR_EAX                                \
+         VALGRIND_RESTORE_STACK                                   \
+         : /*out*/   "=a" (_res)                                  \
+         : /*in*/    "a" (&_argvec[0])                            \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "edi"   \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_W(lval, orig, arg1)                             \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[2];                          \
+      volatile unsigned long _res;                                \
+      _argvec[0] = (unsigned long)_orig.nraddr;                   \
+      _argvec[1] = (unsigned long)(arg1);                         \
+      __asm__ volatile(                                           \
+         VALGRIND_ALIGN_STACK                                     \
+         "subl $12, %%esp\n\t"                                    \
+         "pushl 4(%%eax)\n\t"                                     \
+         "movl (%%eax), %%eax\n\t"  /* target->%eax */            \
+         VALGRIND_CALL_NOREDIR_EAX                                \
+         VALGRIND_RESTORE_STACK                                   \
+         : /*out*/   "=a" (_res)                                  \
+         : /*in*/    "a" (&_argvec[0])                            \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "edi"   \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_WW(lval, orig, arg1,arg2)                       \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[3];                          \
+      volatile unsigned long _res;                                \
+      _argvec[0] = (unsigned long)_orig.nraddr;                   \
+      _argvec[1] = (unsigned long)(arg1);                         \
+      _argvec[2] = (unsigned long)(arg2);                         \
+      __asm__ volatile(                                           \
+         VALGRIND_ALIGN_STACK                                     \
+         "subl $8, %%esp\n\t"                                     \
+         "pushl 8(%%eax)\n\t"                                     \
+         "pushl 4(%%eax)\n\t"                                     \
+         "movl (%%eax), %%eax\n\t"  /* target->%eax */            \
+         VALGRIND_CALL_NOREDIR_EAX                                \
+         VALGRIND_RESTORE_STACK                                   \
+         : /*out*/   "=a" (_res)                                  \
+         : /*in*/    "a" (&_argvec[0])                            \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "edi"   \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_WWW(lval, orig, arg1,arg2,arg3)                 \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[4];                          \
+      volatile unsigned long _res;                                \
+      _argvec[0] = (unsigned long)_orig.nraddr;                   \
+      _argvec[1] = (unsigned long)(arg1);                         \
+      _argvec[2] = (unsigned long)(arg2);                         \
+      _argvec[3] = (unsigned long)(arg3);                         \
+      __asm__ volatile(                                           \
+         VALGRIND_ALIGN_STACK                                     \
+         "subl $4, %%esp\n\t"                                     \
+         "pushl 12(%%eax)\n\t"                                    \
+         "pushl 8(%%eax)\n\t"                                     \
+         "pushl 4(%%eax)\n\t"                                     \
+         "movl (%%eax), %%eax\n\t"  /* target->%eax */            \
+         VALGRIND_CALL_NOREDIR_EAX                                \
+         VALGRIND_RESTORE_STACK                                   \
+         : /*out*/   "=a" (_res)                                  \
+         : /*in*/    "a" (&_argvec[0])                            \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "edi"   \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_WWWW(lval, orig, arg1,arg2,arg3,arg4)           \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[5];                          \
+      volatile unsigned long _res;                                \
+      _argvec[0] = (unsigned long)_orig.nraddr;                   \
+      _argvec[1] = (unsigned long)(arg1);                         \
+      _argvec[2] = (unsigned long)(arg2);                         \
+      _argvec[3] = (unsigned long)(arg3);                         \
+      _argvec[4] = (unsigned long)(arg4);                         \
+      __asm__ volatile(                                           \
+         VALGRIND_ALIGN_STACK                                     \
+         "pushl 16(%%eax)\n\t"                                    \
+         "pushl 12(%%eax)\n\t"                                    \
+         "pushl 8(%%eax)\n\t"                                     \
+         "pushl 4(%%eax)\n\t"                                     \
+         "movl (%%eax), %%eax\n\t"  /* target->%eax */            \
+         VALGRIND_CALL_NOREDIR_EAX                                \
+         VALGRIND_RESTORE_STACK                                   \
+         : /*out*/   "=a" (_res)                                  \
+         : /*in*/    "a" (&_argvec[0])                            \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "edi"   \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_5W(lval, orig, arg1,arg2,arg3,arg4,arg5)        \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[6];                          \
+      volatile unsigned long _res;                                \
+      _argvec[0] = (unsigned long)_orig.nraddr;                   \
+      _argvec[1] = (unsigned long)(arg1);                         \
+      _argvec[2] = (unsigned long)(arg2);                         \
+      _argvec[3] = (unsigned long)(arg3);                         \
+      _argvec[4] = (unsigned long)(arg4);                         \
+      _argvec[5] = (unsigned long)(arg5);                         \
+      __asm__ volatile(                                           \
+         VALGRIND_ALIGN_STACK                                     \
+         "subl $12, %%esp\n\t"                                    \
+         "pushl 20(%%eax)\n\t"                                    \
+         "pushl 16(%%eax)\n\t"                                    \
+         "pushl 12(%%eax)\n\t"                                    \
+         "pushl 8(%%eax)\n\t"                                     \
+         "pushl 4(%%eax)\n\t"                                     \
+         "movl (%%eax), %%eax\n\t"  /* target->%eax */            \
+         VALGRIND_CALL_NOREDIR_EAX                                \
+         VALGRIND_RESTORE_STACK                                   \
+         : /*out*/   "=a" (_res)                                  \
+         : /*in*/    "a" (&_argvec[0])                            \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "edi"   \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_6W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6)   \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[7];                          \
+      volatile unsigned long _res;                                \
+      _argvec[0] = (unsigned long)_orig.nraddr;                   \
+      _argvec[1] = (unsigned long)(arg1);                         \
+      _argvec[2] = (unsigned long)(arg2);                         \
+      _argvec[3] = (unsigned long)(arg3);                         \
+      _argvec[4] = (unsigned long)(arg4);                         \
+      _argvec[5] = (unsigned long)(arg5);                         \
+      _argvec[6] = (unsigned long)(arg6);                         \
+      __asm__ volatile(                                           \
+         VALGRIND_ALIGN_STACK                                     \
+         "subl $8, %%esp\n\t"                                     \
+         "pushl 24(%%eax)\n\t"                                    \
+         "pushl 20(%%eax)\n\t"                                    \
+         "pushl 16(%%eax)\n\t"                                    \
+         "pushl 12(%%eax)\n\t"                                    \
+         "pushl 8(%%eax)\n\t"                                     \
+         "pushl 4(%%eax)\n\t"                                     \
+         "movl (%%eax), %%eax\n\t"  /* target->%eax */            \
+         VALGRIND_CALL_NOREDIR_EAX                                \
+         VALGRIND_RESTORE_STACK                                   \
+         : /*out*/   "=a" (_res)                                  \
+         : /*in*/    "a" (&_argvec[0])                            \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "edi"   \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_7W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6,   \
+                                 arg7)                            \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[8];                          \
+      volatile unsigned long _res;                                \
+      _argvec[0] = (unsigned long)_orig.nraddr;                   \
+      _argvec[1] = (unsigned long)(arg1);                         \
+      _argvec[2] = (unsigned long)(arg2);                         \
+      _argvec[3] = (unsigned long)(arg3);                         \
+      _argvec[4] = (unsigned long)(arg4);                         \
+      _argvec[5] = (unsigned long)(arg5);                         \
+      _argvec[6] = (unsigned long)(arg6);                         \
+      _argvec[7] = (unsigned long)(arg7);                         \
+      __asm__ volatile(                                           \
+         VALGRIND_ALIGN_STACK                                     \
+         "subl $4, %%esp\n\t"                                     \
+         "pushl 28(%%eax)\n\t"                                    \
+         "pushl 24(%%eax)\n\t"                                    \
+         "pushl 20(%%eax)\n\t"                                    \
+         "pushl 16(%%eax)\n\t"                                    \
+         "pushl 12(%%eax)\n\t"                                    \
+         "pushl 8(%%eax)\n\t"                                     \
+         "pushl 4(%%eax)\n\t"                                     \
+         "movl (%%eax), %%eax\n\t"  /* target->%eax */            \
+         VALGRIND_CALL_NOREDIR_EAX                                \
+         VALGRIND_RESTORE_STACK                                   \
+         : /*out*/   "=a" (_res)                                  \
+         : /*in*/    "a" (&_argvec[0])                            \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "edi"   \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_8W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6,   \
+                                 arg7,arg8)                       \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[9];                          \
+      volatile unsigned long _res;                                \
+      _argvec[0] = (unsigned long)_orig.nraddr;                   \
+      _argvec[1] = (unsigned long)(arg1);                         \
+      _argvec[2] = (unsigned long)(arg2);                         \
+      _argvec[3] = (unsigned long)(arg3);                         \
+      _argvec[4] = (unsigned long)(arg4);                         \
+      _argvec[5] = (unsigned long)(arg5);                         \
+      _argvec[6] = (unsigned long)(arg6);                         \
+      _argvec[7] = (unsigned long)(arg7);                         \
+      _argvec[8] = (unsigned long)(arg8);                         \
+      __asm__ volatile(                                           \
+         VALGRIND_ALIGN_STACK                                     \
+         "pushl 32(%%eax)\n\t"                                    \
+         "pushl 28(%%eax)\n\t"                                    \
+         "pushl 24(%%eax)\n\t"                                    \
+         "pushl 20(%%eax)\n\t"                                    \
+         "pushl 16(%%eax)\n\t"                                    \
+         "pushl 12(%%eax)\n\t"                                    \
+         "pushl 8(%%eax)\n\t"                                     \
+         "pushl 4(%%eax)\n\t"                                     \
+         "movl (%%eax), %%eax\n\t"  /* target->%eax */            \
+         VALGRIND_CALL_NOREDIR_EAX                                \
+         VALGRIND_RESTORE_STACK                                   \
+         : /*out*/   "=a" (_res)                                  \
+         : /*in*/    "a" (&_argvec[0])                            \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "edi"   \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_9W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6,   \
+                                 arg7,arg8,arg9)                  \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[10];                         \
+      volatile unsigned long _res;                                \
+      _argvec[0] = (unsigned long)_orig.nraddr;                   \
+      _argvec[1] = (unsigned long)(arg1);                         \
+      _argvec[2] = (unsigned long)(arg2);                         \
+      _argvec[3] = (unsigned long)(arg3);                         \
+      _argvec[4] = (unsigned long)(arg4);                         \
+      _argvec[5] = (unsigned long)(arg5);                         \
+      _argvec[6] = (unsigned long)(arg6);                         \
+      _argvec[7] = (unsigned long)(arg7);                         \
+      _argvec[8] = (unsigned long)(arg8);                         \
+      _argvec[9] = (unsigned long)(arg9);                         \
+      __asm__ volatile(                                           \
+         VALGRIND_ALIGN_STACK                                     \
+         "subl $12, %%esp\n\t"                                    \
+         "pushl 36(%%eax)\n\t"                                    \
+         "pushl 32(%%eax)\n\t"                                    \
+         "pushl 28(%%eax)\n\t"                                    \
+         "pushl 24(%%eax)\n\t"                                    \
+         "pushl 20(%%eax)\n\t"                                    \
+         "pushl 16(%%eax)\n\t"                                    \
+         "pushl 12(%%eax)\n\t"                                    \
+         "pushl 8(%%eax)\n\t"                                     \
+         "pushl 4(%%eax)\n\t"                                     \
+         "movl (%%eax), %%eax\n\t"  /* target->%eax */            \
+         VALGRIND_CALL_NOREDIR_EAX                                \
+         VALGRIND_RESTORE_STACK                                   \
+         : /*out*/   "=a" (_res)                                  \
+         : /*in*/    "a" (&_argvec[0])                            \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "edi"   \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_10W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6,  \
+                                  arg7,arg8,arg9,arg10)           \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[11];                         \
+      volatile unsigned long _res;                                \
+      _argvec[0] = (unsigned long)_orig.nraddr;                   \
+      _argvec[1] = (unsigned long)(arg1);                         \
+      _argvec[2] = (unsigned long)(arg2);                         \
+      _argvec[3] = (unsigned long)(arg3);                         \
+      _argvec[4] = (unsigned long)(arg4);                         \
+      _argvec[5] = (unsigned long)(arg5);                         \
+      _argvec[6] = (unsigned long)(arg6);                         \
+      _argvec[7] = (unsigned long)(arg7);                         \
+      _argvec[8] = (unsigned long)(arg8);                         \
+      _argvec[9] = (unsigned long)(arg9);                         \
+      _argvec[10] = (unsigned long)(arg10);                       \
+      __asm__ volatile(                                           \
+         VALGRIND_ALIGN_STACK                                     \
+         "subl $8, %%esp\n\t"                                     \
+         "pushl 40(%%eax)\n\t"                                    \
+         "pushl 36(%%eax)\n\t"                                    \
+         "pushl 32(%%eax)\n\t"                                    \
+         "pushl 28(%%eax)\n\t"                                    \
+         "pushl 24(%%eax)\n\t"                                    \
+         "pushl 20(%%eax)\n\t"                                    \
+         "pushl 16(%%eax)\n\t"                                    \
+         "pushl 12(%%eax)\n\t"                                    \
+         "pushl 8(%%eax)\n\t"                                     \
+         "pushl 4(%%eax)\n\t"                                     \
+         "movl (%%eax), %%eax\n\t"  /* target->%eax */            \
+         VALGRIND_CALL_NOREDIR_EAX                                \
+         VALGRIND_RESTORE_STACK                                   \
+         : /*out*/   "=a" (_res)                                  \
+         : /*in*/    "a" (&_argvec[0])                            \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "edi"   \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_11W(lval, orig, arg1,arg2,arg3,arg4,arg5,       \
+                                  arg6,arg7,arg8,arg9,arg10,      \
+                                  arg11)                          \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[12];                         \
+      volatile unsigned long _res;                                \
+      _argvec[0] = (unsigned long)_orig.nraddr;                   \
+      _argvec[1] = (unsigned long)(arg1);                         \
+      _argvec[2] = (unsigned long)(arg2);                         \
+      _argvec[3] = (unsigned long)(arg3);                         \
+      _argvec[4] = (unsigned long)(arg4);                         \
+      _argvec[5] = (unsigned long)(arg5);                         \
+      _argvec[6] = (unsigned long)(arg6);                         \
+      _argvec[7] = (unsigned long)(arg7);                         \
+      _argvec[8] = (unsigned long)(arg8);                         \
+      _argvec[9] = (unsigned long)(arg9);                         \
+      _argvec[10] = (unsigned long)(arg10);                       \
+      _argvec[11] = (unsigned long)(arg11);                       \
+      __asm__ volatile(                                           \
+         VALGRIND_ALIGN_STACK                                     \
+         "subl $4, %%esp\n\t"                                     \
+         "pushl 44(%%eax)\n\t"                                    \
+         "pushl 40(%%eax)\n\t"                                    \
+         "pushl 36(%%eax)\n\t"                                    \
+         "pushl 32(%%eax)\n\t"                                    \
+         "pushl 28(%%eax)\n\t"                                    \
+         "pushl 24(%%eax)\n\t"                                    \
+         "pushl 20(%%eax)\n\t"                                    \
+         "pushl 16(%%eax)\n\t"                                    \
+         "pushl 12(%%eax)\n\t"                                    \
+         "pushl 8(%%eax)\n\t"                                     \
+         "pushl 4(%%eax)\n\t"                                     \
+         "movl (%%eax), %%eax\n\t"  /* target->%eax */            \
+         VALGRIND_CALL_NOREDIR_EAX                                \
+         VALGRIND_RESTORE_STACK                                   \
+         : /*out*/   "=a" (_res)                                  \
+         : /*in*/    "a" (&_argvec[0])                            \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "edi"   \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_12W(lval, orig, arg1,arg2,arg3,arg4,arg5,       \
+                                  arg6,arg7,arg8,arg9,arg10,      \
+                                  arg11,arg12)                    \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[13];                         \
+      volatile unsigned long _res;                                \
+      _argvec[0] = (unsigned long)_orig.nraddr;                   \
+      _argvec[1] = (unsigned long)(arg1);                         \
+      _argvec[2] = (unsigned long)(arg2);                         \
+      _argvec[3] = (unsigned long)(arg3);                         \
+      _argvec[4] = (unsigned long)(arg4);                         \
+      _argvec[5] = (unsigned long)(arg5);                         \
+      _argvec[6] = (unsigned long)(arg6);                         \
+      _argvec[7] = (unsigned long)(arg7);                         \
+      _argvec[8] = (unsigned long)(arg8);                         \
+      _argvec[9] = (unsigned long)(arg9);                         \
+      _argvec[10] = (unsigned long)(arg10);                       \
+      _argvec[11] = (unsigned long)(arg11);                       \
+      _argvec[12] = (unsigned long)(arg12);                       \
+      __asm__ volatile(                                           \
+         VALGRIND_ALIGN_STACK                                     \
+         "pushl 48(%%eax)\n\t"                                    \
+         "pushl 44(%%eax)\n\t"                                    \
+         "pushl 40(%%eax)\n\t"                                    \
+         "pushl 36(%%eax)\n\t"                                    \
+         "pushl 32(%%eax)\n\t"                                    \
+         "pushl 28(%%eax)\n\t"                                    \
+         "pushl 24(%%eax)\n\t"                                    \
+         "pushl 20(%%eax)\n\t"                                    \
+         "pushl 16(%%eax)\n\t"                                    \
+         "pushl 12(%%eax)\n\t"                                    \
+         "pushl 8(%%eax)\n\t"                                     \
+         "pushl 4(%%eax)\n\t"                                     \
+         "movl (%%eax), %%eax\n\t"  /* target->%eax */            \
+         VALGRIND_CALL_NOREDIR_EAX                                \
+         VALGRIND_RESTORE_STACK                                   \
+         : /*out*/   "=a" (_res)                                  \
+         : /*in*/    "a" (&_argvec[0])                            \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "edi"   \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#endif /* PLAT_x86_linux || PLAT_x86_darwin */
+
+/* ------------------------ amd64-{linux,darwin} --------------- */
+
+#if defined(PLAT_amd64_linux)  ||  defined(PLAT_amd64_darwin)
+
+/* ARGREGS: rdi rsi rdx rcx r8 r9 (the rest on stack in R-to-L order) */
+
+/* These regs are trashed by the hidden call. */
+#define __CALLER_SAVED_REGS /*"rax",*/ "rcx", "rdx", "rsi",       \
+                            "rdi", "r8", "r9", "r10", "r11"
+
+/* This is all pretty complex.  It's so as to make stack unwinding
+   work reliably.  See bug 243270.  The basic problem is the sub and
+   add of 128 of %rsp in all of the following macros.  If gcc believes
+   the CFA is in %rsp, then unwinding may fail, because what's at the
+   CFA is not what gcc "expected" when it constructs the CFIs for the
+   places where the macros are instantiated.
+
+   But we can't just add a CFI annotation to increase the CFA offset
+   by 128, to match the sub of 128 from %rsp, because we don't know
+   whether gcc has chosen %rsp as the CFA at that point, or whether it
+   has chosen some other register (eg, %rbp).  In the latter case,
+   adding a CFI annotation to change the CFA offset is simply wrong.
+
+   So the solution is to get hold of the CFA using
+   __builtin_dwarf_cfa(), put it in a known register, and add a
+   CFI annotation to say what the register is.  We choose %rbp for
+   this (perhaps perversely), because:
+
+   (1) %rbp is already subject to unwinding.  If a new register was
+       chosen then the unwinder would have to unwind it in all stack
+       traces, which is expensive, and
+
+   (2) %rbp is already subject to precise exception updates in the
+       JIT.  If a new register was chosen, we'd have to have precise
+       exceptions for it too, which reduces performance of the
+       generated code.
+
+   However .. one extra complication.  We can't just whack the result
+   of __builtin_dwarf_cfa() into %rbp and then add %rbp to the
+   list of trashed registers at the end of the inline assembly
+   fragments; gcc won't allow %rbp to appear in that list.  Hence
+   instead we need to stash %rbp in %r15 for the duration of the asm,
+   and say that %r15 is trashed instead.  gcc seems happy to go with
+   that.
+
+   Oh .. and this all needs to be conditionalised so that it is
+   unchanged from before this commit, when compiled with older gccs
+   that don't support __builtin_dwarf_cfa.  Furthermore, since
+   this header file is freestanding, it has to be independent of
+   config.h, and so the following conditionalisation cannot depend on
+   configure time checks.
+
+   Although it's not clear from
+   'defined(__GNUC__) && defined(__GCC_HAVE_DWARF2_CFI_ASM)',
+   this expression excludes Darwin.
+   .cfi directives in Darwin assembly appear to be completely
+   different and I haven't investigated how they work.
+
+   For even more entertainment value, note we have to use the
+   completely undocumented __builtin_dwarf_cfa(), which appears to
+   really compute the CFA, whereas __builtin_frame_address(0) claims
+   to but actually doesn't.  See
+   https://bugs.kde.org/show_bug.cgi?id=243270#c47
+*/
+#if defined(__GNUC__) && defined(__GCC_HAVE_DWARF2_CFI_ASM)
+#  define __FRAME_POINTER                                         \
+      ,"r"(__builtin_dwarf_cfa())
+#  define VALGRIND_CFI_PROLOGUE                                   \
+      "movq %%rbp, %%r15\n\t"                                     \
+      "movq %2, %%rbp\n\t"                                        \
+      ".cfi_remember_state\n\t"                                   \
+      ".cfi_def_cfa rbp, 0\n\t"
+#  define VALGRIND_CFI_EPILOGUE                                   \
+      "movq %%r15, %%rbp\n\t"                                     \
+      ".cfi_restore_state\n\t"
+#else
+#  define __FRAME_POINTER
+#  define VALGRIND_CFI_PROLOGUE
+#  define VALGRIND_CFI_EPILOGUE
+#endif
+
+/* Macros to save and align the stack before making a function
+   call and restore it afterwards as gcc may not keep the stack
+   pointer aligned if it doesn't realise calls are being made
+   to other functions. */
+
+#define VALGRIND_ALIGN_STACK               \
+      "movq %%rsp,%%r14\n\t"               \
+      "andq $0xfffffffffffffff0,%%rsp\n\t"
+#define VALGRIND_RESTORE_STACK             \
+      "movq %%r14,%%rsp\n\t"
+
+/* These CALL_FN_ macros assume that on amd64-linux, sizeof(unsigned
+   long) == 8. */
+
+/* NB 9 Sept 07.  There is a nasty kludge here in all these CALL_FN_
+   macros.  In order not to trash the stack redzone, we need to drop
+   %rsp by 128 before the hidden call, and restore afterwards.  The
+   nastyness is that it is only by luck that the stack still appears
+   to be unwindable during the hidden call - since then the behaviour
+   of any routine using this macro does not match what the CFI data
+   says.  Sigh.
+
+   Why is this important?  Imagine that a wrapper has a stack
+   allocated local, and passes to the hidden call, a pointer to it.
+   Because gcc does not know about the hidden call, it may allocate
+   that local in the redzone.  Unfortunately the hidden call may then
+   trash it before it comes to use it.  So we must step clear of the
+   redzone, for the duration of the hidden call, to make it safe.
+
+   Probably the same problem afflicts the other redzone-style ABIs too
+   (ppc64-linux); but for those, the stack is
+   self describing (none of this CFI nonsense) so at least messing
+   with the stack pointer doesn't give a danger of non-unwindable
+   stack. */
+
+#define CALL_FN_W_v(lval, orig)                                        \
+   do {                                                                \
+      volatile OrigFn        _orig = (orig);                           \
+      volatile unsigned long _argvec[1];                               \
+      volatile unsigned long _res;                                     \
+      _argvec[0] = (unsigned long)_orig.nraddr;                        \
+      __asm__ volatile(                                                \
+         VALGRIND_CFI_PROLOGUE                                         \
+         VALGRIND_ALIGN_STACK                                          \
+         "subq $128,%%rsp\n\t"                                         \
+         "movq (%%rax), %%rax\n\t"  /* target->%rax */                 \
+         VALGRIND_CALL_NOREDIR_RAX                                     \
+         VALGRIND_RESTORE_STACK                                        \
+         VALGRIND_CFI_EPILOGUE                                         \
+         : /*out*/   "=a" (_res)                                       \
+         : /*in*/    "a" (&_argvec[0]) __FRAME_POINTER                 \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r14", "r15" \
+      );                                                               \
+      lval = (__typeof__(lval)) _res;                                  \
+   } while (0)
+
+#define CALL_FN_W_W(lval, orig, arg1)                                  \
+   do {                                                                \
+      volatile OrigFn        _orig = (orig);                           \
+      volatile unsigned long _argvec[2];                               \
+      volatile unsigned long _res;                                     \
+      _argvec[0] = (unsigned long)_orig.nraddr;                        \
+      _argvec[1] = (unsigned long)(arg1);                              \
+      __asm__ volatile(                                                \
+         VALGRIND_CFI_PROLOGUE                                         \
+         VALGRIND_ALIGN_STACK                                          \
+         "subq $128,%%rsp\n\t"                                         \
+         "movq 8(%%rax), %%rdi\n\t"                                    \
+         "movq (%%rax), %%rax\n\t"  /* target->%rax */                 \
+         VALGRIND_CALL_NOREDIR_RAX                                     \
+         VALGRIND_RESTORE_STACK                                        \
+         VALGRIND_CFI_EPILOGUE                                         \
+         : /*out*/   "=a" (_res)                                       \
+         : /*in*/    "a" (&_argvec[0]) __FRAME_POINTER                 \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r14", "r15" \
+      );                                                               \
+      lval = (__typeof__(lval)) _res;                                  \
+   } while (0)
+
+#define CALL_FN_W_WW(lval, orig, arg1,arg2)                            \
+   do {                                                                \
+      volatile OrigFn        _orig = (orig);                           \
+      volatile unsigned long _argvec[3];                               \
+      volatile unsigned long _res;                                     \
+      _argvec[0] = (unsigned long)_orig.nraddr;                        \
+      _argvec[1] = (unsigned long)(arg1);                              \
+      _argvec[2] = (unsigned long)(arg2);                              \
+      __asm__ volatile(                                                \
+         VALGRIND_CFI_PROLOGUE                                         \
+         VALGRIND_ALIGN_STACK                                          \
+         "subq $128,%%rsp\n\t"                                         \
+         "movq 16(%%rax), %%rsi\n\t"                                   \
+         "movq 8(%%rax), %%rdi\n\t"                                    \
+         "movq (%%rax), %%rax\n\t"  /* target->%rax */                 \
+         VALGRIND_CALL_NOREDIR_RAX                                     \
+         VALGRIND_RESTORE_STACK                                        \
+         VALGRIND_CFI_EPILOGUE                                         \
+         : /*out*/   "=a" (_res)                                       \
+         : /*in*/    "a" (&_argvec[0]) __FRAME_POINTER                 \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r14", "r15" \
+      );                                                               \
+      lval = (__typeof__(lval)) _res;                                  \
+   } while (0)
+
+#define CALL_FN_W_WWW(lval, orig, arg1,arg2,arg3)                      \
+   do {                                                                \
+      volatile OrigFn        _orig = (orig);                           \
+      volatile unsigned long _argvec[4];                               \
+      volatile unsigned long _res;                                     \
+      _argvec[0] = (unsigned long)_orig.nraddr;                        \
+      _argvec[1] = (unsigned long)(arg1);                              \
+      _argvec[2] = (unsigned long)(arg2);                              \
+      _argvec[3] = (unsigned long)(arg3);                              \
+      __asm__ volatile(                                                \
+         VALGRIND_CFI_PROLOGUE                                         \
+         VALGRIND_ALIGN_STACK                                          \
+         "subq $128,%%rsp\n\t"                                         \
+         "movq 24(%%rax), %%rdx\n\t"                                   \
+         "movq 16(%%rax), %%rsi\n\t"                                   \
+         "movq 8(%%rax), %%rdi\n\t"                                    \
+         "movq (%%rax), %%rax\n\t"  /* target->%rax */                 \
+         VALGRIND_CALL_NOREDIR_RAX                                     \
+         VALGRIND_RESTORE_STACK                                        \
+         VALGRIND_CFI_EPILOGUE                                         \
+         : /*out*/   "=a" (_res)                                       \
+         : /*in*/    "a" (&_argvec[0]) __FRAME_POINTER                 \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r14", "r15" \
+      );                                                               \
+      lval = (__typeof__(lval)) _res;                                  \
+   } while (0)
+
+#define CALL_FN_W_WWWW(lval, orig, arg1,arg2,arg3,arg4)                \
+   do {                                                                \
+      volatile OrigFn        _orig = (orig);                           \
+      volatile unsigned long _argvec[5];                               \
+      volatile unsigned long _res;                                     \
+      _argvec[0] = (unsigned long)_orig.nraddr;                        \
+      _argvec[1] = (unsigned long)(arg1);                              \
+      _argvec[2] = (unsigned long)(arg2);                              \
+      _argvec[3] = (unsigned long)(arg3);                              \
+      _argvec[4] = (unsigned long)(arg4);                              \
+      __asm__ volatile(                                                \
+         VALGRIND_CFI_PROLOGUE                                         \
+         VALGRIND_ALIGN_STACK                                          \
+         "subq $128,%%rsp\n\t"                                         \
+         "movq 32(%%rax), %%rcx\n\t"                                   \
+         "movq 24(%%rax), %%rdx\n\t"                                   \
+         "movq 16(%%rax), %%rsi\n\t"                                   \
+         "movq 8(%%rax), %%rdi\n\t"                                    \
+         "movq (%%rax), %%rax\n\t"  /* target->%rax */                 \
+         VALGRIND_CALL_NOREDIR_RAX                                     \
+         VALGRIND_RESTORE_STACK                                        \
+         VALGRIND_CFI_EPILOGUE                                         \
+         : /*out*/   "=a" (_res)                                       \
+         : /*in*/    "a" (&_argvec[0]) __FRAME_POINTER                 \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r14", "r15" \
+      );                                                               \
+      lval = (__typeof__(lval)) _res;                                  \
+   } while (0)
+
+#define CALL_FN_W_5W(lval, orig, arg1,arg2,arg3,arg4,arg5)             \
+   do {                                                                \
+      volatile OrigFn        _orig = (orig);                           \
+      volatile unsigned long _argvec[6];                               \
+      volatile unsigned long _res;                                     \
+      _argvec[0] = (unsigned long)_orig.nraddr;                        \
+      _argvec[1] = (unsigned long)(arg1);                              \
+      _argvec[2] = (unsigned long)(arg2);                              \
+      _argvec[3] = (unsigned long)(arg3);                              \
+      _argvec[4] = (unsigned long)(arg4);                              \
+      _argvec[5] = (unsigned long)(arg5);                              \
+      __asm__ volatile(                                                \
+         VALGRIND_CFI_PROLOGUE                                         \
+         VALGRIND_ALIGN_STACK                                          \
+         "subq $128,%%rsp\n\t"                                         \
+         "movq 40(%%rax), %%r8\n\t"                                    \
+         "movq 32(%%rax), %%rcx\n\t"                                   \
+         "movq 24(%%rax), %%rdx\n\t"                                   \
+         "movq 16(%%rax), %%rsi\n\t"                                   \
+         "movq 8(%%rax), %%rdi\n\t"                                    \
+         "movq (%%rax), %%rax\n\t"  /* target->%rax */                 \
+         VALGRIND_CALL_NOREDIR_RAX                                     \
+         VALGRIND_RESTORE_STACK                                        \
+         VALGRIND_CFI_EPILOGUE                                         \
+         : /*out*/   "=a" (_res)                                       \
+         : /*in*/    "a" (&_argvec[0]) __FRAME_POINTER                 \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r14", "r15" \
+      );                                                               \
+      lval = (__typeof__(lval)) _res;                                  \
+   } while (0)
+
+#define CALL_FN_W_6W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6)        \
+   do {                                                                \
+      volatile OrigFn        _orig = (orig);                           \
+      volatile unsigned long _argvec[7];                               \
+      volatile unsigned long _res;                                     \
+      _argvec[0] = (unsigned long)_orig.nraddr;                        \
+      _argvec[1] = (unsigned long)(arg1);                              \
+      _argvec[2] = (unsigned long)(arg2);                              \
+      _argvec[3] = (unsigned long)(arg3);                              \
+      _argvec[4] = (unsigned long)(arg4);                              \
+      _argvec[5] = (unsigned long)(arg5);                              \
+      _argvec[6] = (unsigned long)(arg6);                              \
+      __asm__ volatile(                                                \
+         VALGRIND_CFI_PROLOGUE                                         \
+         VALGRIND_ALIGN_STACK                                          \
+         "subq $128,%%rsp\n\t"                                         \
+         "movq 48(%%rax), %%r9\n\t"                                    \
+         "movq 40(%%rax), %%r8\n\t"                                    \
+         "movq 32(%%rax), %%rcx\n\t"                                   \
+         "movq 24(%%rax), %%rdx\n\t"                                   \
+         "movq 16(%%rax), %%rsi\n\t"                                   \
+         "movq 8(%%rax), %%rdi\n\t"                                    \
+         "movq (%%rax), %%rax\n\t"  /* target->%rax */                 \
+         VALGRIND_CALL_NOREDIR_RAX                                     \
+         VALGRIND_RESTORE_STACK                                        \
+         VALGRIND_CFI_EPILOGUE                                         \
+         : /*out*/   "=a" (_res)                                       \
+         : /*in*/    "a" (&_argvec[0]) __FRAME_POINTER                 \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r14", "r15" \
+      );                                                               \
+      lval = (__typeof__(lval)) _res;                                  \
+   } while (0)
+
+#define CALL_FN_W_7W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6,        \
+                                 arg7)                                 \
+   do {                                                                \
+      volatile OrigFn        _orig = (orig);                           \
+      volatile unsigned long _argvec[8];                               \
+      volatile unsigned long _res;                                     \
+      _argvec[0] = (unsigned long)_orig.nraddr;                        \
+      _argvec[1] = (unsigned long)(arg1);                              \
+      _argvec[2] = (unsigned long)(arg2);                              \
+      _argvec[3] = (unsigned long)(arg3);                              \
+      _argvec[4] = (unsigned long)(arg4);                              \
+      _argvec[5] = (unsigned long)(arg5);                              \
+      _argvec[6] = (unsigned long)(arg6);                              \
+      _argvec[7] = (unsigned long)(arg7);                              \
+      __asm__ volatile(                                                \
+         VALGRIND_CFI_PROLOGUE                                         \
+         VALGRIND_ALIGN_STACK                                          \
+         "subq $136,%%rsp\n\t"                                         \
+         "pushq 56(%%rax)\n\t"                                         \
+         "movq 48(%%rax), %%r9\n\t"                                    \
+         "movq 40(%%rax), %%r8\n\t"                                    \
+         "movq 32(%%rax), %%rcx\n\t"                                   \
+         "movq 24(%%rax), %%rdx\n\t"                                   \
+         "movq 16(%%rax), %%rsi\n\t"                                   \
+         "movq 8(%%rax), %%rdi\n\t"                                    \
+         "movq (%%rax), %%rax\n\t"  /* target->%rax */                 \
+         VALGRIND_CALL_NOREDIR_RAX                                     \
+         VALGRIND_RESTORE_STACK                                        \
+         VALGRIND_CFI_EPILOGUE                                         \
+         : /*out*/   "=a" (_res)                                       \
+         : /*in*/    "a" (&_argvec[0]) __FRAME_POINTER                 \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r14", "r15" \
+      );                                                               \
+      lval = (__typeof__(lval)) _res;                                  \
+   } while (0)
+
+#define CALL_FN_W_8W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6,        \
+                                 arg7,arg8)                            \
+   do {                                                                \
+      volatile OrigFn        _orig = (orig);                           \
+      volatile unsigned long _argvec[9];                               \
+      volatile unsigned long _res;                                     \
+      _argvec[0] = (unsigned long)_orig.nraddr;                        \
+      _argvec[1] = (unsigned long)(arg1);                              \
+      _argvec[2] = (unsigned long)(arg2);                              \
+      _argvec[3] = (unsigned long)(arg3);                              \
+      _argvec[4] = (unsigned long)(arg4);                              \
+      _argvec[5] = (unsigned long)(arg5);                              \
+      _argvec[6] = (unsigned long)(arg6);                              \
+      _argvec[7] = (unsigned long)(arg7);                              \
+      _argvec[8] = (unsigned long)(arg8);                              \
+      __asm__ volatile(                                                \
+         VALGRIND_CFI_PROLOGUE                                         \
+         VALGRIND_ALIGN_STACK                                          \
+         "subq $128,%%rsp\n\t"                                         \
+         "pushq 64(%%rax)\n\t"                                         \
+         "pushq 56(%%rax)\n\t"                                         \
+         "movq 48(%%rax), %%r9\n\t"                                    \
+         "movq 40(%%rax), %%r8\n\t"                                    \
+         "movq 32(%%rax), %%rcx\n\t"                                   \
+         "movq 24(%%rax), %%rdx\n\t"                                   \
+         "movq 16(%%rax), %%rsi\n\t"                                   \
+         "movq 8(%%rax), %%rdi\n\t"                                    \
+         "movq (%%rax), %%rax\n\t"  /* target->%rax */                 \
+         VALGRIND_CALL_NOREDIR_RAX                                     \
+         VALGRIND_RESTORE_STACK                                        \
+         VALGRIND_CFI_EPILOGUE                                         \
+         : /*out*/   "=a" (_res)                                       \
+         : /*in*/    "a" (&_argvec[0]) __FRAME_POINTER                 \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r14", "r15" \
+      );                                                               \
+      lval = (__typeof__(lval)) _res;                                  \
+   } while (0)
+
+#define CALL_FN_W_9W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6,        \
+                                 arg7,arg8,arg9)                       \
+   do {                                                                \
+      volatile OrigFn        _orig = (orig);                           \
+      volatile unsigned long _argvec[10];                              \
+      volatile unsigned long _res;                                     \
+      _argvec[0] = (unsigned long)_orig.nraddr;                        \
+      _argvec[1] = (unsigned long)(arg1);                              \
+      _argvec[2] = (unsigned long)(arg2);                              \
+      _argvec[3] = (unsigned long)(arg3);                              \
+      _argvec[4] = (unsigned long)(arg4);                              \
+      _argvec[5] = (unsigned long)(arg5);                              \
+      _argvec[6] = (unsigned long)(arg6);                              \
+      _argvec[7] = (unsigned long)(arg7);                              \
+      _argvec[8] = (unsigned long)(arg8);                              \
+      _argvec[9] = (unsigned long)(arg9);                              \
+      __asm__ volatile(                                                \
+         VALGRIND_CFI_PROLOGUE                                         \
+         VALGRIND_ALIGN_STACK                                          \
+         "subq $136,%%rsp\n\t"                                         \
+         "pushq 72(%%rax)\n\t"                                         \
+         "pushq 64(%%rax)\n\t"                                         \
+         "pushq 56(%%rax)\n\t"                                         \
+         "movq 48(%%rax), %%r9\n\t"                                    \
+         "movq 40(%%rax), %%r8\n\t"                                    \
+         "movq 32(%%rax), %%rcx\n\t"                                   \
+         "movq 24(%%rax), %%rdx\n\t"                                   \
+         "movq 16(%%rax), %%rsi\n\t"                                   \
+         "movq 8(%%rax), %%rdi\n\t"                                    \
+         "movq (%%rax), %%rax\n\t"  /* target->%rax */                 \
+         VALGRIND_CALL_NOREDIR_RAX                                     \
+         VALGRIND_RESTORE_STACK                                        \
+         VALGRIND_CFI_EPILOGUE                                         \
+         : /*out*/   "=a" (_res)                                       \
+         : /*in*/    "a" (&_argvec[0]) __FRAME_POINTER                 \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r14", "r15" \
+      );                                                               \
+      lval = (__typeof__(lval)) _res;                                  \
+   } while (0)
+
+#define CALL_FN_W_10W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6,       \
+                                  arg7,arg8,arg9,arg10)                \
+   do {                                                                \
+      volatile OrigFn        _orig = (orig);                           \
+      volatile unsigned long _argvec[11];                              \
+      volatile unsigned long _res;                                     \
+      _argvec[0] = (unsigned long)_orig.nraddr;                        \
+      _argvec[1] = (unsigned long)(arg1);                              \
+      _argvec[2] = (unsigned long)(arg2);                              \
+      _argvec[3] = (unsigned long)(arg3);                              \
+      _argvec[4] = (unsigned long)(arg4);                              \
+      _argvec[5] = (unsigned long)(arg5);                              \
+      _argvec[6] = (unsigned long)(arg6);                              \
+      _argvec[7] = (unsigned long)(arg7);                              \
+      _argvec[8] = (unsigned long)(arg8);                              \
+      _argvec[9] = (unsigned long)(arg9);                              \
+      _argvec[10] = (unsigned long)(arg10);                            \
+      __asm__ volatile(                                                \
+         VALGRIND_CFI_PROLOGUE                                         \
+         VALGRIND_ALIGN_STACK                                          \
+         "subq $128,%%rsp\n\t"                                         \
+         "pushq 80(%%rax)\n\t"                                         \
+         "pushq 72(%%rax)\n\t"                                         \
+         "pushq 64(%%rax)\n\t"                                         \
+         "pushq 56(%%rax)\n\t"                                         \
+         "movq 48(%%rax), %%r9\n\t"                                    \
+         "movq 40(%%rax), %%r8\n\t"                                    \
+         "movq 32(%%rax), %%rcx\n\t"                                   \
+         "movq 24(%%rax), %%rdx\n\t"                                   \
+         "movq 16(%%rax), %%rsi\n\t"                                   \
+         "movq 8(%%rax), %%rdi\n\t"                                    \
+         "movq (%%rax), %%rax\n\t"  /* target->%rax */                 \
+         VALGRIND_CALL_NOREDIR_RAX                                     \
+         VALGRIND_RESTORE_STACK                                        \
+         VALGRIND_CFI_EPILOGUE                                         \
+         : /*out*/   "=a" (_res)                                       \
+         : /*in*/    "a" (&_argvec[0]) __FRAME_POINTER                 \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r14", "r15" \
+      );                                                               \
+      lval = (__typeof__(lval)) _res;                                  \
+   } while (0)
+
+#define CALL_FN_W_11W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6,       \
+                                  arg7,arg8,arg9,arg10,arg11)          \
+   do {                                                                \
+      volatile OrigFn        _orig = (orig);                           \
+      volatile unsigned long _argvec[12];                              \
+      volatile unsigned long _res;                                     \
+      _argvec[0] = (unsigned long)_orig.nraddr;                        \
+      _argvec[1] = (unsigned long)(arg1);                              \
+      _argvec[2] = (unsigned long)(arg2);                              \
+      _argvec[3] = (unsigned long)(arg3);                              \
+      _argvec[4] = (unsigned long)(arg4);                              \
+      _argvec[5] = (unsigned long)(arg5);                              \
+      _argvec[6] = (unsigned long)(arg6);                              \
+      _argvec[7] = (unsigned long)(arg7);                              \
+      _argvec[8] = (unsigned long)(arg8);                              \
+      _argvec[9] = (unsigned long)(arg9);                              \
+      _argvec[10] = (unsigned long)(arg10);                            \
+      _argvec[11] = (unsigned long)(arg11);                            \
+      __asm__ volatile(                                                \
+         VALGRIND_CFI_PROLOGUE                                         \
+         VALGRIND_ALIGN_STACK                                          \
+         "subq $136,%%rsp\n\t"                                         \
+         "pushq 88(%%rax)\n\t"                                         \
+         "pushq 80(%%rax)\n\t"                                         \
+         "pushq 72(%%rax)\n\t"                                         \
+         "pushq 64(%%rax)\n\t"                                         \
+         "pushq 56(%%rax)\n\t"                                         \
+         "movq 48(%%rax), %%r9\n\t"                                    \
+         "movq 40(%%rax), %%r8\n\t"                                    \
+         "movq 32(%%rax), %%rcx\n\t"                                   \
+         "movq 24(%%rax), %%rdx\n\t"                                   \
+         "movq 16(%%rax), %%rsi\n\t"                                   \
+         "movq 8(%%rax), %%rdi\n\t"                                    \
+         "movq (%%rax), %%rax\n\t"  /* target->%rax */                 \
+         VALGRIND_CALL_NOREDIR_RAX                                     \
+         VALGRIND_RESTORE_STACK                                        \
+         VALGRIND_CFI_EPILOGUE                                         \
+         : /*out*/   "=a" (_res)                                       \
+         : /*in*/    "a" (&_argvec[0]) __FRAME_POINTER                 \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r14", "r15" \
+      );                                                               \
+      lval = (__typeof__(lval)) _res;                                  \
+   } while (0)
+
+#define CALL_FN_W_12W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6,       \
+                                arg7,arg8,arg9,arg10,arg11,arg12)      \
+   do {                                                                \
+      volatile OrigFn        _orig = (orig);                           \
+      volatile unsigned long _argvec[13];                              \
+      volatile unsigned long _res;                                     \
+      _argvec[0] = (unsigned long)_orig.nraddr;                        \
+      _argvec[1] = (unsigned long)(arg1);                              \
+      _argvec[2] = (unsigned long)(arg2);                              \
+      _argvec[3] = (unsigned long)(arg3);                              \
+      _argvec[4] = (unsigned long)(arg4);                              \
+      _argvec[5] = (unsigned long)(arg5);                              \
+      _argvec[6] = (unsigned long)(arg6);                              \
+      _argvec[7] = (unsigned long)(arg7);                              \
+      _argvec[8] = (unsigned long)(arg8);                              \
+      _argvec[9] = (unsigned long)(arg9);                              \
+      _argvec[10] = (unsigned long)(arg10);                            \
+      _argvec[11] = (unsigned long)(arg11);                            \
+      _argvec[12] = (unsigned long)(arg12);                            \
+      __asm__ volatile(                                                \
+         VALGRIND_CFI_PROLOGUE                                         \
+         VALGRIND_ALIGN_STACK                                          \
+         "subq $128,%%rsp\n\t"                                         \
+         "pushq 96(%%rax)\n\t"                                         \
+         "pushq 88(%%rax)\n\t"                                         \
+         "pushq 80(%%rax)\n\t"                                         \
+         "pushq 72(%%rax)\n\t"                                         \
+         "pushq 64(%%rax)\n\t"                                         \
+         "pushq 56(%%rax)\n\t"                                         \
+         "movq 48(%%rax), %%r9\n\t"                                    \
+         "movq 40(%%rax), %%r8\n\t"                                    \
+         "movq 32(%%rax), %%rcx\n\t"                                   \
+         "movq 24(%%rax), %%rdx\n\t"                                   \
+         "movq 16(%%rax), %%rsi\n\t"                                   \
+         "movq 8(%%rax), %%rdi\n\t"                                    \
+         "movq (%%rax), %%rax\n\t"  /* target->%rax */                 \
+         VALGRIND_CALL_NOREDIR_RAX                                     \
+         VALGRIND_RESTORE_STACK                                        \
+         VALGRIND_CFI_EPILOGUE                                         \
+         : /*out*/   "=a" (_res)                                       \
+         : /*in*/    "a" (&_argvec[0]) __FRAME_POINTER                 \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r14", "r15" \
+      );                                                               \
+      lval = (__typeof__(lval)) _res;                                  \
+   } while (0)
+
+#endif /* PLAT_amd64_linux || PLAT_amd64_darwin */
+
+/* ------------------------ ppc32-linux ------------------------ */
+
+#if defined(PLAT_ppc32_linux)
+
+/* This is useful for finding out about the on-stack stuff:
+
+   extern int f9  ( int,int,int,int,int,int,int,int,int );
+   extern int f10 ( int,int,int,int,int,int,int,int,int,int );
+   extern int f11 ( int,int,int,int,int,int,int,int,int,int,int );
+   extern int f12 ( int,int,int,int,int,int,int,int,int,int,int,int );
+
+   int g9 ( void ) {
+      return f9(11,22,33,44,55,66,77,88,99);
+   }
+   int g10 ( void ) {
+      return f10(11,22,33,44,55,66,77,88,99,110);
+   }
+   int g11 ( void ) {
+      return f11(11,22,33,44,55,66,77,88,99,110,121);
+   }
+   int g12 ( void ) {
+      return f12(11,22,33,44,55,66,77,88,99,110,121,132);
+   }
+*/
+
+/* ARGREGS: r3 r4 r5 r6 r7 r8 r9 r10 (the rest on stack somewhere) */
+
+/* These regs are trashed by the hidden call. */
+#define __CALLER_SAVED_REGS                                       \
+   "lr", "ctr", "xer",                                            \
+   "cr0", "cr1", "cr2", "cr3", "cr4", "cr5", "cr6", "cr7",        \
+   "r0", "r2", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "r10",   \
+   "r11", "r12", "r13"
+
+/* Macros to save and align the stack before making a function
+   call and restore it afterwards as gcc may not keep the stack
+   pointer aligned if it doesn't realise calls are being made
+   to other functions. */
+
+#define VALGRIND_ALIGN_STACK               \
+      "mr 28,1\n\t"                        \
+      "rlwinm 1,1,0,0,27\n\t"
+#define VALGRIND_RESTORE_STACK             \
+      "mr 1,28\n\t"
+
+/* These CALL_FN_ macros assume that on ppc32-linux, 
+   sizeof(unsigned long) == 4. */
+
+#define CALL_FN_W_v(lval, orig)                                   \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[1];                          \
+      volatile unsigned long _res;                                \
+      _argvec[0] = (unsigned long)_orig.nraddr;                   \
+      __asm__ volatile(                                           \
+         VALGRIND_ALIGN_STACK                                     \
+         "mr 11,%1\n\t"                                           \
+         "lwz 11,0(11)\n\t"  /* target->r11 */                    \
+         VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11                  \
+         VALGRIND_RESTORE_STACK                                   \
+         "mr %0,3"                                                \
+         : /*out*/   "=r" (_res)                                  \
+         : /*in*/    "r" (&_argvec[0])                            \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r28"   \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_W(lval, orig, arg1)                             \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[2];                          \
+      volatile unsigned long _res;                                \
+      _argvec[0] = (unsigned long)_orig.nraddr;                   \
+      _argvec[1] = (unsigned long)arg1;                           \
+      __asm__ volatile(                                           \
+         VALGRIND_ALIGN_STACK                                     \
+         "mr 11,%1\n\t"                                           \
+         "lwz 3,4(11)\n\t"   /* arg1->r3 */                       \
+         "lwz 11,0(11)\n\t"  /* target->r11 */                    \
+         VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11                  \
+         VALGRIND_RESTORE_STACK                                   \
+         "mr %0,3"                                                \
+         : /*out*/   "=r" (_res)                                  \
+         : /*in*/    "r" (&_argvec[0])                            \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r28"   \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_WW(lval, orig, arg1,arg2)                       \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[3];                          \
+      volatile unsigned long _res;                                \
+      _argvec[0] = (unsigned long)_orig.nraddr;                   \
+      _argvec[1] = (unsigned long)arg1;                           \
+      _argvec[2] = (unsigned long)arg2;                           \
+      __asm__ volatile(                                           \
+         VALGRIND_ALIGN_STACK                                     \
+         "mr 11,%1\n\t"                                           \
+         "lwz 3,4(11)\n\t"   /* arg1->r3 */                       \
+         "lwz 4,8(11)\n\t"                                        \
+         "lwz 11,0(11)\n\t"  /* target->r11 */                    \
+         VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11                  \
+         VALGRIND_RESTORE_STACK                                   \
+         "mr %0,3"                                                \
+         : /*out*/   "=r" (_res)                                  \
+         : /*in*/    "r" (&_argvec[0])                            \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r28"   \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_WWW(lval, orig, arg1,arg2,arg3)                 \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[4];                          \
+      volatile unsigned long _res;                                \
+      _argvec[0] = (unsigned long)_orig.nraddr;                   \
+      _argvec[1] = (unsigned long)arg1;                           \
+      _argvec[2] = (unsigned long)arg2;                           \
+      _argvec[3] = (unsigned long)arg3;                           \
+      __asm__ volatile(                                           \
+         VALGRIND_ALIGN_STACK                                     \
+         "mr 11,%1\n\t"                                           \
+         "lwz 3,4(11)\n\t"   /* arg1->r3 */                       \
+         "lwz 4,8(11)\n\t"                                        \
+         "lwz 5,12(11)\n\t"                                       \
+         "lwz 11,0(11)\n\t"  /* target->r11 */                    \
+         VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11                  \
+         VALGRIND_RESTORE_STACK                                   \
+         "mr %0,3"                                                \
+         : /*out*/   "=r" (_res)                                  \
+         : /*in*/    "r" (&_argvec[0])                            \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r28"   \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_WWWW(lval, orig, arg1,arg2,arg3,arg4)           \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[5];                          \
+      volatile unsigned long _res;                                \
+      _argvec[0] = (unsigned long)_orig.nraddr;                   \
+      _argvec[1] = (unsigned long)arg1;                           \
+      _argvec[2] = (unsigned long)arg2;                           \
+      _argvec[3] = (unsigned long)arg3;                           \
+      _argvec[4] = (unsigned long)arg4;                           \
+      __asm__ volatile(                                           \
+         VALGRIND_ALIGN_STACK                                     \
+         "mr 11,%1\n\t"                                           \
+         "lwz 3,4(11)\n\t"   /* arg1->r3 */                       \
+         "lwz 4,8(11)\n\t"                                        \
+         "lwz 5,12(11)\n\t"                                       \
+         "lwz 6,16(11)\n\t"  /* arg4->r6 */                       \
+         "lwz 11,0(11)\n\t"  /* target->r11 */                    \
+         VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11                  \
+         VALGRIND_RESTORE_STACK                                   \
+         "mr %0,3"                                                \
+         : /*out*/   "=r" (_res)                                  \
+         : /*in*/    "r" (&_argvec[0])                            \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r28"   \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_5W(lval, orig, arg1,arg2,arg3,arg4,arg5)        \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[6];                          \
+      volatile unsigned long _res;                                \
+      _argvec[0] = (unsigned long)_orig.nraddr;                   \
+      _argvec[1] = (unsigned long)arg1;                           \
+      _argvec[2] = (unsigned long)arg2;                           \
+      _argvec[3] = (unsigned long)arg3;                           \
+      _argvec[4] = (unsigned long)arg4;                           \
+      _argvec[5] = (unsigned long)arg5;                           \
+      __asm__ volatile(                                           \
+         VALGRIND_ALIGN_STACK                                     \
+         "mr 11,%1\n\t"                                           \
+         "lwz 3,4(11)\n\t"   /* arg1->r3 */                       \
+         "lwz 4,8(11)\n\t"                                        \
+         "lwz 5,12(11)\n\t"                                       \
+         "lwz 6,16(11)\n\t"  /* arg4->r6 */                       \
+         "lwz 7,20(11)\n\t"                                       \
+         "lwz 11,0(11)\n\t"  /* target->r11 */                    \
+         VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11                  \
+         VALGRIND_RESTORE_STACK                                   \
+         "mr %0,3"                                                \
+         : /*out*/   "=r" (_res)                                  \
+         : /*in*/    "r" (&_argvec[0])                            \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r28"   \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_6W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6)   \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[7];                          \
+      volatile unsigned long _res;                                \
+      _argvec[0] = (unsigned long)_orig.nraddr;                   \
+      _argvec[1] = (unsigned long)arg1;                           \
+      _argvec[2] = (unsigned long)arg2;                           \
+      _argvec[3] = (unsigned long)arg3;                           \
+      _argvec[4] = (unsigned long)arg4;                           \
+      _argvec[5] = (unsigned long)arg5;                           \
+      _argvec[6] = (unsigned long)arg6;                           \
+      __asm__ volatile(                                           \
+         VALGRIND_ALIGN_STACK                                     \
+         "mr 11,%1\n\t"                                           \
+         "lwz 3,4(11)\n\t"   /* arg1->r3 */                       \
+         "lwz 4,8(11)\n\t"                                        \
+         "lwz 5,12(11)\n\t"                                       \
+         "lwz 6,16(11)\n\t"  /* arg4->r6 */                       \
+         "lwz 7,20(11)\n\t"                                       \
+         "lwz 8,24(11)\n\t"                                       \
+         "lwz 11,0(11)\n\t"  /* target->r11 */                    \
+         VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11                  \
+         VALGRIND_RESTORE_STACK                                   \
+         "mr %0,3"                                                \
+         : /*out*/   "=r" (_res)                                  \
+         : /*in*/    "r" (&_argvec[0])                            \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r28"   \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_7W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6,   \
+                                 arg7)                            \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[8];                          \
+      volatile unsigned long _res;                                \
+      _argvec[0] = (unsigned long)_orig.nraddr;                   \
+      _argvec[1] = (unsigned long)arg1;                           \
+      _argvec[2] = (unsigned long)arg2;                           \
+      _argvec[3] = (unsigned long)arg3;                           \
+      _argvec[4] = (unsigned long)arg4;                           \
+      _argvec[5] = (unsigned long)arg5;                           \
+      _argvec[6] = (unsigned long)arg6;                           \
+      _argvec[7] = (unsigned long)arg7;                           \
+      __asm__ volatile(                                           \
+         VALGRIND_ALIGN_STACK                                     \
+         "mr 11,%1\n\t"                                           \
+         "lwz 3,4(11)\n\t"   /* arg1->r3 */                       \
+         "lwz 4,8(11)\n\t"                                        \
+         "lwz 5,12(11)\n\t"                                       \
+         "lwz 6,16(11)\n\t"  /* arg4->r6 */                       \
+         "lwz 7,20(11)\n\t"                                       \
+         "lwz 8,24(11)\n\t"                                       \
+         "lwz 9,28(11)\n\t"                                       \
+         "lwz 11,0(11)\n\t"  /* target->r11 */                    \
+         VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11                  \
+         VALGRIND_RESTORE_STACK                                   \
+         "mr %0,3"                                                \
+         : /*out*/   "=r" (_res)                                  \
+         : /*in*/    "r" (&_argvec[0])                            \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r28"   \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_8W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6,   \
+                                 arg7,arg8)                       \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[9];                          \
+      volatile unsigned long _res;                                \
+      _argvec[0] = (unsigned long)_orig.nraddr;                   \
+      _argvec[1] = (unsigned long)arg1;                           \
+      _argvec[2] = (unsigned long)arg2;                           \
+      _argvec[3] = (unsigned long)arg3;                           \
+      _argvec[4] = (unsigned long)arg4;                           \
+      _argvec[5] = (unsigned long)arg5;                           \
+      _argvec[6] = (unsigned long)arg6;                           \
+      _argvec[7] = (unsigned long)arg7;                           \
+      _argvec[8] = (unsigned long)arg8;                           \
+      __asm__ volatile(                                           \
+         VALGRIND_ALIGN_STACK                                     \
+         "mr 11,%1\n\t"                                           \
+         "lwz 3,4(11)\n\t"   /* arg1->r3 */                       \
+         "lwz 4,8(11)\n\t"                                        \
+         "lwz 5,12(11)\n\t"                                       \
+         "lwz 6,16(11)\n\t"  /* arg4->r6 */                       \
+         "lwz 7,20(11)\n\t"                                       \
+         "lwz 8,24(11)\n\t"                                       \
+         "lwz 9,28(11)\n\t"                                       \
+         "lwz 10,32(11)\n\t" /* arg8->r10 */                      \
+         "lwz 11,0(11)\n\t"  /* target->r11 */                    \
+         VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11                  \
+         VALGRIND_RESTORE_STACK                                   \
+         "mr %0,3"                                                \
+         : /*out*/   "=r" (_res)                                  \
+         : /*in*/    "r" (&_argvec[0])                            \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r28"   \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_9W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6,   \
+                                 arg7,arg8,arg9)                  \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[10];                         \
+      volatile unsigned long _res;                                \
+      _argvec[0] = (unsigned long)_orig.nraddr;                   \
+      _argvec[1] = (unsigned long)arg1;                           \
+      _argvec[2] = (unsigned long)arg2;                           \
+      _argvec[3] = (unsigned long)arg3;                           \
+      _argvec[4] = (unsigned long)arg4;                           \
+      _argvec[5] = (unsigned long)arg5;                           \
+      _argvec[6] = (unsigned long)arg6;                           \
+      _argvec[7] = (unsigned long)arg7;                           \
+      _argvec[8] = (unsigned long)arg8;                           \
+      _argvec[9] = (unsigned long)arg9;                           \
+      __asm__ volatile(                                           \
+         VALGRIND_ALIGN_STACK                                     \
+         "mr 11,%1\n\t"                                           \
+         "addi 1,1,-16\n\t"                                       \
+         /* arg9 */                                               \
+         "lwz 3,36(11)\n\t"                                       \
+         "stw 3,8(1)\n\t"                                         \
+         /* args1-8 */                                            \
+         "lwz 3,4(11)\n\t"   /* arg1->r3 */                       \
+         "lwz 4,8(11)\n\t"                                        \
+         "lwz 5,12(11)\n\t"                                       \
+         "lwz 6,16(11)\n\t"  /* arg4->r6 */                       \
+         "lwz 7,20(11)\n\t"                                       \
+         "lwz 8,24(11)\n\t"                                       \
+         "lwz 9,28(11)\n\t"                                       \
+         "lwz 10,32(11)\n\t" /* arg8->r10 */                      \
+         "lwz 11,0(11)\n\t"  /* target->r11 */                    \
+         VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11                  \
+         VALGRIND_RESTORE_STACK                                   \
+         "mr %0,3"                                                \
+         : /*out*/   "=r" (_res)                                  \
+         : /*in*/    "r" (&_argvec[0])                            \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r28"   \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_10W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6,  \
+                                  arg7,arg8,arg9,arg10)           \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[11];                         \
+      volatile unsigned long _res;                                \
+      _argvec[0] = (unsigned long)_orig.nraddr;                   \
+      _argvec[1] = (unsigned long)arg1;                           \
+      _argvec[2] = (unsigned long)arg2;                           \
+      _argvec[3] = (unsigned long)arg3;                           \
+      _argvec[4] = (unsigned long)arg4;                           \
+      _argvec[5] = (unsigned long)arg5;                           \
+      _argvec[6] = (unsigned long)arg6;                           \
+      _argvec[7] = (unsigned long)arg7;                           \
+      _argvec[8] = (unsigned long)arg8;                           \
+      _argvec[9] = (unsigned long)arg9;                           \
+      _argvec[10] = (unsigned long)arg10;                         \
+      __asm__ volatile(                                           \
+         VALGRIND_ALIGN_STACK                                     \
+         "mr 11,%1\n\t"                                           \
+         "addi 1,1,-16\n\t"                                       \
+         /* arg10 */                                              \
+         "lwz 3,40(11)\n\t"                                       \
+         "stw 3,12(1)\n\t"                                        \
+         /* arg9 */                                               \
+         "lwz 3,36(11)\n\t"                                       \
+         "stw 3,8(1)\n\t"                                         \
+         /* args1-8 */                                            \
+         "lwz 3,4(11)\n\t"   /* arg1->r3 */                       \
+         "lwz 4,8(11)\n\t"                                        \
+         "lwz 5,12(11)\n\t"                                       \
+         "lwz 6,16(11)\n\t"  /* arg4->r6 */                       \
+         "lwz 7,20(11)\n\t"                                       \
+         "lwz 8,24(11)\n\t"                                       \
+         "lwz 9,28(11)\n\t"                                       \
+         "lwz 10,32(11)\n\t" /* arg8->r10 */                      \
+         "lwz 11,0(11)\n\t"  /* target->r11 */                    \
+         VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11                  \
+         VALGRIND_RESTORE_STACK                                   \
+         "mr %0,3"                                                \
+         : /*out*/   "=r" (_res)                                  \
+         : /*in*/    "r" (&_argvec[0])                            \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r28"   \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_11W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6,  \
+                                  arg7,arg8,arg9,arg10,arg11)     \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[12];                         \
+      volatile unsigned long _res;                                \
+      _argvec[0] = (unsigned long)_orig.nraddr;                   \
+      _argvec[1] = (unsigned long)arg1;                           \
+      _argvec[2] = (unsigned long)arg2;                           \
+      _argvec[3] = (unsigned long)arg3;                           \
+      _argvec[4] = (unsigned long)arg4;                           \
+      _argvec[5] = (unsigned long)arg5;                           \
+      _argvec[6] = (unsigned long)arg6;                           \
+      _argvec[7] = (unsigned long)arg7;                           \
+      _argvec[8] = (unsigned long)arg8;                           \
+      _argvec[9] = (unsigned long)arg9;                           \
+      _argvec[10] = (unsigned long)arg10;                         \
+      _argvec[11] = (unsigned long)arg11;                         \
+      __asm__ volatile(                                           \
+         VALGRIND_ALIGN_STACK                                     \
+         "mr 11,%1\n\t"                                           \
+         "addi 1,1,-32\n\t"                                       \
+         /* arg11 */                                              \
+         "lwz 3,44(11)\n\t"                                       \
+         "stw 3,16(1)\n\t"                                        \
+         /* arg10 */                                              \
+         "lwz 3,40(11)\n\t"                                       \
+         "stw 3,12(1)\n\t"                                        \
+         /* arg9 */                                               \
+         "lwz 3,36(11)\n\t"                                       \
+         "stw 3,8(1)\n\t"                                         \
+         /* args1-8 */                                            \
+         "lwz 3,4(11)\n\t"   /* arg1->r3 */                       \
+         "lwz 4,8(11)\n\t"                                        \
+         "lwz 5,12(11)\n\t"                                       \
+         "lwz 6,16(11)\n\t"  /* arg4->r6 */                       \
+         "lwz 7,20(11)\n\t"                                       \
+         "lwz 8,24(11)\n\t"                                       \
+         "lwz 9,28(11)\n\t"                                       \
+         "lwz 10,32(11)\n\t" /* arg8->r10 */                      \
+         "lwz 11,0(11)\n\t"  /* target->r11 */                    \
+         VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11                  \
+         VALGRIND_RESTORE_STACK                                   \
+         "mr %0,3"                                                \
+         : /*out*/   "=r" (_res)                                  \
+         : /*in*/    "r" (&_argvec[0])                            \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r28"   \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_12W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6,  \
+                                arg7,arg8,arg9,arg10,arg11,arg12) \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[13];                         \
+      volatile unsigned long _res;                                \
+      _argvec[0] = (unsigned long)_orig.nraddr;                   \
+      _argvec[1] = (unsigned long)arg1;                           \
+      _argvec[2] = (unsigned long)arg2;                           \
+      _argvec[3] = (unsigned long)arg3;                           \
+      _argvec[4] = (unsigned long)arg4;                           \
+      _argvec[5] = (unsigned long)arg5;                           \
+      _argvec[6] = (unsigned long)arg6;                           \
+      _argvec[7] = (unsigned long)arg7;                           \
+      _argvec[8] = (unsigned long)arg8;                           \
+      _argvec[9] = (unsigned long)arg9;                           \
+      _argvec[10] = (unsigned long)arg10;                         \
+      _argvec[11] = (unsigned long)arg11;                         \
+      _argvec[12] = (unsigned long)arg12;                         \
+      __asm__ volatile(                                           \
+         VALGRIND_ALIGN_STACK                                     \
+         "mr 11,%1\n\t"                                           \
+         "addi 1,1,-32\n\t"                                       \
+         /* arg12 */                                              \
+         "lwz 3,48(11)\n\t"                                       \
+         "stw 3,20(1)\n\t"                                        \
+         /* arg11 */                                              \
+         "lwz 3,44(11)\n\t"                                       \
+         "stw 3,16(1)\n\t"                                        \
+         /* arg10 */                                              \
+         "lwz 3,40(11)\n\t"                                       \
+         "stw 3,12(1)\n\t"                                        \
+         /* arg9 */                                               \
+         "lwz 3,36(11)\n\t"                                       \
+         "stw 3,8(1)\n\t"                                         \
+         /* args1-8 */                                            \
+         "lwz 3,4(11)\n\t"   /* arg1->r3 */                       \
+         "lwz 4,8(11)\n\t"                                        \
+         "lwz 5,12(11)\n\t"                                       \
+         "lwz 6,16(11)\n\t"  /* arg4->r6 */                       \
+         "lwz 7,20(11)\n\t"                                       \
+         "lwz 8,24(11)\n\t"                                       \
+         "lwz 9,28(11)\n\t"                                       \
+         "lwz 10,32(11)\n\t" /* arg8->r10 */                      \
+         "lwz 11,0(11)\n\t"  /* target->r11 */                    \
+         VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11                  \
+         VALGRIND_RESTORE_STACK                                   \
+         "mr %0,3"                                                \
+         : /*out*/   "=r" (_res)                                  \
+         : /*in*/    "r" (&_argvec[0])                            \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r28"   \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#endif /* PLAT_ppc32_linux */
+
+/* ------------------------ ppc64-linux ------------------------ */
+
+#if defined(PLAT_ppc64_linux)
+
+/* ARGREGS: r3 r4 r5 r6 r7 r8 r9 r10 (the rest on stack somewhere) */
+
+/* These regs are trashed by the hidden call. */
+#define __CALLER_SAVED_REGS                                       \
+   "lr", "ctr", "xer",                                            \
+   "cr0", "cr1", "cr2", "cr3", "cr4", "cr5", "cr6", "cr7",        \
+   "r0", "r2", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "r10",   \
+   "r11", "r12", "r13"
+
+/* Macros to save and align the stack before making a function
+   call and restore it afterwards as gcc may not keep the stack
+   pointer aligned if it doesn't realise calls are being made
+   to other functions. */
+
+#define VALGRIND_ALIGN_STACK               \
+      "mr 28,1\n\t"                        \
+      "rldicr 1,1,0,59\n\t"
+#define VALGRIND_RESTORE_STACK             \
+      "mr 1,28\n\t"
+
+/* These CALL_FN_ macros assume that on ppc64-linux, sizeof(unsigned
+   long) == 8. */
+
+#define CALL_FN_W_v(lval, orig)                                   \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[3+0];                        \
+      volatile unsigned long _res;                                \
+      /* _argvec[0] holds current r2 across the call */           \
+      _argvec[1] = (unsigned long)_orig.r2;                       \
+      _argvec[2] = (unsigned long)_orig.nraddr;                   \
+      __asm__ volatile(                                           \
+         VALGRIND_ALIGN_STACK                                     \
+         "mr 11,%1\n\t"                                           \
+         "std 2,-16(11)\n\t"  /* save tocptr */                   \
+         "ld   2,-8(11)\n\t"  /* use nraddr's tocptr */           \
+         "ld  11, 0(11)\n\t"  /* target->r11 */                   \
+         VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11                  \
+         "mr 11,%1\n\t"                                           \
+         "mr %0,3\n\t"                                            \
+         "ld 2,-16(11)\n\t" /* restore tocptr */                  \
+         VALGRIND_RESTORE_STACK                                   \
+         : /*out*/   "=r" (_res)                                  \
+         : /*in*/    "r" (&_argvec[2])                            \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r28"   \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_W(lval, orig, arg1)                             \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[3+1];                        \
+      volatile unsigned long _res;                                \
+      /* _argvec[0] holds current r2 across the call */           \
+      _argvec[1]   = (unsigned long)_orig.r2;                     \
+      _argvec[2]   = (unsigned long)_orig.nraddr;                 \
+      _argvec[2+1] = (unsigned long)arg1;                         \
+      __asm__ volatile(                                           \
+         VALGRIND_ALIGN_STACK                                     \
+         "mr 11,%1\n\t"                                           \
+         "std 2,-16(11)\n\t"  /* save tocptr */                   \
+         "ld   2,-8(11)\n\t"  /* use nraddr's tocptr */           \
+         "ld   3, 8(11)\n\t"  /* arg1->r3 */                      \
+         "ld  11, 0(11)\n\t"  /* target->r11 */                   \
+         VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11                  \
+         "mr 11,%1\n\t"                                           \
+         "mr %0,3\n\t"                                            \
+         "ld 2,-16(11)\n\t" /* restore tocptr */                  \
+         VALGRIND_RESTORE_STACK                                   \
+         : /*out*/   "=r" (_res)                                  \
+         : /*in*/    "r" (&_argvec[2])                            \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r28"   \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_WW(lval, orig, arg1,arg2)                       \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[3+2];                        \
+      volatile unsigned long _res;                                \
+      /* _argvec[0] holds current r2 across the call */           \
+      _argvec[1]   = (unsigned long)_orig.r2;                     \
+      _argvec[2]   = (unsigned long)_orig.nraddr;                 \
+      _argvec[2+1] = (unsigned long)arg1;                         \
+      _argvec[2+2] = (unsigned long)arg2;                         \
+      __asm__ volatile(                                           \
+         VALGRIND_ALIGN_STACK                                     \
+         "mr 11,%1\n\t"                                           \
+         "std 2,-16(11)\n\t"  /* save tocptr */                   \
+         "ld   2,-8(11)\n\t"  /* use nraddr's tocptr */           \
+         "ld   3, 8(11)\n\t"  /* arg1->r3 */                      \
+         "ld   4, 16(11)\n\t" /* arg2->r4 */                      \
+         "ld  11, 0(11)\n\t"  /* target->r11 */                   \
+         VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11                  \
+         "mr 11,%1\n\t"                                           \
+         "mr %0,3\n\t"                                            \
+         "ld 2,-16(11)\n\t" /* restore tocptr */                  \
+         VALGRIND_RESTORE_STACK                                   \
+         : /*out*/   "=r" (_res)                                  \
+         : /*in*/    "r" (&_argvec[2])                            \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r28"   \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_WWW(lval, orig, arg1,arg2,arg3)                 \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[3+3];                        \
+      volatile unsigned long _res;                                \
+      /* _argvec[0] holds current r2 across the call */           \
+      _argvec[1]   = (unsigned long)_orig.r2;                     \
+      _argvec[2]   = (unsigned long)_orig.nraddr;                 \
+      _argvec[2+1] = (unsigned long)arg1;                         \
+      _argvec[2+2] = (unsigned long)arg2;                         \
+      _argvec[2+3] = (unsigned long)arg3;                         \
+      __asm__ volatile(                                           \
+         VALGRIND_ALIGN_STACK                                     \
+         "mr 11,%1\n\t"                                           \
+         "std 2,-16(11)\n\t"  /* save tocptr */                   \
+         "ld   2,-8(11)\n\t"  /* use nraddr's tocptr */           \
+         "ld   3, 8(11)\n\t"  /* arg1->r3 */                      \
+         "ld   4, 16(11)\n\t" /* arg2->r4 */                      \
+         "ld   5, 24(11)\n\t" /* arg3->r5 */                      \
+         "ld  11, 0(11)\n\t"  /* target->r11 */                   \
+         VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11                  \
+         "mr 11,%1\n\t"                                           \
+         "mr %0,3\n\t"                                            \
+         "ld 2,-16(11)\n\t" /* restore tocptr */                  \
+         VALGRIND_RESTORE_STACK                                   \
+         : /*out*/   "=r" (_res)                                  \
+         : /*in*/    "r" (&_argvec[2])                            \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r28"   \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_WWWW(lval, orig, arg1,arg2,arg3,arg4)           \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[3+4];                        \
+      volatile unsigned long _res;                                \
+      /* _argvec[0] holds current r2 across the call */           \
+      _argvec[1]   = (unsigned long)_orig.r2;                     \
+      _argvec[2]   = (unsigned long)_orig.nraddr;                 \
+      _argvec[2+1] = (unsigned long)arg1;                         \
+      _argvec[2+2] = (unsigned long)arg2;                         \
+      _argvec[2+3] = (unsigned long)arg3;                         \
+      _argvec[2+4] = (unsigned long)arg4;                         \
+      __asm__ volatile(                                           \
+         VALGRIND_ALIGN_STACK                                     \
+         "mr 11,%1\n\t"                                           \
+         "std 2,-16(11)\n\t"  /* save tocptr */                   \
+         "ld   2,-8(11)\n\t"  /* use nraddr's tocptr */           \
+         "ld   3, 8(11)\n\t"  /* arg1->r3 */                      \
+         "ld   4, 16(11)\n\t" /* arg2->r4 */                      \
+         "ld   5, 24(11)\n\t" /* arg3->r5 */                      \
+         "ld   6, 32(11)\n\t" /* arg4->r6 */                      \
+         "ld  11, 0(11)\n\t"  /* target->r11 */                   \
+         VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11                  \
+         "mr 11,%1\n\t"                                           \
+         "mr %0,3\n\t"                                            \
+         "ld 2,-16(11)\n\t" /* restore tocptr */                  \
+         VALGRIND_RESTORE_STACK                                   \
+         : /*out*/   "=r" (_res)                                  \
+         : /*in*/    "r" (&_argvec[2])                            \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r28"   \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_5W(lval, orig, arg1,arg2,arg3,arg4,arg5)        \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[3+5];                        \
+      volatile unsigned long _res;                                \
+      /* _argvec[0] holds current r2 across the call */           \
+      _argvec[1]   = (unsigned long)_orig.r2;                     \
+      _argvec[2]   = (unsigned long)_orig.nraddr;                 \
+      _argvec[2+1] = (unsigned long)arg1;                         \
+      _argvec[2+2] = (unsigned long)arg2;                         \
+      _argvec[2+3] = (unsigned long)arg3;                         \
+      _argvec[2+4] = (unsigned long)arg4;                         \
+      _argvec[2+5] = (unsigned long)arg5;                         \
+      __asm__ volatile(                                           \
+         VALGRIND_ALIGN_STACK                                     \
+         "mr 11,%1\n\t"                                           \
+         "std 2,-16(11)\n\t"  /* save tocptr */                   \
+         "ld   2,-8(11)\n\t"  /* use nraddr's tocptr */           \
+         "ld   3, 8(11)\n\t"  /* arg1->r3 */                      \
+         "ld   4, 16(11)\n\t" /* arg2->r4 */                      \
+         "ld   5, 24(11)\n\t" /* arg3->r5 */                      \
+         "ld   6, 32(11)\n\t" /* arg4->r6 */                      \
+         "ld   7, 40(11)\n\t" /* arg5->r7 */                      \
+         "ld  11, 0(11)\n\t"  /* target->r11 */                   \
+         VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11                  \
+         "mr 11,%1\n\t"                                           \
+         "mr %0,3\n\t"                                            \
+         "ld 2,-16(11)\n\t" /* restore tocptr */                  \
+         VALGRIND_RESTORE_STACK                                   \
+         : /*out*/   "=r" (_res)                                  \
+         : /*in*/    "r" (&_argvec[2])                            \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r28"   \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_6W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6)   \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[3+6];                        \
+      volatile unsigned long _res;                                \
+      /* _argvec[0] holds current r2 across the call */           \
+      _argvec[1]   = (unsigned long)_orig.r2;                     \
+      _argvec[2]   = (unsigned long)_orig.nraddr;                 \
+      _argvec[2+1] = (unsigned long)arg1;                         \
+      _argvec[2+2] = (unsigned long)arg2;                         \
+      _argvec[2+3] = (unsigned long)arg3;                         \
+      _argvec[2+4] = (unsigned long)arg4;                         \
+      _argvec[2+5] = (unsigned long)arg5;                         \
+      _argvec[2+6] = (unsigned long)arg6;                         \
+      __asm__ volatile(                                           \
+         VALGRIND_ALIGN_STACK                                     \
+         "mr 11,%1\n\t"                                           \
+         "std 2,-16(11)\n\t"  /* save tocptr */                   \
+         "ld   2,-8(11)\n\t"  /* use nraddr's tocptr */           \
+         "ld   3, 8(11)\n\t"  /* arg1->r3 */                      \
+         "ld   4, 16(11)\n\t" /* arg2->r4 */                      \
+         "ld   5, 24(11)\n\t" /* arg3->r5 */                      \
+         "ld   6, 32(11)\n\t" /* arg4->r6 */                      \
+         "ld   7, 40(11)\n\t" /* arg5->r7 */                      \
+         "ld   8, 48(11)\n\t" /* arg6->r8 */                      \
+         "ld  11, 0(11)\n\t"  /* target->r11 */                   \
+         VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11                  \
+         "mr 11,%1\n\t"                                           \
+         "mr %0,3\n\t"                                            \
+         "ld 2,-16(11)\n\t" /* restore tocptr */                  \
+         VALGRIND_RESTORE_STACK                                   \
+         : /*out*/   "=r" (_res)                                  \
+         : /*in*/    "r" (&_argvec[2])                            \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r28"   \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_7W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6,   \
+                                 arg7)                            \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[3+7];                        \
+      volatile unsigned long _res;                                \
+      /* _argvec[0] holds current r2 across the call */           \
+      _argvec[1]   = (unsigned long)_orig.r2;                     \
+      _argvec[2]   = (unsigned long)_orig.nraddr;                 \
+      _argvec[2+1] = (unsigned long)arg1;                         \
+      _argvec[2+2] = (unsigned long)arg2;                         \
+      _argvec[2+3] = (unsigned long)arg3;                         \
+      _argvec[2+4] = (unsigned long)arg4;                         \
+      _argvec[2+5] = (unsigned long)arg5;                         \
+      _argvec[2+6] = (unsigned long)arg6;                         \
+      _argvec[2+7] = (unsigned long)arg7;                         \
+      __asm__ volatile(                                           \
+         VALGRIND_ALIGN_STACK                                     \
+         "mr 11,%1\n\t"                                           \
+         "std 2,-16(11)\n\t"  /* save tocptr */                   \
+         "ld   2,-8(11)\n\t"  /* use nraddr's tocptr */           \
+         "ld   3, 8(11)\n\t"  /* arg1->r3 */                      \
+         "ld   4, 16(11)\n\t" /* arg2->r4 */                      \
+         "ld   5, 24(11)\n\t" /* arg3->r5 */                      \
+         "ld   6, 32(11)\n\t" /* arg4->r6 */                      \
+         "ld   7, 40(11)\n\t" /* arg5->r7 */                      \
+         "ld   8, 48(11)\n\t" /* arg6->r8 */                      \
+         "ld   9, 56(11)\n\t" /* arg7->r9 */                      \
+         "ld  11, 0(11)\n\t"  /* target->r11 */                   \
+         VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11                  \
+         "mr 11,%1\n\t"                                           \
+         "mr %0,3\n\t"                                            \
+         "ld 2,-16(11)\n\t" /* restore tocptr */                  \
+         VALGRIND_RESTORE_STACK                                   \
+         : /*out*/   "=r" (_res)                                  \
+         : /*in*/    "r" (&_argvec[2])                            \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r28"   \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_8W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6,   \
+                                 arg7,arg8)                       \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[3+8];                        \
+      volatile unsigned long _res;                                \
+      /* _argvec[0] holds current r2 across the call */           \
+      _argvec[1]   = (unsigned long)_orig.r2;                     \
+      _argvec[2]   = (unsigned long)_orig.nraddr;                 \
+      _argvec[2+1] = (unsigned long)arg1;                         \
+      _argvec[2+2] = (unsigned long)arg2;                         \
+      _argvec[2+3] = (unsigned long)arg3;                         \
+      _argvec[2+4] = (unsigned long)arg4;                         \
+      _argvec[2+5] = (unsigned long)arg5;                         \
+      _argvec[2+6] = (unsigned long)arg6;                         \
+      _argvec[2+7] = (unsigned long)arg7;                         \
+      _argvec[2+8] = (unsigned long)arg8;                         \
+      __asm__ volatile(                                           \
+         VALGRIND_ALIGN_STACK                                     \
+         "mr 11,%1\n\t"                                           \
+         "std 2,-16(11)\n\t"  /* save tocptr */                   \
+         "ld   2,-8(11)\n\t"  /* use nraddr's tocptr */           \
+         "ld   3, 8(11)\n\t"  /* arg1->r3 */                      \
+         "ld   4, 16(11)\n\t" /* arg2->r4 */                      \
+         "ld   5, 24(11)\n\t" /* arg3->r5 */                      \
+         "ld   6, 32(11)\n\t" /* arg4->r6 */                      \
+         "ld   7, 40(11)\n\t" /* arg5->r7 */                      \
+         "ld   8, 48(11)\n\t" /* arg6->r8 */                      \
+         "ld   9, 56(11)\n\t" /* arg7->r9 */                      \
+         "ld  10, 64(11)\n\t" /* arg8->r10 */                     \
+         "ld  11, 0(11)\n\t"  /* target->r11 */                   \
+         VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11                  \
+         "mr 11,%1\n\t"                                           \
+         "mr %0,3\n\t"                                            \
+         "ld 2,-16(11)\n\t" /* restore tocptr */                  \
+         VALGRIND_RESTORE_STACK                                   \
+         : /*out*/   "=r" (_res)                                  \
+         : /*in*/    "r" (&_argvec[2])                            \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r28"   \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_9W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6,   \
+                                 arg7,arg8,arg9)                  \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[3+9];                        \
+      volatile unsigned long _res;                                \
+      /* _argvec[0] holds current r2 across the call */           \
+      _argvec[1]   = (unsigned long)_orig.r2;                     \
+      _argvec[2]   = (unsigned long)_orig.nraddr;                 \
+      _argvec[2+1] = (unsigned long)arg1;                         \
+      _argvec[2+2] = (unsigned long)arg2;                         \
+      _argvec[2+3] = (unsigned long)arg3;                         \
+      _argvec[2+4] = (unsigned long)arg4;                         \
+      _argvec[2+5] = (unsigned long)arg5;                         \
+      _argvec[2+6] = (unsigned long)arg6;                         \
+      _argvec[2+7] = (unsigned long)arg7;                         \
+      _argvec[2+8] = (unsigned long)arg8;                         \
+      _argvec[2+9] = (unsigned long)arg9;                         \
+      __asm__ volatile(                                           \
+         VALGRIND_ALIGN_STACK                                     \
+         "mr 11,%1\n\t"                                           \
+         "std 2,-16(11)\n\t"  /* save tocptr */                   \
+         "ld   2,-8(11)\n\t"  /* use nraddr's tocptr */           \
+         "addi 1,1,-128\n\t"  /* expand stack frame */            \
+         /* arg9 */                                               \
+         "ld  3,72(11)\n\t"                                       \
+         "std 3,112(1)\n\t"                                       \
+         /* args1-8 */                                            \
+         "ld   3, 8(11)\n\t"  /* arg1->r3 */                      \
+         "ld   4, 16(11)\n\t" /* arg2->r4 */                      \
+         "ld   5, 24(11)\n\t" /* arg3->r5 */                      \
+         "ld   6, 32(11)\n\t" /* arg4->r6 */                      \
+         "ld   7, 40(11)\n\t" /* arg5->r7 */                      \
+         "ld   8, 48(11)\n\t" /* arg6->r8 */                      \
+         "ld   9, 56(11)\n\t" /* arg7->r9 */                      \
+         "ld  10, 64(11)\n\t" /* arg8->r10 */                     \
+         "ld  11, 0(11)\n\t"  /* target->r11 */                   \
+         VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11                  \
+         "mr 11,%1\n\t"                                           \
+         "mr %0,3\n\t"                                            \
+         "ld 2,-16(11)\n\t" /* restore tocptr */                  \
+         VALGRIND_RESTORE_STACK                                   \
+         : /*out*/   "=r" (_res)                                  \
+         : /*in*/    "r" (&_argvec[2])                            \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r28"   \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_10W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6,  \
+                                  arg7,arg8,arg9,arg10)           \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[3+10];                       \
+      volatile unsigned long _res;                                \
+      /* _argvec[0] holds current r2 across the call */           \
+      _argvec[1]   = (unsigned long)_orig.r2;                     \
+      _argvec[2]   = (unsigned long)_orig.nraddr;                 \
+      _argvec[2+1] = (unsigned long)arg1;                         \
+      _argvec[2+2] = (unsigned long)arg2;                         \
+      _argvec[2+3] = (unsigned long)arg3;                         \
+      _argvec[2+4] = (unsigned long)arg4;                         \
+      _argvec[2+5] = (unsigned long)arg5;                         \
+      _argvec[2+6] = (unsigned long)arg6;                         \
+      _argvec[2+7] = (unsigned long)arg7;                         \
+      _argvec[2+8] = (unsigned long)arg8;                         \
+      _argvec[2+9] = (unsigned long)arg9;                         \
+      _argvec[2+10] = (unsigned long)arg10;                       \
+      __asm__ volatile(                                           \
+         VALGRIND_ALIGN_STACK                                     \
+         "mr 11,%1\n\t"                                           \
+         "std 2,-16(11)\n\t"  /* save tocptr */                   \
+         "ld   2,-8(11)\n\t"  /* use nraddr's tocptr */           \
+         "addi 1,1,-128\n\t"  /* expand stack frame */            \
+         /* arg10 */                                              \
+         "ld  3,80(11)\n\t"                                       \
+         "std 3,120(1)\n\t"                                       \
+         /* arg9 */                                               \
+         "ld  3,72(11)\n\t"                                       \
+         "std 3,112(1)\n\t"                                       \
+         /* args1-8 */                                            \
+         "ld   3, 8(11)\n\t"  /* arg1->r3 */                      \
+         "ld   4, 16(11)\n\t" /* arg2->r4 */                      \
+         "ld   5, 24(11)\n\t" /* arg3->r5 */                      \
+         "ld   6, 32(11)\n\t" /* arg4->r6 */                      \
+         "ld   7, 40(11)\n\t" /* arg5->r7 */                      \
+         "ld   8, 48(11)\n\t" /* arg6->r8 */                      \
+         "ld   9, 56(11)\n\t" /* arg7->r9 */                      \
+         "ld  10, 64(11)\n\t" /* arg8->r10 */                     \
+         "ld  11, 0(11)\n\t"  /* target->r11 */                   \
+         VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11                  \
+         "mr 11,%1\n\t"                                           \
+         "mr %0,3\n\t"                                            \
+         "ld 2,-16(11)\n\t" /* restore tocptr */                  \
+         VALGRIND_RESTORE_STACK                                   \
+         : /*out*/   "=r" (_res)                                  \
+         : /*in*/    "r" (&_argvec[2])                            \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r28"   \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_11W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6,  \
+                                  arg7,arg8,arg9,arg10,arg11)     \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[3+11];                       \
+      volatile unsigned long _res;                                \
+      /* _argvec[0] holds current r2 across the call */           \
+      _argvec[1]   = (unsigned long)_orig.r2;                     \
+      _argvec[2]   = (unsigned long)_orig.nraddr;                 \
+      _argvec[2+1] = (unsigned long)arg1;                         \
+      _argvec[2+2] = (unsigned long)arg2;                         \
+      _argvec[2+3] = (unsigned long)arg3;                         \
+      _argvec[2+4] = (unsigned long)arg4;                         \
+      _argvec[2+5] = (unsigned long)arg5;                         \
+      _argvec[2+6] = (unsigned long)arg6;                         \
+      _argvec[2+7] = (unsigned long)arg7;                         \
+      _argvec[2+8] = (unsigned long)arg8;                         \
+      _argvec[2+9] = (unsigned long)arg9;                         \
+      _argvec[2+10] = (unsigned long)arg10;                       \
+      _argvec[2+11] = (unsigned long)arg11;                       \
+      __asm__ volatile(                                           \
+         VALGRIND_ALIGN_STACK                                     \
+         "mr 11,%1\n\t"                                           \
+         "std 2,-16(11)\n\t"  /* save tocptr */                   \
+         "ld   2,-8(11)\n\t"  /* use nraddr's tocptr */           \
+         "addi 1,1,-144\n\t"  /* expand stack frame */            \
+         /* arg11 */                                              \
+         "ld  3,88(11)\n\t"                                       \
+         "std 3,128(1)\n\t"                                       \
+         /* arg10 */                                              \
+         "ld  3,80(11)\n\t"                                       \
+         "std 3,120(1)\n\t"                                       \
+         /* arg9 */                                               \
+         "ld  3,72(11)\n\t"                                       \
+         "std 3,112(1)\n\t"                                       \
+         /* args1-8 */                                            \
+         "ld   3, 8(11)\n\t"  /* arg1->r3 */                      \
+         "ld   4, 16(11)\n\t" /* arg2->r4 */                      \
+         "ld   5, 24(11)\n\t" /* arg3->r5 */                      \
+         "ld   6, 32(11)\n\t" /* arg4->r6 */                      \
+         "ld   7, 40(11)\n\t" /* arg5->r7 */                      \
+         "ld   8, 48(11)\n\t" /* arg6->r8 */                      \
+         "ld   9, 56(11)\n\t" /* arg7->r9 */                      \
+         "ld  10, 64(11)\n\t" /* arg8->r10 */                     \
+         "ld  11, 0(11)\n\t"  /* target->r11 */                   \
+         VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11                  \
+         "mr 11,%1\n\t"                                           \
+         "mr %0,3\n\t"                                            \
+         "ld 2,-16(11)\n\t" /* restore tocptr */                  \
+         VALGRIND_RESTORE_STACK                                   \
+         : /*out*/   "=r" (_res)                                  \
+         : /*in*/    "r" (&_argvec[2])                            \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r28"   \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_12W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6,  \
+                                arg7,arg8,arg9,arg10,arg11,arg12) \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[3+12];                       \
+      volatile unsigned long _res;                                \
+      /* _argvec[0] holds current r2 across the call */           \
+      _argvec[1]   = (unsigned long)_orig.r2;                     \
+      _argvec[2]   = (unsigned long)_orig.nraddr;                 \
+      _argvec[2+1] = (unsigned long)arg1;                         \
+      _argvec[2+2] = (unsigned long)arg2;                         \
+      _argvec[2+3] = (unsigned long)arg3;                         \
+      _argvec[2+4] = (unsigned long)arg4;                         \
+      _argvec[2+5] = (unsigned long)arg5;                         \
+      _argvec[2+6] = (unsigned long)arg6;                         \
+      _argvec[2+7] = (unsigned long)arg7;                         \
+      _argvec[2+8] = (unsigned long)arg8;                         \
+      _argvec[2+9] = (unsigned long)arg9;                         \
+      _argvec[2+10] = (unsigned long)arg10;                       \
+      _argvec[2+11] = (unsigned long)arg11;                       \
+      _argvec[2+12] = (unsigned long)arg12;                       \
+      __asm__ volatile(                                           \
+         VALGRIND_ALIGN_STACK                                     \
+         "mr 11,%1\n\t"                                           \
+         "std 2,-16(11)\n\t"  /* save tocptr */                   \
+         "ld   2,-8(11)\n\t"  /* use nraddr's tocptr */           \
+         "addi 1,1,-144\n\t"  /* expand stack frame */            \
+         /* arg12 */                                              \
+         "ld  3,96(11)\n\t"                                       \
+         "std 3,136(1)\n\t"                                       \
+         /* arg11 */                                              \
+         "ld  3,88(11)\n\t"                                       \
+         "std 3,128(1)\n\t"                                       \
+         /* arg10 */                                              \
+         "ld  3,80(11)\n\t"                                       \
+         "std 3,120(1)\n\t"                                       \
+         /* arg9 */                                               \
+         "ld  3,72(11)\n\t"                                       \
+         "std 3,112(1)\n\t"                                       \
+         /* args1-8 */                                            \
+         "ld   3, 8(11)\n\t"  /* arg1->r3 */                      \
+         "ld   4, 16(11)\n\t" /* arg2->r4 */                      \
+         "ld   5, 24(11)\n\t" /* arg3->r5 */                      \
+         "ld   6, 32(11)\n\t" /* arg4->r6 */                      \
+         "ld   7, 40(11)\n\t" /* arg5->r7 */                      \
+         "ld   8, 48(11)\n\t" /* arg6->r8 */                      \
+         "ld   9, 56(11)\n\t" /* arg7->r9 */                      \
+         "ld  10, 64(11)\n\t" /* arg8->r10 */                     \
+         "ld  11, 0(11)\n\t"  /* target->r11 */                   \
+         VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11                  \
+         "mr 11,%1\n\t"                                           \
+         "mr %0,3\n\t"                                            \
+         "ld 2,-16(11)\n\t" /* restore tocptr */                  \
+         VALGRIND_RESTORE_STACK                                   \
+         : /*out*/   "=r" (_res)                                  \
+         : /*in*/    "r" (&_argvec[2])                            \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r28"   \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#endif /* PLAT_ppc64_linux */
+
+/* ------------------------- arm-linux ------------------------- */
+
+#if defined(PLAT_arm_linux)
+
+/* These regs are trashed by the hidden call. */
+#define __CALLER_SAVED_REGS "r0", "r1", "r2", "r3","r4","r14"
+
+/* Macros to save and align the stack before making a function
+   call and restore it afterwards as gcc may not keep the stack
+   pointer aligned if it doesn't realise calls are being made
+   to other functions. */
+
+/* This is a bit tricky.  We store the original stack pointer in r10
+   as it is callee-saves.  gcc doesn't allow the use of r11 for some
+   reason.  Also, we can't directly "bic" the stack pointer in thumb
+   mode since r13 isn't an allowed register number in that context.
+   So use r4 as a temporary, since that is about to get trashed
+   anyway, just after each use of this macro.  Side effect is we need
+   to be very careful about any future changes, since
+   VALGRIND_ALIGN_STACK simply assumes r4 is usable. */
+#define VALGRIND_ALIGN_STACK               \
+      "mov r10, sp\n\t"                    \
+      "mov r4,  sp\n\t"                    \
+      "bic r4,  r4, #7\n\t"                \
+      "mov sp,  r4\n\t"
+#define VALGRIND_RESTORE_STACK             \
+      "mov sp,  r10\n\t"
+
+/* These CALL_FN_ macros assume that on arm-linux, sizeof(unsigned
+   long) == 4. */
+
+#define CALL_FN_W_v(lval, orig)                                   \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[1];                          \
+      volatile unsigned long _res;                                \
+      _argvec[0] = (unsigned long)_orig.nraddr;                   \
+      __asm__ volatile(                                           \
+         VALGRIND_ALIGN_STACK                                     \
+         "ldr r4, [%1] \n\t"  /* target->r4 */                    \
+         VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R4                   \
+         VALGRIND_RESTORE_STACK                                   \
+         "mov %0, r0\n"                                           \
+         : /*out*/   "=r" (_res)                                  \
+         : /*in*/    "0" (&_argvec[0])                            \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r10"   \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_W(lval, orig, arg1)                             \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[2];                          \
+      volatile unsigned long _res;                                \
+      _argvec[0] = (unsigned long)_orig.nraddr;                   \
+      _argvec[1] = (unsigned long)(arg1);                         \
+      __asm__ volatile(                                           \
+         VALGRIND_ALIGN_STACK                                     \
+         "ldr r0, [%1, #4] \n\t"                                  \
+         "ldr r4, [%1] \n\t"  /* target->r4 */                    \
+         VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R4                   \
+         VALGRIND_RESTORE_STACK                                   \
+         "mov %0, r0\n"                                           \
+         : /*out*/   "=r" (_res)                                  \
+         : /*in*/    "0" (&_argvec[0])                            \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r10"   \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_WW(lval, orig, arg1,arg2)                       \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[3];                          \
+      volatile unsigned long _res;                                \
+      _argvec[0] = (unsigned long)_orig.nraddr;                   \
+      _argvec[1] = (unsigned long)(arg1);                         \
+      _argvec[2] = (unsigned long)(arg2);                         \
+      __asm__ volatile(                                           \
+         VALGRIND_ALIGN_STACK                                     \
+         "ldr r0, [%1, #4] \n\t"                                  \
+         "ldr r1, [%1, #8] \n\t"                                  \
+         "ldr r4, [%1] \n\t"  /* target->r4 */                    \
+         VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R4                   \
+         VALGRIND_RESTORE_STACK                                   \
+         "mov %0, r0\n"                                           \
+         : /*out*/   "=r" (_res)                                  \
+         : /*in*/    "0" (&_argvec[0])                            \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r10"   \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_WWW(lval, orig, arg1,arg2,arg3)                 \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[4];                          \
+      volatile unsigned long _res;                                \
+      _argvec[0] = (unsigned long)_orig.nraddr;                   \
+      _argvec[1] = (unsigned long)(arg1);                         \
+      _argvec[2] = (unsigned long)(arg2);                         \
+      _argvec[3] = (unsigned long)(arg3);                         \
+      __asm__ volatile(                                           \
+         VALGRIND_ALIGN_STACK                                     \
+         "ldr r0, [%1, #4] \n\t"                                  \
+         "ldr r1, [%1, #8] \n\t"                                  \
+         "ldr r2, [%1, #12] \n\t"                                 \
+         "ldr r4, [%1] \n\t"  /* target->r4 */                    \
+         VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R4                   \
+         VALGRIND_RESTORE_STACK                                   \
+         "mov %0, r0\n"                                           \
+         : /*out*/   "=r" (_res)                                  \
+         : /*in*/    "0" (&_argvec[0])                            \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r10"   \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_WWWW(lval, orig, arg1,arg2,arg3,arg4)           \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[5];                          \
+      volatile unsigned long _res;                                \
+      _argvec[0] = (unsigned long)_orig.nraddr;                   \
+      _argvec[1] = (unsigned long)(arg1);                         \
+      _argvec[2] = (unsigned long)(arg2);                         \
+      _argvec[3] = (unsigned long)(arg3);                         \
+      _argvec[4] = (unsigned long)(arg4);                         \
+      __asm__ volatile(                                           \
+         VALGRIND_ALIGN_STACK                                     \
+         "ldr r0, [%1, #4] \n\t"                                  \
+         "ldr r1, [%1, #8] \n\t"                                  \
+         "ldr r2, [%1, #12] \n\t"                                 \
+         "ldr r3, [%1, #16] \n\t"                                 \
+         "ldr r4, [%1] \n\t"  /* target->r4 */                    \
+         VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R4                   \
+         VALGRIND_RESTORE_STACK                                   \
+         "mov %0, r0"                                             \
+         : /*out*/   "=r" (_res)                                  \
+         : /*in*/    "0" (&_argvec[0])                            \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r10"   \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_5W(lval, orig, arg1,arg2,arg3,arg4,arg5)        \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[6];                          \
+      volatile unsigned long _res;                                \
+      _argvec[0] = (unsigned long)_orig.nraddr;                   \
+      _argvec[1] = (unsigned long)(arg1);                         \
+      _argvec[2] = (unsigned long)(arg2);                         \
+      _argvec[3] = (unsigned long)(arg3);                         \
+      _argvec[4] = (unsigned long)(arg4);                         \
+      _argvec[5] = (unsigned long)(arg5);                         \
+      __asm__ volatile(                                           \
+         VALGRIND_ALIGN_STACK                                     \
+         "sub sp, sp, #4 \n\t"                                    \
+         "ldr r0, [%1, #20] \n\t"                                 \
+         "push {r0} \n\t"                                         \
+         "ldr r0, [%1, #4] \n\t"                                  \
+         "ldr r1, [%1, #8] \n\t"                                  \
+         "ldr r2, [%1, #12] \n\t"                                 \
+         "ldr r3, [%1, #16] \n\t"                                 \
+         "ldr r4, [%1] \n\t"  /* target->r4 */                    \
+         VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R4                   \
+         VALGRIND_RESTORE_STACK                                   \
+         "mov %0, r0"                                             \
+         : /*out*/   "=r" (_res)                                  \
+         : /*in*/    "0" (&_argvec[0])                            \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r10"   \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_6W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6)   \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[7];                          \
+      volatile unsigned long _res;                                \
+      _argvec[0] = (unsigned long)_orig.nraddr;                   \
+      _argvec[1] = (unsigned long)(arg1);                         \
+      _argvec[2] = (unsigned long)(arg2);                         \
+      _argvec[3] = (unsigned long)(arg3);                         \
+      _argvec[4] = (unsigned long)(arg4);                         \
+      _argvec[5] = (unsigned long)(arg5);                         \
+      _argvec[6] = (unsigned long)(arg6);                         \
+      __asm__ volatile(                                           \
+         VALGRIND_ALIGN_STACK                                     \
+         "ldr r0, [%1, #20] \n\t"                                 \
+         "ldr r1, [%1, #24] \n\t"                                 \
+         "push {r0, r1} \n\t"                                     \
+         "ldr r0, [%1, #4] \n\t"                                  \
+         "ldr r1, [%1, #8] \n\t"                                  \
+         "ldr r2, [%1, #12] \n\t"                                 \
+         "ldr r3, [%1, #16] \n\t"                                 \
+         "ldr r4, [%1] \n\t"  /* target->r4 */                    \
+         VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R4                   \
+         VALGRIND_RESTORE_STACK                                   \
+         "mov %0, r0"                                             \
+         : /*out*/   "=r" (_res)                                  \
+         : /*in*/    "0" (&_argvec[0])                            \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r10"   \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_7W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6,   \
+                                 arg7)                            \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[8];                          \
+      volatile unsigned long _res;                                \
+      _argvec[0] = (unsigned long)_orig.nraddr;                   \
+      _argvec[1] = (unsigned long)(arg1);                         \
+      _argvec[2] = (unsigned long)(arg2);                         \
+      _argvec[3] = (unsigned long)(arg3);                         \
+      _argvec[4] = (unsigned long)(arg4);                         \
+      _argvec[5] = (unsigned long)(arg5);                         \
+      _argvec[6] = (unsigned long)(arg6);                         \
+      _argvec[7] = (unsigned long)(arg7);                         \
+      __asm__ volatile(                                           \
+         VALGRIND_ALIGN_STACK                                     \
+         "sub sp, sp, #4 \n\t"                                    \
+         "ldr r0, [%1, #20] \n\t"                                 \
+         "ldr r1, [%1, #24] \n\t"                                 \
+         "ldr r2, [%1, #28] \n\t"                                 \
+         "push {r0, r1, r2} \n\t"                                 \
+         "ldr r0, [%1, #4] \n\t"                                  \
+         "ldr r1, [%1, #8] \n\t"                                  \
+         "ldr r2, [%1, #12] \n\t"                                 \
+         "ldr r3, [%1, #16] \n\t"                                 \
+         "ldr r4, [%1] \n\t"  /* target->r4 */                    \
+         VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R4                   \
+         VALGRIND_RESTORE_STACK                                   \
+         "mov %0, r0"                                             \
+         : /*out*/   "=r" (_res)                                  \
+         : /*in*/    "0" (&_argvec[0])                            \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r10"   \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_8W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6,   \
+                                 arg7,arg8)                       \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[9];                          \
+      volatile unsigned long _res;                                \
+      _argvec[0] = (unsigned long)_orig.nraddr;                   \
+      _argvec[1] = (unsigned long)(arg1);                         \
+      _argvec[2] = (unsigned long)(arg2);                         \
+      _argvec[3] = (unsigned long)(arg3);                         \
+      _argvec[4] = (unsigned long)(arg4);                         \
+      _argvec[5] = (unsigned long)(arg5);                         \
+      _argvec[6] = (unsigned long)(arg6);                         \
+      _argvec[7] = (unsigned long)(arg7);                         \
+      _argvec[8] = (unsigned long)(arg8);                         \
+      __asm__ volatile(                                           \
+         VALGRIND_ALIGN_STACK                                     \
+         "ldr r0, [%1, #20] \n\t"                                 \
+         "ldr r1, [%1, #24] \n\t"                                 \
+         "ldr r2, [%1, #28] \n\t"                                 \
+         "ldr r3, [%1, #32] \n\t"                                 \
+         "push {r0, r1, r2, r3} \n\t"                             \
+         "ldr r0, [%1, #4] \n\t"                                  \
+         "ldr r1, [%1, #8] \n\t"                                  \
+         "ldr r2, [%1, #12] \n\t"                                 \
+         "ldr r3, [%1, #16] \n\t"                                 \
+         "ldr r4, [%1] \n\t"  /* target->r4 */                    \
+         VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R4                   \
+         VALGRIND_RESTORE_STACK                                   \
+         "mov %0, r0"                                             \
+         : /*out*/   "=r" (_res)                                  \
+         : /*in*/    "0" (&_argvec[0])                            \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r10"   \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_9W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6,   \
+                                 arg7,arg8,arg9)                  \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[10];                         \
+      volatile unsigned long _res;                                \
+      _argvec[0] = (unsigned long)_orig.nraddr;                   \
+      _argvec[1] = (unsigned long)(arg1);                         \
+      _argvec[2] = (unsigned long)(arg2);                         \
+      _argvec[3] = (unsigned long)(arg3);                         \
+      _argvec[4] = (unsigned long)(arg4);                         \
+      _argvec[5] = (unsigned long)(arg5);                         \
+      _argvec[6] = (unsigned long)(arg6);                         \
+      _argvec[7] = (unsigned long)(arg7);                         \
+      _argvec[8] = (unsigned long)(arg8);                         \
+      _argvec[9] = (unsigned long)(arg9);                         \
+      __asm__ volatile(                                           \
+         VALGRIND_ALIGN_STACK                                     \
+         "sub sp, sp, #4 \n\t"                                    \
+         "ldr r0, [%1, #20] \n\t"                                 \
+         "ldr r1, [%1, #24] \n\t"                                 \
+         "ldr r2, [%1, #28] \n\t"                                 \
+         "ldr r3, [%1, #32] \n\t"                                 \
+         "ldr r4, [%1, #36] \n\t"                                 \
+         "push {r0, r1, r2, r3, r4} \n\t"                         \
+         "ldr r0, [%1, #4] \n\t"                                  \
+         "ldr r1, [%1, #8] \n\t"                                  \
+         "ldr r2, [%1, #12] \n\t"                                 \
+         "ldr r3, [%1, #16] \n\t"                                 \
+         "ldr r4, [%1] \n\t"  /* target->r4 */                    \
+         VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R4                   \
+         VALGRIND_RESTORE_STACK                                   \
+         "mov %0, r0"                                             \
+         : /*out*/   "=r" (_res)                                  \
+         : /*in*/    "0" (&_argvec[0])                            \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r10"   \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_10W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6,  \
+                                  arg7,arg8,arg9,arg10)           \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[11];                         \
+      volatile unsigned long _res;                                \
+      _argvec[0] = (unsigned long)_orig.nraddr;                   \
+      _argvec[1] = (unsigned long)(arg1);                         \
+      _argvec[2] = (unsigned long)(arg2);                         \
+      _argvec[3] = (unsigned long)(arg3);                         \
+      _argvec[4] = (unsigned long)(arg4);                         \
+      _argvec[5] = (unsigned long)(arg5);                         \
+      _argvec[6] = (unsigned long)(arg6);                         \
+      _argvec[7] = (unsigned long)(arg7);                         \
+      _argvec[8] = (unsigned long)(arg8);                         \
+      _argvec[9] = (unsigned long)(arg9);                         \
+      _argvec[10] = (unsigned long)(arg10);                       \
+      __asm__ volatile(                                           \
+         VALGRIND_ALIGN_STACK                                     \
+         "ldr r0, [%1, #40] \n\t"                                 \
+         "push {r0} \n\t"                                         \
+         "ldr r0, [%1, #20] \n\t"                                 \
+         "ldr r1, [%1, #24] \n\t"                                 \
+         "ldr r2, [%1, #28] \n\t"                                 \
+         "ldr r3, [%1, #32] \n\t"                                 \
+         "ldr r4, [%1, #36] \n\t"                                 \
+         "push {r0, r1, r2, r3, r4} \n\t"                         \
+         "ldr r0, [%1, #4] \n\t"                                  \
+         "ldr r1, [%1, #8] \n\t"                                  \
+         "ldr r2, [%1, #12] \n\t"                                 \
+         "ldr r3, [%1, #16] \n\t"                                 \
+         "ldr r4, [%1] \n\t"  /* target->r4 */                    \
+         VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R4                   \
+         VALGRIND_RESTORE_STACK                                   \
+         "mov %0, r0"                                             \
+         : /*out*/   "=r" (_res)                                  \
+         : /*in*/    "0" (&_argvec[0])                            \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r10"   \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_11W(lval, orig, arg1,arg2,arg3,arg4,arg5,       \
+                                  arg6,arg7,arg8,arg9,arg10,      \
+                                  arg11)                          \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[12];                         \
+      volatile unsigned long _res;                                \
+      _argvec[0] = (unsigned long)_orig.nraddr;                   \
+      _argvec[1] = (unsigned long)(arg1);                         \
+      _argvec[2] = (unsigned long)(arg2);                         \
+      _argvec[3] = (unsigned long)(arg3);                         \
+      _argvec[4] = (unsigned long)(arg4);                         \
+      _argvec[5] = (unsigned long)(arg5);                         \
+      _argvec[6] = (unsigned long)(arg6);                         \
+      _argvec[7] = (unsigned long)(arg7);                         \
+      _argvec[8] = (unsigned long)(arg8);                         \
+      _argvec[9] = (unsigned long)(arg9);                         \
+      _argvec[10] = (unsigned long)(arg10);                       \
+      _argvec[11] = (unsigned long)(arg11);                       \
+      __asm__ volatile(                                           \
+         VALGRIND_ALIGN_STACK                                     \
+         "sub sp, sp, #4 \n\t"                                    \
+         "ldr r0, [%1, #40] \n\t"                                 \
+         "ldr r1, [%1, #44] \n\t"                                 \
+         "push {r0, r1} \n\t"                                     \
+         "ldr r0, [%1, #20] \n\t"                                 \
+         "ldr r1, [%1, #24] \n\t"                                 \
+         "ldr r2, [%1, #28] \n\t"                                 \
+         "ldr r3, [%1, #32] \n\t"                                 \
+         "ldr r4, [%1, #36] \n\t"                                 \
+         "push {r0, r1, r2, r3, r4} \n\t"                         \
+         "ldr r0, [%1, #4] \n\t"                                  \
+         "ldr r1, [%1, #8] \n\t"                                  \
+         "ldr r2, [%1, #12] \n\t"                                 \
+         "ldr r3, [%1, #16] \n\t"                                 \
+         "ldr r4, [%1] \n\t"  /* target->r4 */                    \
+         VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R4                   \
+         VALGRIND_RESTORE_STACK                                   \
+         "mov %0, r0"                                             \
+         : /*out*/   "=r" (_res)                                  \
+         : /*in*/    "0" (&_argvec[0])                            \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r10"   \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_12W(lval, orig, arg1,arg2,arg3,arg4,arg5,       \
+                                  arg6,arg7,arg8,arg9,arg10,      \
+                                  arg11,arg12)                    \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[13];                         \
+      volatile unsigned long _res;                                \
+      _argvec[0] = (unsigned long)_orig.nraddr;                   \
+      _argvec[1] = (unsigned long)(arg1);                         \
+      _argvec[2] = (unsigned long)(arg2);                         \
+      _argvec[3] = (unsigned long)(arg3);                         \
+      _argvec[4] = (unsigned long)(arg4);                         \
+      _argvec[5] = (unsigned long)(arg5);                         \
+      _argvec[6] = (unsigned long)(arg6);                         \
+      _argvec[7] = (unsigned long)(arg7);                         \
+      _argvec[8] = (unsigned long)(arg8);                         \
+      _argvec[9] = (unsigned long)(arg9);                         \
+      _argvec[10] = (unsigned long)(arg10);                       \
+      _argvec[11] = (unsigned long)(arg11);                       \
+      _argvec[12] = (unsigned long)(arg12);                       \
+      __asm__ volatile(                                           \
+         VALGRIND_ALIGN_STACK                                     \
+         "ldr r0, [%1, #40] \n\t"                                 \
+         "ldr r1, [%1, #44] \n\t"                                 \
+         "ldr r2, [%1, #48] \n\t"                                 \
+         "push {r0, r1, r2} \n\t"                                 \
+         "ldr r0, [%1, #20] \n\t"                                 \
+         "ldr r1, [%1, #24] \n\t"                                 \
+         "ldr r2, [%1, #28] \n\t"                                 \
+         "ldr r3, [%1, #32] \n\t"                                 \
+         "ldr r4, [%1, #36] \n\t"                                 \
+         "push {r0, r1, r2, r3, r4} \n\t"                         \
+         "ldr r0, [%1, #4] \n\t"                                  \
+         "ldr r1, [%1, #8] \n\t"                                  \
+         "ldr r2, [%1, #12] \n\t"                                 \
+         "ldr r3, [%1, #16] \n\t"                                 \
+         "ldr r4, [%1] \n\t"  /* target->r4 */                    \
+         VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R4                   \
+         VALGRIND_RESTORE_STACK                                   \
+         "mov %0, r0"                                             \
+         : /*out*/   "=r" (_res)                                  \
+         : /*in*/    "0" (&_argvec[0])                            \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r10"   \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#endif /* PLAT_arm_linux */
+
+/* ------------------------ arm64-linux ------------------------ */
+
+#if defined(PLAT_arm64_linux)
+
+/* These regs are trashed by the hidden call. */
+#define __CALLER_SAVED_REGS \
+     "x0", "x1", "x2", "x3","x4", "x5", "x6", "x7", "x8", "x9",   \
+     "x10", "x11", "x12", "x13", "x14", "x15", "x16", "x17",      \
+     "x18", "x19", "x20", "x30",                                  \
+     "v0", "v1", "v2", "v3", "v4", "v5", "v6", "v7", "v8", "v9",  \
+     "v10", "v11", "v12", "v13", "v14", "v15", "v16", "v17",      \
+     "v18", "v19", "v20", "v21", "v22", "v23", "v24", "v25",      \
+     "v26", "v27", "v28", "v29", "v30", "v31"
+
+/* x21 is callee-saved, so we can use it to save and restore SP around
+   the hidden call. */
+#define VALGRIND_ALIGN_STACK               \
+      "mov x21, sp\n\t"                    \
+      "bic sp, x21, #15\n\t"
+#define VALGRIND_RESTORE_STACK             \
+      "mov sp,  x21\n\t"
+
+/* These CALL_FN_ macros assume that on arm64-linux,
+   sizeof(unsigned long) == 8. */
+
+#define CALL_FN_W_v(lval, orig)                                   \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[1];                          \
+      volatile unsigned long _res;                                \
+      _argvec[0] = (unsigned long)_orig.nraddr;                   \
+      __asm__ volatile(                                           \
+         VALGRIND_ALIGN_STACK                                     \
+         "ldr x8, [%1] \n\t"  /* target->x8 */                    \
+         VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_X8                   \
+         VALGRIND_RESTORE_STACK                                   \
+         "mov %0, x0\n"                                           \
+         : /*out*/   "=r" (_res)                                  \
+         : /*in*/    "0" (&_argvec[0])                            \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "x21"   \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_W(lval, orig, arg1)                             \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[2];                          \
+      volatile unsigned long _res;                                \
+      _argvec[0] = (unsigned long)_orig.nraddr;                   \
+      _argvec[1] = (unsigned long)(arg1);                         \
+      __asm__ volatile(                                           \
+         VALGRIND_ALIGN_STACK                                     \
+         "ldr x0, [%1, #8] \n\t"                                  \
+         "ldr x8, [%1] \n\t"  /* target->x8 */                    \
+         VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_X8                   \
+         VALGRIND_RESTORE_STACK                                   \
+         "mov %0, x0\n"                                           \
+         : /*out*/   "=r" (_res)                                  \
+         : /*in*/    "0" (&_argvec[0])                            \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "x21"   \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_WW(lval, orig, arg1,arg2)                       \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[3];                          \
+      volatile unsigned long _res;                                \
+      _argvec[0] = (unsigned long)_orig.nraddr;                   \
+      _argvec[1] = (unsigned long)(arg1);                         \
+      _argvec[2] = (unsigned long)(arg2);                         \
+      __asm__ volatile(                                           \
+         VALGRIND_ALIGN_STACK                                     \
+         "ldr x0, [%1, #8] \n\t"                                  \
+         "ldr x1, [%1, #16] \n\t"                                 \
+         "ldr x8, [%1] \n\t"  /* target->x8 */                    \
+         VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_X8                   \
+         VALGRIND_RESTORE_STACK                                   \
+         "mov %0, x0\n"                                           \
+         : /*out*/   "=r" (_res)                                  \
+         : /*in*/    "0" (&_argvec[0])                            \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS/*, "r10"*/     \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_WWW(lval, orig, arg1,arg2,arg3)                 \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[4];                          \
+      volatile unsigned long _res;                                \
+      _argvec[0] = (unsigned long)_orig.nraddr;                   \
+      _argvec[1] = (unsigned long)(arg1);                         \
+      _argvec[2] = (unsigned long)(arg2);                         \
+      _argvec[3] = (unsigned long)(arg3);                         \
+      __asm__ volatile(                                           \
+         VALGRIND_ALIGN_STACK                                     \
+         "ldr x0, [%1, #8] \n\t"                                  \
+         "ldr x1, [%1, #16] \n\t"                                 \
+         "ldr x2, [%1, #24] \n\t"                                 \
+         "ldr x8, [%1] \n\t"  /* target->x8 */                    \
+         VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_X8                   \
+         VALGRIND_RESTORE_STACK                                   \
+         "mov %0, x0\n"                                           \
+         : /*out*/   "=r" (_res)                                  \
+         : /*in*/    "0" (&_argvec[0])                            \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS/*, "r10"*/     \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_WWWW(lval, orig, arg1,arg2,arg3,arg4)           \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[5];                          \
+      volatile unsigned long _res;                                \
+      _argvec[0] = (unsigned long)_orig.nraddr;                   \
+      _argvec[1] = (unsigned long)(arg1);                         \
+      _argvec[2] = (unsigned long)(arg2);                         \
+      _argvec[3] = (unsigned long)(arg3);                         \
+      _argvec[4] = (unsigned long)(arg4);                         \
+      __asm__ volatile(                                           \
+         VALGRIND_ALIGN_STACK                                     \
+         "ldr x0, [%1, #8] \n\t"                                  \
+         "ldr x1, [%1, #16] \n\t"                                 \
+         "ldr x2, [%1, #24] \n\t"                                 \
+         "ldr x3, [%1, #32] \n\t"                                 \
+         "ldr x8, [%1] \n\t"  /* target->x8 */                    \
+         VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_X8                   \
+         VALGRIND_RESTORE_STACK                                   \
+         "mov %0, x0"                                             \
+         : /*out*/   "=r" (_res)                                  \
+         : /*in*/    "0" (&_argvec[0])                            \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS/*, "r10"*/     \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#endif /* PLAT_arm64_linux */
+
+/* ------------------------- s390x-linux ------------------------- */
+
+#if defined(PLAT_s390x_linux)
+
+/* Similar workaround as amd64 (see above), but we use r11 as frame
+   pointer and save the old r11 in r7. r11 might be used for
+   argvec, therefore we copy argvec in r1 since r1 is clobbered
+   after the call anyway.  */
+#if defined(__GNUC__) && defined(__GCC_HAVE_DWARF2_CFI_ASM)
+#  define __FRAME_POINTER                                         \
+      ,"d"(__builtin_dwarf_cfa())
+#  define VALGRIND_CFI_PROLOGUE                                   \
+      ".cfi_remember_state\n\t"                                   \
+      "lgr 1,%1\n\t" /* copy the argvec pointer in r1 */          \
+      "lgr 7,11\n\t"                                              \
+      "lgr 11,%2\n\t"                                             \
+      ".cfi_def_cfa r11, 0\n\t"
+#  define VALGRIND_CFI_EPILOGUE                                   \
+      "lgr 11, 7\n\t"                                             \
+      ".cfi_restore_state\n\t"
+#else
+#  define __FRAME_POINTER
+#  define VALGRIND_CFI_PROLOGUE                                   \
+      "lgr 1,%1\n\t"
+#  define VALGRIND_CFI_EPILOGUE
+#endif
+
+/* Nb: On s390 the stack pointer is properly aligned *at all times*
+   according to the s390 GCC maintainer. (The ABI specification is not
+   precise in this regard.) Therefore, VALGRIND_ALIGN_STACK and
+   VALGRIND_RESTORE_STACK are not defined here. */
+
+/* These regs are trashed by the hidden call. Note that we overwrite
+   r14 in s390_irgen_noredir (VEX/priv/guest_s390_irgen.c) to give the
+   function a proper return address. All others are ABI defined call
+   clobbers. */
+#define __CALLER_SAVED_REGS "0","1","2","3","4","5","14", \
+                           "f0","f1","f2","f3","f4","f5","f6","f7"
+
+/* Nb: Although r11 is modified in the asm snippets below (inside 
+   VALGRIND_CFI_PROLOGUE) it is not listed in the clobber section, for
+   two reasons:
+   (1) r11 is restored in VALGRIND_CFI_EPILOGUE, so effectively it is not
+       modified
+   (2) GCC will complain that r11 cannot appear inside a clobber section,
+       when compiled with -O -fno-omit-frame-pointer
+ */
+
+#define CALL_FN_W_v(lval, orig)                                  \
+   do {                                                          \
+      volatile OrigFn        _orig = (orig);                     \
+      volatile unsigned long  _argvec[1];                        \
+      volatile unsigned long _res;                               \
+      _argvec[0] = (unsigned long)_orig.nraddr;                  \
+      __asm__ volatile(                                          \
+         VALGRIND_CFI_PROLOGUE                                   \
+         "aghi 15,-160\n\t"                                      \
+         "lg 1, 0(1)\n\t"  /* target->r1 */                      \
+         VALGRIND_CALL_NOREDIR_R1                                \
+         "lgr %0, 2\n\t"                                         \
+         "aghi 15,160\n\t"                                       \
+         VALGRIND_CFI_EPILOGUE                                   \
+         : /*out*/   "=d" (_res)                                 \
+         : /*in*/    "d" (&_argvec[0]) __FRAME_POINTER           \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS,"7"     \
+      );                                                         \
+      lval = (__typeof__(lval)) _res;                            \
+   } while (0)
+
+/* The call abi has the arguments in r2-r6 and stack */
+#define CALL_FN_W_W(lval, orig, arg1)                            \
+   do {                                                          \
+      volatile OrigFn        _orig = (orig);                     \
+      volatile unsigned long _argvec[2];                         \
+      volatile unsigned long _res;                               \
+      _argvec[0] = (unsigned long)_orig.nraddr;                  \
+      _argvec[1] = (unsigned long)arg1;                          \
+      __asm__ volatile(                                          \
+         VALGRIND_CFI_PROLOGUE                                   \
+         "aghi 15,-160\n\t"                                      \
+         "lg 2, 8(1)\n\t"                                        \
+         "lg 1, 0(1)\n\t"                                        \
+         VALGRIND_CALL_NOREDIR_R1                                \
+         "lgr %0, 2\n\t"                                         \
+         "aghi 15,160\n\t"                                       \
+         VALGRIND_CFI_EPILOGUE                                   \
+         : /*out*/   "=d" (_res)                                 \
+         : /*in*/    "a" (&_argvec[0]) __FRAME_POINTER           \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS,"7"     \
+      );                                                         \
+      lval = (__typeof__(lval)) _res;                            \
+   } while (0)
+
+#define CALL_FN_W_WW(lval, orig, arg1, arg2)                     \
+   do {                                                          \
+      volatile OrigFn        _orig = (orig);                     \
+      volatile unsigned long _argvec[3];                         \
+      volatile unsigned long _res;                               \
+      _argvec[0] = (unsigned long)_orig.nraddr;                  \
+      _argvec[1] = (unsigned long)arg1;                          \
+      _argvec[2] = (unsigned long)arg2;                          \
+      __asm__ volatile(                                          \
+         VALGRIND_CFI_PROLOGUE                                   \
+         "aghi 15,-160\n\t"                                      \
+         "lg 2, 8(1)\n\t"                                        \
+         "lg 3,16(1)\n\t"                                        \
+         "lg 1, 0(1)\n\t"                                        \
+         VALGRIND_CALL_NOREDIR_R1                                \
+         "lgr %0, 2\n\t"                                         \
+         "aghi 15,160\n\t"                                       \
+         VALGRIND_CFI_EPILOGUE                                   \
+         : /*out*/   "=d" (_res)                                 \
+         : /*in*/    "a" (&_argvec[0]) __FRAME_POINTER           \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS,"7"     \
+      );                                                         \
+      lval = (__typeof__(lval)) _res;                            \
+   } while (0)
+
+#define CALL_FN_W_WWW(lval, orig, arg1, arg2, arg3)              \
+   do {                                                          \
+      volatile OrigFn        _orig = (orig);                     \
+      volatile unsigned long _argvec[4];                         \
+      volatile unsigned long _res;                               \
+      _argvec[0] = (unsigned long)_orig.nraddr;                  \
+      _argvec[1] = (unsigned long)arg1;                          \
+      _argvec[2] = (unsigned long)arg2;                          \
+      _argvec[3] = (unsigned long)arg3;                          \
+      __asm__ volatile(                                          \
+         VALGRIND_CFI_PROLOGUE                                   \
+         "aghi 15,-160\n\t"                                      \
+         "lg 2, 8(1)\n\t"                                        \
+         "lg 3,16(1)\n\t"                                        \
+         "lg 4,24(1)\n\t"                                        \
+         "lg 1, 0(1)\n\t"                                        \
+         VALGRIND_CALL_NOREDIR_R1                                \
+         "lgr %0, 2\n\t"                                         \
+         "aghi 15,160\n\t"                                       \
+         VALGRIND_CFI_EPILOGUE                                   \
+         : /*out*/   "=d" (_res)                                 \
+         : /*in*/    "a" (&_argvec[0]) __FRAME_POINTER           \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS,"7"     \
+      );                                                         \
+      lval = (__typeof__(lval)) _res;                            \
+   } while (0)
+
+#define CALL_FN_W_WWWW(lval, orig, arg1, arg2, arg3, arg4)       \
+   do {                                                          \
+      volatile OrigFn        _orig = (orig);                     \
+      volatile unsigned long _argvec[5];                         \
+      volatile unsigned long _res;                               \
+      _argvec[0] = (unsigned long)_orig.nraddr;                  \
+      _argvec[1] = (unsigned long)arg1;                          \
+      _argvec[2] = (unsigned long)arg2;                          \
+      _argvec[3] = (unsigned long)arg3;                          \
+      _argvec[4] = (unsigned long)arg4;                          \
+      __asm__ volatile(                                          \
+         VALGRIND_CFI_PROLOGUE                                   \
+         "aghi 15,-160\n\t"                                      \
+         "lg 2, 8(1)\n\t"                                        \
+         "lg 3,16(1)\n\t"                                        \
+         "lg 4,24(1)\n\t"                                        \
+         "lg 5,32(1)\n\t"                                        \
+         "lg 1, 0(1)\n\t"                                        \
+         VALGRIND_CALL_NOREDIR_R1                                \
+         "lgr %0, 2\n\t"                                         \
+         "aghi 15,160\n\t"                                       \
+         VALGRIND_CFI_EPILOGUE                                   \
+         : /*out*/   "=d" (_res)                                 \
+         : /*in*/    "a" (&_argvec[0]) __FRAME_POINTER           \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS,"7"     \
+      );                                                         \
+      lval = (__typeof__(lval)) _res;                            \
+   } while (0)
+
+#define CALL_FN_W_5W(lval, orig, arg1, arg2, arg3, arg4, arg5)   \
+   do {                                                          \
+      volatile OrigFn        _orig = (orig);                     \
+      volatile unsigned long _argvec[6];                         \
+      volatile unsigned long _res;                               \
+      _argvec[0] = (unsigned long)_orig.nraddr;                  \
+      _argvec[1] = (unsigned long)arg1;                          \
+      _argvec[2] = (unsigned long)arg2;                          \
+      _argvec[3] = (unsigned long)arg3;                          \
+      _argvec[4] = (unsigned long)arg4;                          \
+      _argvec[5] = (unsigned long)arg5;                          \
+      __asm__ volatile(                                          \
+         VALGRIND_CFI_PROLOGUE                                   \
+         "aghi 15,-160\n\t"                                      \
+         "lg 2, 8(1)\n\t"                                        \
+         "lg 3,16(1)\n\t"                                        \
+         "lg 4,24(1)\n\t"                                        \
+         "lg 5,32(1)\n\t"                                        \
+         "lg 6,40(1)\n\t"                                        \
+         "lg 1, 0(1)\n\t"                                        \
+         VALGRIND_CALL_NOREDIR_R1                                \
+         "lgr %0, 2\n\t"                                         \
+         "aghi 15,160\n\t"                                       \
+         VALGRIND_CFI_EPILOGUE                                   \
+         : /*out*/   "=d" (_res)                                 \
+         : /*in*/    "a" (&_argvec[0]) __FRAME_POINTER           \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS,"6","7" \
+      );                                                         \
+      lval = (__typeof__(lval)) _res;                            \
+   } while (0)
+
+#define CALL_FN_W_6W(lval, orig, arg1, arg2, arg3, arg4, arg5,   \
+                     arg6)                                       \
+   do {                                                          \
+      volatile OrigFn        _orig = (orig);                     \
+      volatile unsigned long _argvec[7];                         \
+      volatile unsigned long _res;                               \
+      _argvec[0] = (unsigned long)_orig.nraddr;                  \
+      _argvec[1] = (unsigned long)arg1;                          \
+      _argvec[2] = (unsigned long)arg2;                          \
+      _argvec[3] = (unsigned long)arg3;                          \
+      _argvec[4] = (unsigned long)arg4;                          \
+      _argvec[5] = (unsigned long)arg5;                          \
+      _argvec[6] = (unsigned long)arg6;                          \
+      __asm__ volatile(                                          \
+         VALGRIND_CFI_PROLOGUE                                   \
+         "aghi 15,-168\n\t"                                      \
+         "lg 2, 8(1)\n\t"                                        \
+         "lg 3,16(1)\n\t"                                        \
+         "lg 4,24(1)\n\t"                                        \
+         "lg 5,32(1)\n\t"                                        \
+         "lg 6,40(1)\n\t"                                        \
+         "mvc 160(8,15), 48(1)\n\t"                              \
+         "lg 1, 0(1)\n\t"                                        \
+         VALGRIND_CALL_NOREDIR_R1                                \
+         "lgr %0, 2\n\t"                                         \
+         "aghi 15,168\n\t"                                       \
+         VALGRIND_CFI_EPILOGUE                                   \
+         : /*out*/   "=d" (_res)                                 \
+         : /*in*/    "a" (&_argvec[0]) __FRAME_POINTER           \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS,"6","7" \
+      );                                                         \
+      lval = (__typeof__(lval)) _res;                            \
+   } while (0)
+
+#define CALL_FN_W_7W(lval, orig, arg1, arg2, arg3, arg4, arg5,   \
+                     arg6, arg7)                                 \
+   do {                                                          \
+      volatile OrigFn        _orig = (orig);                     \
+      volatile unsigned long _argvec[8];                         \
+      volatile unsigned long _res;                               \
+      _argvec[0] = (unsigned long)_orig.nraddr;                  \
+      _argvec[1] = (unsigned long)arg1;                          \
+      _argvec[2] = (unsigned long)arg2;                          \
+      _argvec[3] = (unsigned long)arg3;                          \
+      _argvec[4] = (unsigned long)arg4;                          \
+      _argvec[5] = (unsigned long)arg5;                          \
+      _argvec[6] = (unsigned long)arg6;                          \
+      _argvec[7] = (unsigned long)arg7;                          \
+      __asm__ volatile(                                          \
+         VALGRIND_CFI_PROLOGUE                                   \
+         "aghi 15,-176\n\t"                                      \
+         "lg 2, 8(1)\n\t"                                        \
+         "lg 3,16(1)\n\t"                                        \
+         "lg 4,24(1)\n\t"                                        \
+         "lg 5,32(1)\n\t"                                        \
+         "lg 6,40(1)\n\t"                                        \
+         "mvc 160(8,15), 48(1)\n\t"                              \
+         "mvc 168(8,15), 56(1)\n\t"                              \
+         "lg 1, 0(1)\n\t"                                        \
+         VALGRIND_CALL_NOREDIR_R1                                \
+         "lgr %0, 2\n\t"                                         \
+         "aghi 15,176\n\t"                                       \
+         VALGRIND_CFI_EPILOGUE                                   \
+         : /*out*/   "=d" (_res)                                 \
+         : /*in*/    "a" (&_argvec[0]) __FRAME_POINTER           \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS,"6","7" \
+      );                                                         \
+      lval = (__typeof__(lval)) _res;                            \
+   } while (0)
+
+#define CALL_FN_W_8W(lval, orig, arg1, arg2, arg3, arg4, arg5,   \
+                     arg6, arg7 ,arg8)                           \
+   do {                                                          \
+      volatile OrigFn        _orig = (orig);                     \
+      volatile unsigned long _argvec[9];                         \
+      volatile unsigned long _res;                               \
+      _argvec[0] = (unsigned long)_orig.nraddr;                  \
+      _argvec[1] = (unsigned long)arg1;                          \
+      _argvec[2] = (unsigned long)arg2;                          \
+      _argvec[3] = (unsigned long)arg3;                          \
+      _argvec[4] = (unsigned long)arg4;                          \
+      _argvec[5] = (unsigned long)arg5;                          \
+      _argvec[6] = (unsigned long)arg6;                          \
+      _argvec[7] = (unsigned long)arg7;                          \
+      _argvec[8] = (unsigned long)arg8;                          \
+      __asm__ volatile(                                          \
+         VALGRIND_CFI_PROLOGUE                                   \
+         "aghi 15,-184\n\t"                                      \
+         "lg 2, 8(1)\n\t"                                        \
+         "lg 3,16(1)\n\t"                                        \
+         "lg 4,24(1)\n\t"                                        \
+         "lg 5,32(1)\n\t"                                        \
+         "lg 6,40(1)\n\t"                                        \
+         "mvc 160(8,15), 48(1)\n\t"                              \
+         "mvc 168(8,15), 56(1)\n\t"                              \
+         "mvc 176(8,15), 64(1)\n\t"                              \
+         "lg 1, 0(1)\n\t"                                        \
+         VALGRIND_CALL_NOREDIR_R1                                \
+         "lgr %0, 2\n\t"                                         \
+         "aghi 15,184\n\t"                                       \
+         VALGRIND_CFI_EPILOGUE                                   \
+         : /*out*/   "=d" (_res)                                 \
+         : /*in*/    "a" (&_argvec[0]) __FRAME_POINTER           \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS,"6","7" \
+      );                                                         \
+      lval = (__typeof__(lval)) _res;                            \
+   } while (0)
+
+#define CALL_FN_W_9W(lval, orig, arg1, arg2, arg3, arg4, arg5,   \
+                     arg6, arg7 ,arg8, arg9)                     \
+   do {                                                          \
+      volatile OrigFn        _orig = (orig);                     \
+      volatile unsigned long _argvec[10];                        \
+      volatile unsigned long _res;                               \
+      _argvec[0] = (unsigned long)_orig.nraddr;                  \
+      _argvec[1] = (unsigned long)arg1;                          \
+      _argvec[2] = (unsigned long)arg2;                          \
+      _argvec[3] = (unsigned long)arg3;                          \
+      _argvec[4] = (unsigned long)arg4;                          \
+      _argvec[5] = (unsigned long)arg5;                          \
+      _argvec[6] = (unsigned long)arg6;                          \
+      _argvec[7] = (unsigned long)arg7;                          \
+      _argvec[8] = (unsigned long)arg8;                          \
+      _argvec[9] = (unsigned long)arg9;                          \
+      __asm__ volatile(                                          \
+         VALGRIND_CFI_PROLOGUE                                   \
+         "aghi 15,-192\n\t"                                      \
+         "lg 2, 8(1)\n\t"                                        \
+         "lg 3,16(1)\n\t"                                        \
+         "lg 4,24(1)\n\t"                                        \
+         "lg 5,32(1)\n\t"                                        \
+         "lg 6,40(1)\n\t"                                        \
+         "mvc 160(8,15), 48(1)\n\t"                              \
+         "mvc 168(8,15), 56(1)\n\t"                              \
+         "mvc 176(8,15), 64(1)\n\t"                              \
+         "mvc 184(8,15), 72(1)\n\t"                              \
+         "lg 1, 0(1)\n\t"                                        \
+         VALGRIND_CALL_NOREDIR_R1                                \
+         "lgr %0, 2\n\t"                                         \
+         "aghi 15,192\n\t"                                       \
+         VALGRIND_CFI_EPILOGUE                                   \
+         : /*out*/   "=d" (_res)                                 \
+         : /*in*/    "a" (&_argvec[0]) __FRAME_POINTER           \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS,"6","7" \
+      );                                                         \
+      lval = (__typeof__(lval)) _res;                            \
+   } while (0)
+
+#define CALL_FN_W_10W(lval, orig, arg1, arg2, arg3, arg4, arg5,  \
+                     arg6, arg7 ,arg8, arg9, arg10)              \
+   do {                                                          \
+      volatile OrigFn        _orig = (orig);                     \
+      volatile unsigned long _argvec[11];                        \
+      volatile unsigned long _res;                               \
+      _argvec[0] = (unsigned long)_orig.nraddr;                  \
+      _argvec[1] = (unsigned long)arg1;                          \
+      _argvec[2] = (unsigned long)arg2;                          \
+      _argvec[3] = (unsigned long)arg3;                          \
+      _argvec[4] = (unsigned long)arg4;                          \
+      _argvec[5] = (unsigned long)arg5;                          \
+      _argvec[6] = (unsigned long)arg6;                          \
+      _argvec[7] = (unsigned long)arg7;                          \
+      _argvec[8] = (unsigned long)arg8;                          \
+      _argvec[9] = (unsigned long)arg9;                          \
+      _argvec[10] = (unsigned long)arg10;                        \
+      __asm__ volatile(                                          \
+         VALGRIND_CFI_PROLOGUE                                   \
+         "aghi 15,-200\n\t"                                      \
+         "lg 2, 8(1)\n\t"                                        \
+         "lg 3,16(1)\n\t"                                        \
+         "lg 4,24(1)\n\t"                                        \
+         "lg 5,32(1)\n\t"                                        \
+         "lg 6,40(1)\n\t"                                        \
+         "mvc 160(8,15), 48(1)\n\t"                              \
+         "mvc 168(8,15), 56(1)\n\t"                              \
+         "mvc 176(8,15), 64(1)\n\t"                              \
+         "mvc 184(8,15), 72(1)\n\t"                              \
+         "mvc 192(8,15), 80(1)\n\t"                              \
+         "lg 1, 0(1)\n\t"                                        \
+         VALGRIND_CALL_NOREDIR_R1                                \
+         "lgr %0, 2\n\t"                                         \
+         "aghi 15,200\n\t"                                       \
+         VALGRIND_CFI_EPILOGUE                                   \
+         : /*out*/   "=d" (_res)                                 \
+         : /*in*/    "a" (&_argvec[0]) __FRAME_POINTER           \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS,"6","7" \
+      );                                                         \
+      lval = (__typeof__(lval)) _res;                            \
+   } while (0)
+
+#define CALL_FN_W_11W(lval, orig, arg1, arg2, arg3, arg4, arg5,  \
+                     arg6, arg7 ,arg8, arg9, arg10, arg11)       \
+   do {                                                          \
+      volatile OrigFn        _orig = (orig);                     \
+      volatile unsigned long _argvec[12];                        \
+      volatile unsigned long _res;                               \
+      _argvec[0] = (unsigned long)_orig.nraddr;                  \
+      _argvec[1] = (unsigned long)arg1;                          \
+      _argvec[2] = (unsigned long)arg2;                          \
+      _argvec[3] = (unsigned long)arg3;                          \
+      _argvec[4] = (unsigned long)arg4;                          \
+      _argvec[5] = (unsigned long)arg5;                          \
+      _argvec[6] = (unsigned long)arg6;                          \
+      _argvec[7] = (unsigned long)arg7;                          \
+      _argvec[8] = (unsigned long)arg8;                          \
+      _argvec[9] = (unsigned long)arg9;                          \
+      _argvec[10] = (unsigned long)arg10;                        \
+      _argvec[11] = (unsigned long)arg11;                        \
+      __asm__ volatile(                                          \
+         VALGRIND_CFI_PROLOGUE                                   \
+         "aghi 15,-208\n\t"                                      \
+         "lg 2, 8(1)\n\t"                                        \
+         "lg 3,16(1)\n\t"                                        \
+         "lg 4,24(1)\n\t"                                        \
+         "lg 5,32(1)\n\t"                                        \
+         "lg 6,40(1)\n\t"                                        \
+         "mvc 160(8,15), 48(1)\n\t"                              \
+         "mvc 168(8,15), 56(1)\n\t"                              \
+         "mvc 176(8,15), 64(1)\n\t"                              \
+         "mvc 184(8,15), 72(1)\n\t"                              \
+         "mvc 192(8,15), 80(1)\n\t"                              \
+         "mvc 200(8,15), 88(1)\n\t"                              \
+         "lg 1, 0(1)\n\t"                                        \
+         VALGRIND_CALL_NOREDIR_R1                                \
+         "lgr %0, 2\n\t"                                         \
+         "aghi 15,208\n\t"                                       \
+         VALGRIND_CFI_EPILOGUE                                   \
+         : /*out*/   "=d" (_res)                                 \
+         : /*in*/    "a" (&_argvec[0]) __FRAME_POINTER           \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS,"6","7" \
+      );                                                         \
+      lval = (__typeof__(lval)) _res;                            \
+   } while (0)
+
+#define CALL_FN_W_12W(lval, orig, arg1, arg2, arg3, arg4, arg5,  \
+                     arg6, arg7 ,arg8, arg9, arg10, arg11, arg12)\
+   do {                                                          \
+      volatile OrigFn        _orig = (orig);                     \
+      volatile unsigned long _argvec[13];                        \
+      volatile unsigned long _res;                               \
+      _argvec[0] = (unsigned long)_orig.nraddr;                  \
+      _argvec[1] = (unsigned long)arg1;                          \
+      _argvec[2] = (unsigned long)arg2;                          \
+      _argvec[3] = (unsigned long)arg3;                          \
+      _argvec[4] = (unsigned long)arg4;                          \
+      _argvec[5] = (unsigned long)arg5;                          \
+      _argvec[6] = (unsigned long)arg6;                          \
+      _argvec[7] = (unsigned long)arg7;                          \
+      _argvec[8] = (unsigned long)arg8;                          \
+      _argvec[9] = (unsigned long)arg9;                          \
+      _argvec[10] = (unsigned long)arg10;                        \
+      _argvec[11] = (unsigned long)arg11;                        \
+      _argvec[12] = (unsigned long)arg12;                        \
+      __asm__ volatile(                                          \
+         VALGRIND_CFI_PROLOGUE                                   \
+         "aghi 15,-216\n\t"                                      \
+         "lg 2, 8(1)\n\t"                                        \
+         "lg 3,16(1)\n\t"                                        \
+         "lg 4,24(1)\n\t"                                        \
+         "lg 5,32(1)\n\t"                                        \
+         "lg 6,40(1)\n\t"                                        \
+         "mvc 160(8,15), 48(1)\n\t"                              \
+         "mvc 168(8,15), 56(1)\n\t"                              \
+         "mvc 176(8,15), 64(1)\n\t"                              \
+         "mvc 184(8,15), 72(1)\n\t"                              \
+         "mvc 192(8,15), 80(1)\n\t"                              \
+         "mvc 200(8,15), 88(1)\n\t"                              \
+         "mvc 208(8,15), 96(1)\n\t"                              \
+         "lg 1, 0(1)\n\t"                                        \
+         VALGRIND_CALL_NOREDIR_R1                                \
+         "lgr %0, 2\n\t"                                         \
+         "aghi 15,216\n\t"                                       \
+         VALGRIND_CFI_EPILOGUE                                   \
+         : /*out*/   "=d" (_res)                                 \
+         : /*in*/    "a" (&_argvec[0]) __FRAME_POINTER           \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS,"6","7" \
+      );                                                         \
+      lval = (__typeof__(lval)) _res;                            \
+   } while (0)
+
+
+#endif /* PLAT_s390x_linux */
+
+/* ------------------------- mips32-linux ----------------------- */
+ 
+#if defined(PLAT_mips32_linux)
+
+/* These regs are trashed by the hidden call. */
+#define __CALLER_SAVED_REGS "$2", "$3", "$4", "$5", "$6",       \
+"$7", "$8", "$9", "$10", "$11", "$12", "$13", "$14", "$15", "$24", \
+"$25", "$31"
+
+/* These CALL_FN_ macros assume that on mips-linux, sizeof(unsigned
+   long) == 4. */
+
+#define CALL_FN_W_v(lval, orig)                                   \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[1];                          \
+      volatile unsigned long _res;                                \
+      _argvec[0] = (unsigned long)_orig.nraddr;                   \
+      __asm__ volatile(                                           \
+         "subu $29, $29, 8 \n\t"                                  \
+         "sw $28, 0($29) \n\t"                                    \
+         "sw $31, 4($29) \n\t"                                    \
+         "subu $29, $29, 16 \n\t"                                 \
+         "lw $25, 0(%1) \n\t"  /* target->t9 */                   \
+         VALGRIND_CALL_NOREDIR_T9                                 \
+         "addu $29, $29, 16\n\t"                                  \
+         "lw $28, 0($29) \n\t"                                    \
+         "lw $31, 4($29) \n\t"                                    \
+         "addu $29, $29, 8 \n\t"                                  \
+         "move %0, $2\n"                                          \
+         : /*out*/   "=r" (_res)                                  \
+         : /*in*/    "0" (&_argvec[0])                            \
+         : /*trash*/ "memory", __CALLER_SAVED_REGS                \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_W(lval, orig, arg1)                             \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+     volatile unsigned long _argvec[2];                           \
+      volatile unsigned long _res;                                \
+      _argvec[0] = (unsigned long)_orig.nraddr;                   \
+      _argvec[1] = (unsigned long)(arg1);                         \
+      __asm__ volatile(                                           \
+         "subu $29, $29, 8 \n\t"                                  \
+         "sw $28, 0($29) \n\t"                                    \
+         "sw $31, 4($29) \n\t"                                    \
+         "subu $29, $29, 16 \n\t"                                 \
+         "lw $4, 4(%1) \n\t"   /* arg1*/                          \
+         "lw $25, 0(%1) \n\t"  /* target->t9 */                   \
+         VALGRIND_CALL_NOREDIR_T9                                 \
+         "addu $29, $29, 16 \n\t"                                 \
+         "lw $28, 0($29) \n\t"                                    \
+         "lw $31, 4($29) \n\t"                                    \
+         "addu $29, $29, 8 \n\t"                                  \
+         "move %0, $2\n"                                          \
+         : /*out*/   "=r" (_res)                                  \
+         : /*in*/    "0" (&_argvec[0])                            \
+         : /*trash*/ "memory",  __CALLER_SAVED_REGS               \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_WW(lval, orig, arg1,arg2)                       \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[3];                          \
+      volatile unsigned long _res;                                \
+      _argvec[0] = (unsigned long)_orig.nraddr;                   \
+      _argvec[1] = (unsigned long)(arg1);                         \
+      _argvec[2] = (unsigned long)(arg2);                         \
+      __asm__ volatile(                                           \
+         "subu $29, $29, 8 \n\t"                                  \
+         "sw $28, 0($29) \n\t"                                    \
+         "sw $31, 4($29) \n\t"                                    \
+         "subu $29, $29, 16 \n\t"                                 \
+         "lw $4, 4(%1) \n\t"                                      \
+         "lw $5, 8(%1) \n\t"                                      \
+         "lw $25, 0(%1) \n\t"  /* target->t9 */                   \
+         VALGRIND_CALL_NOREDIR_T9                                 \
+         "addu $29, $29, 16 \n\t"                                 \
+         "lw $28, 0($29) \n\t"                                    \
+         "lw $31, 4($29) \n\t"                                    \
+         "addu $29, $29, 8 \n\t"                                  \
+         "move %0, $2\n"                                          \
+         : /*out*/   "=r" (_res)                                  \
+         : /*in*/    "0" (&_argvec[0])                            \
+         : /*trash*/ "memory", __CALLER_SAVED_REGS                \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_WWW(lval, orig, arg1,arg2,arg3)                 \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[4];                          \
+      volatile unsigned long _res;                                \
+      _argvec[0] = (unsigned long)_orig.nraddr;                   \
+      _argvec[1] = (unsigned long)(arg1);                         \
+      _argvec[2] = (unsigned long)(arg2);                         \
+      _argvec[3] = (unsigned long)(arg3);                         \
+      __asm__ volatile(                                           \
+         "subu $29, $29, 8 \n\t"                                  \
+         "sw $28, 0($29) \n\t"                                    \
+         "sw $31, 4($29) \n\t"                                    \
+         "subu $29, $29, 16 \n\t"                                 \
+         "lw $4, 4(%1) \n\t"                                      \
+         "lw $5, 8(%1) \n\t"                                      \
+         "lw $6, 12(%1) \n\t"                                     \
+         "lw $25, 0(%1) \n\t"  /* target->t9 */                   \
+         VALGRIND_CALL_NOREDIR_T9                                 \
+         "addu $29, $29, 16 \n\t"                                 \
+         "lw $28, 0($29) \n\t"                                    \
+         "lw $31, 4($29) \n\t"                                    \
+         "addu $29, $29, 8 \n\t"                                  \
+         "move %0, $2\n"                                          \
+         : /*out*/   "=r" (_res)                                  \
+         : /*in*/    "0" (&_argvec[0])                            \
+         : /*trash*/ "memory", __CALLER_SAVED_REGS                \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_WWWW(lval, orig, arg1,arg2,arg3,arg4)           \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[5];                          \
+      volatile unsigned long _res;                                \
+      _argvec[0] = (unsigned long)_orig.nraddr;                   \
+      _argvec[1] = (unsigned long)(arg1);                         \
+      _argvec[2] = (unsigned long)(arg2);                         \
+      _argvec[3] = (unsigned long)(arg3);                         \
+      _argvec[4] = (unsigned long)(arg4);                         \
+      __asm__ volatile(                                           \
+         "subu $29, $29, 8 \n\t"                                  \
+         "sw $28, 0($29) \n\t"                                    \
+         "sw $31, 4($29) \n\t"                                    \
+         "subu $29, $29, 16 \n\t"                                 \
+         "lw $4, 4(%1) \n\t"                                      \
+         "lw $5, 8(%1) \n\t"                                      \
+         "lw $6, 12(%1) \n\t"                                     \
+         "lw $7, 16(%1) \n\t"                                     \
+         "lw $25, 0(%1) \n\t"  /* target->t9 */                   \
+         VALGRIND_CALL_NOREDIR_T9                                 \
+         "addu $29, $29, 16 \n\t"                                 \
+         "lw $28, 0($29) \n\t"                                    \
+         "lw $31, 4($29) \n\t"                                    \
+         "addu $29, $29, 8 \n\t"                                  \
+         "move %0, $2\n"                                          \
+         : /*out*/   "=r" (_res)                                  \
+         : /*in*/    "0" (&_argvec[0])                            \
+         : /*trash*/ "memory", __CALLER_SAVED_REGS                \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_5W(lval, orig, arg1,arg2,arg3,arg4,arg5)        \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[6];                          \
+      volatile unsigned long _res;                                \
+      _argvec[0] = (unsigned long)_orig.nraddr;                   \
+      _argvec[1] = (unsigned long)(arg1);                         \
+      _argvec[2] = (unsigned long)(arg2);                         \
+      _argvec[3] = (unsigned long)(arg3);                         \
+      _argvec[4] = (unsigned long)(arg4);                         \
+      _argvec[5] = (unsigned long)(arg5);                         \
+      __asm__ volatile(                                           \
+         "subu $29, $29, 8 \n\t"                                  \
+         "sw $28, 0($29) \n\t"                                    \
+         "sw $31, 4($29) \n\t"                                    \
+         "lw $4, 20(%1) \n\t"                                     \
+         "subu $29, $29, 24\n\t"                                  \
+         "sw $4, 16($29) \n\t"                                    \
+         "lw $4, 4(%1) \n\t"                                      \
+         "lw $5, 8(%1) \n\t"                                      \
+         "lw $6, 12(%1) \n\t"                                     \
+         "lw $7, 16(%1) \n\t"                                     \
+         "lw $25, 0(%1) \n\t"  /* target->t9 */                   \
+         VALGRIND_CALL_NOREDIR_T9                                 \
+         "addu $29, $29, 24 \n\t"                                 \
+         "lw $28, 0($29) \n\t"                                    \
+         "lw $31, 4($29) \n\t"                                    \
+         "addu $29, $29, 8 \n\t"                                  \
+         "move %0, $2\n"                                          \
+         : /*out*/   "=r" (_res)                                  \
+         : /*in*/    "0" (&_argvec[0])                            \
+         : /*trash*/ "memory", __CALLER_SAVED_REGS                \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+#define CALL_FN_W_6W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6)   \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[7];                          \
+      volatile unsigned long _res;                                \
+      _argvec[0] = (unsigned long)_orig.nraddr;                   \
+      _argvec[1] = (unsigned long)(arg1);                         \
+      _argvec[2] = (unsigned long)(arg2);                         \
+      _argvec[3] = (unsigned long)(arg3);                         \
+      _argvec[4] = (unsigned long)(arg4);                         \
+      _argvec[5] = (unsigned long)(arg5);                         \
+      _argvec[6] = (unsigned long)(arg6);                         \
+      __asm__ volatile(                                           \
+         "subu $29, $29, 8 \n\t"                                  \
+         "sw $28, 0($29) \n\t"                                    \
+         "sw $31, 4($29) \n\t"                                    \
+         "lw $4, 20(%1) \n\t"                                     \
+         "subu $29, $29, 32\n\t"                                  \
+         "sw $4, 16($29) \n\t"                                    \
+         "lw $4, 24(%1) \n\t"                                     \
+         "nop\n\t"                                                \
+         "sw $4, 20($29) \n\t"                                    \
+         "lw $4, 4(%1) \n\t"                                      \
+         "lw $5, 8(%1) \n\t"                                      \
+         "lw $6, 12(%1) \n\t"                                     \
+         "lw $7, 16(%1) \n\t"                                     \
+         "lw $25, 0(%1) \n\t"  /* target->t9 */                   \
+         VALGRIND_CALL_NOREDIR_T9                                 \
+         "addu $29, $29, 32 \n\t"                                 \
+         "lw $28, 0($29) \n\t"                                    \
+         "lw $31, 4($29) \n\t"                                    \
+         "addu $29, $29, 8 \n\t"                                  \
+         "move %0, $2\n"                                          \
+         : /*out*/   "=r" (_res)                                  \
+         : /*in*/    "0" (&_argvec[0])                            \
+         : /*trash*/ "memory", __CALLER_SAVED_REGS                \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_7W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6,   \
+                                 arg7)                            \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[8];                          \
+      volatile unsigned long _res;                                \
+      _argvec[0] = (unsigned long)_orig.nraddr;                   \
+      _argvec[1] = (unsigned long)(arg1);                         \
+      _argvec[2] = (unsigned long)(arg2);                         \
+      _argvec[3] = (unsigned long)(arg3);                         \
+      _argvec[4] = (unsigned long)(arg4);                         \
+      _argvec[5] = (unsigned long)(arg5);                         \
+      _argvec[6] = (unsigned long)(arg6);                         \
+      _argvec[7] = (unsigned long)(arg7);                         \
+      __asm__ volatile(                                           \
+         "subu $29, $29, 8 \n\t"                                  \
+         "sw $28, 0($29) \n\t"                                    \
+         "sw $31, 4($29) \n\t"                                    \
+         "lw $4, 20(%1) \n\t"                                     \
+         "subu $29, $29, 32\n\t"                                  \
+         "sw $4, 16($29) \n\t"                                    \
+         "lw $4, 24(%1) \n\t"                                     \
+         "sw $4, 20($29) \n\t"                                    \
+         "lw $4, 28(%1) \n\t"                                     \
+         "sw $4, 24($29) \n\t"                                    \
+         "lw $4, 4(%1) \n\t"                                      \
+         "lw $5, 8(%1) \n\t"                                      \
+         "lw $6, 12(%1) \n\t"                                     \
+         "lw $7, 16(%1) \n\t"                                     \
+         "lw $25, 0(%1) \n\t"  /* target->t9 */                   \
+         VALGRIND_CALL_NOREDIR_T9                                 \
+         "addu $29, $29, 32 \n\t"                                 \
+         "lw $28, 0($29) \n\t"                                    \
+         "lw $31, 4($29) \n\t"                                    \
+         "addu $29, $29, 8 \n\t"                                  \
+         "move %0, $2\n"                                          \
+         : /*out*/   "=r" (_res)                                  \
+         : /*in*/    "0" (&_argvec[0])                            \
+         : /*trash*/ "memory", __CALLER_SAVED_REGS                \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_8W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6,   \
+                                 arg7,arg8)                       \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[9];                          \
+      volatile unsigned long _res;                                \
+      _argvec[0] = (unsigned long)_orig.nraddr;                   \
+      _argvec[1] = (unsigned long)(arg1);                         \
+      _argvec[2] = (unsigned long)(arg2);                         \
+      _argvec[3] = (unsigned long)(arg3);                         \
+      _argvec[4] = (unsigned long)(arg4);                         \
+      _argvec[5] = (unsigned long)(arg5);                         \
+      _argvec[6] = (unsigned long)(arg6);                         \
+      _argvec[7] = (unsigned long)(arg7);                         \
+      _argvec[8] = (unsigned long)(arg8);                         \
+      __asm__ volatile(                                           \
+         "subu $29, $29, 8 \n\t"                                  \
+         "sw $28, 0($29) \n\t"                                    \
+         "sw $31, 4($29) \n\t"                                    \
+         "lw $4, 20(%1) \n\t"                                     \
+         "subu $29, $29, 40\n\t"                                  \
+         "sw $4, 16($29) \n\t"                                    \
+         "lw $4, 24(%1) \n\t"                                     \
+         "sw $4, 20($29) \n\t"                                    \
+         "lw $4, 28(%1) \n\t"                                     \
+         "sw $4, 24($29) \n\t"                                    \
+         "lw $4, 32(%1) \n\t"                                     \
+         "sw $4, 28($29) \n\t"                                    \
+         "lw $4, 4(%1) \n\t"                                      \
+         "lw $5, 8(%1) \n\t"                                      \
+         "lw $6, 12(%1) \n\t"                                     \
+         "lw $7, 16(%1) \n\t"                                     \
+         "lw $25, 0(%1) \n\t"  /* target->t9 */                   \
+         VALGRIND_CALL_NOREDIR_T9                                 \
+         "addu $29, $29, 40 \n\t"                                 \
+         "lw $28, 0($29) \n\t"                                    \
+         "lw $31, 4($29) \n\t"                                    \
+         "addu $29, $29, 8 \n\t"                                  \
+         "move %0, $2\n"                                          \
+         : /*out*/   "=r" (_res)                                  \
+         : /*in*/    "0" (&_argvec[0])                            \
+         : /*trash*/ "memory", __CALLER_SAVED_REGS                \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_9W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6,   \
+                                 arg7,arg8,arg9)                  \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[10];                         \
+      volatile unsigned long _res;                                \
+      _argvec[0] = (unsigned long)_orig.nraddr;                   \
+      _argvec[1] = (unsigned long)(arg1);                         \
+      _argvec[2] = (unsigned long)(arg2);                         \
+      _argvec[3] = (unsigned long)(arg3);                         \
+      _argvec[4] = (unsigned long)(arg4);                         \
+      _argvec[5] = (unsigned long)(arg5);                         \
+      _argvec[6] = (unsigned long)(arg6);                         \
+      _argvec[7] = (unsigned long)(arg7);                         \
+      _argvec[8] = (unsigned long)(arg8);                         \
+      _argvec[9] = (unsigned long)(arg9);                         \
+      __asm__ volatile(                                           \
+         "subu $29, $29, 8 \n\t"                                  \
+         "sw $28, 0($29) \n\t"                                    \
+         "sw $31, 4($29) \n\t"                                    \
+         "lw $4, 20(%1) \n\t"                                     \
+         "subu $29, $29, 40\n\t"                                  \
+         "sw $4, 16($29) \n\t"                                    \
+         "lw $4, 24(%1) \n\t"                                     \
+         "sw $4, 20($29) \n\t"                                    \
+         "lw $4, 28(%1) \n\t"                                     \
+         "sw $4, 24($29) \n\t"                                    \
+         "lw $4, 32(%1) \n\t"                                     \
+         "sw $4, 28($29) \n\t"                                    \
+         "lw $4, 36(%1) \n\t"                                     \
+         "sw $4, 32($29) \n\t"                                    \
+         "lw $4, 4(%1) \n\t"                                      \
+         "lw $5, 8(%1) \n\t"                                      \
+         "lw $6, 12(%1) \n\t"                                     \
+         "lw $7, 16(%1) \n\t"                                     \
+         "lw $25, 0(%1) \n\t"  /* target->t9 */                   \
+         VALGRIND_CALL_NOREDIR_T9                                 \
+         "addu $29, $29, 40 \n\t"                                 \
+         "lw $28, 0($29) \n\t"                                    \
+         "lw $31, 4($29) \n\t"                                    \
+         "addu $29, $29, 8 \n\t"                                  \
+         "move %0, $2\n"                                          \
+         : /*out*/   "=r" (_res)                                  \
+         : /*in*/    "0" (&_argvec[0])                            \
+         : /*trash*/ "memory", __CALLER_SAVED_REGS                \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_10W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6,  \
+                                  arg7,arg8,arg9,arg10)           \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[11];                         \
+      volatile unsigned long _res;                                \
+      _argvec[0] = (unsigned long)_orig.nraddr;                   \
+      _argvec[1] = (unsigned long)(arg1);                         \
+      _argvec[2] = (unsigned long)(arg2);                         \
+      _argvec[3] = (unsigned long)(arg3);                         \
+      _argvec[4] = (unsigned long)(arg4);                         \
+      _argvec[5] = (unsigned long)(arg5);                         \
+      _argvec[6] = (unsigned long)(arg6);                         \
+      _argvec[7] = (unsigned long)(arg7);                         \
+      _argvec[8] = (unsigned long)(arg8);                         \
+      _argvec[9] = (unsigned long)(arg9);                         \
+      _argvec[10] = (unsigned long)(arg10);                       \
+      __asm__ volatile(                                           \
+         "subu $29, $29, 8 \n\t"                                  \
+         "sw $28, 0($29) \n\t"                                    \
+         "sw $31, 4($29) \n\t"                                    \
+         "lw $4, 20(%1) \n\t"                                     \
+         "subu $29, $29, 48\n\t"                                  \
+         "sw $4, 16($29) \n\t"                                    \
+         "lw $4, 24(%1) \n\t"                                     \
+         "sw $4, 20($29) \n\t"                                    \
+         "lw $4, 28(%1) \n\t"                                     \
+         "sw $4, 24($29) \n\t"                                    \
+         "lw $4, 32(%1) \n\t"                                     \
+         "sw $4, 28($29) \n\t"                                    \
+         "lw $4, 36(%1) \n\t"                                     \
+         "sw $4, 32($29) \n\t"                                    \
+         "lw $4, 40(%1) \n\t"                                     \
+         "sw $4, 36($29) \n\t"                                    \
+         "lw $4, 4(%1) \n\t"                                      \
+         "lw $5, 8(%1) \n\t"                                      \
+         "lw $6, 12(%1) \n\t"                                     \
+         "lw $7, 16(%1) \n\t"                                     \
+         "lw $25, 0(%1) \n\t"  /* target->t9 */                   \
+         VALGRIND_CALL_NOREDIR_T9                                 \
+         "addu $29, $29, 48 \n\t"                                 \
+         "lw $28, 0($29) \n\t"                                    \
+         "lw $31, 4($29) \n\t"                                    \
+         "addu $29, $29, 8 \n\t"                                  \
+         "move %0, $2\n"                                          \
+         : /*out*/   "=r" (_res)                                  \
+         : /*in*/    "0" (&_argvec[0])                            \
+         : /*trash*/ "memory", __CALLER_SAVED_REGS                \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_11W(lval, orig, arg1,arg2,arg3,arg4,arg5,       \
+                                  arg6,arg7,arg8,arg9,arg10,      \
+                                  arg11)                          \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[12];                         \
+      volatile unsigned long _res;                                \
+      _argvec[0] = (unsigned long)_orig.nraddr;                   \
+      _argvec[1] = (unsigned long)(arg1);                         \
+      _argvec[2] = (unsigned long)(arg2);                         \
+      _argvec[3] = (unsigned long)(arg3);                         \
+      _argvec[4] = (unsigned long)(arg4);                         \
+      _argvec[5] = (unsigned long)(arg5);                         \
+      _argvec[6] = (unsigned long)(arg6);                         \
+      _argvec[7] = (unsigned long)(arg7);                         \
+      _argvec[8] = (unsigned long)(arg8);                         \
+      _argvec[9] = (unsigned long)(arg9);                         \
+      _argvec[10] = (unsigned long)(arg10);                       \
+      _argvec[11] = (unsigned long)(arg11);                       \
+      __asm__ volatile(                                           \
+         "subu $29, $29, 8 \n\t"                                  \
+         "sw $28, 0($29) \n\t"                                    \
+         "sw $31, 4($29) \n\t"                                    \
+         "lw $4, 20(%1) \n\t"                                     \
+         "subu $29, $29, 48\n\t"                                  \
+         "sw $4, 16($29) \n\t"                                    \
+         "lw $4, 24(%1) \n\t"                                     \
+         "sw $4, 20($29) \n\t"                                    \
+         "lw $4, 28(%1) \n\t"                                     \
+         "sw $4, 24($29) \n\t"                                    \
+         "lw $4, 32(%1) \n\t"                                     \
+         "sw $4, 28($29) \n\t"                                    \
+         "lw $4, 36(%1) \n\t"                                     \
+         "sw $4, 32($29) \n\t"                                    \
+         "lw $4, 40(%1) \n\t"                                     \
+         "sw $4, 36($29) \n\t"                                    \
+         "lw $4, 44(%1) \n\t"                                     \
+         "sw $4, 40($29) \n\t"                                    \
+         "lw $4, 4(%1) \n\t"                                      \
+         "lw $5, 8(%1) \n\t"                                      \
+         "lw $6, 12(%1) \n\t"                                     \
+         "lw $7, 16(%1) \n\t"                                     \
+         "lw $25, 0(%1) \n\t"  /* target->t9 */                   \
+         VALGRIND_CALL_NOREDIR_T9                                 \
+         "addu $29, $29, 48 \n\t"                                 \
+         "lw $28, 0($29) \n\t"                                    \
+         "lw $31, 4($29) \n\t"                                    \
+         "addu $29, $29, 8 \n\t"                                  \
+         "move %0, $2\n"                                          \
+         : /*out*/   "=r" (_res)                                  \
+         : /*in*/    "0" (&_argvec[0])                            \
+         : /*trash*/ "memory", __CALLER_SAVED_REGS                \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_12W(lval, orig, arg1,arg2,arg3,arg4,arg5,       \
+                                  arg6,arg7,arg8,arg9,arg10,      \
+                                  arg11,arg12)                    \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[13];                         \
+      volatile unsigned long _res;                                \
+      _argvec[0] = (unsigned long)_orig.nraddr;                   \
+      _argvec[1] = (unsigned long)(arg1);                         \
+      _argvec[2] = (unsigned long)(arg2);                         \
+      _argvec[3] = (unsigned long)(arg3);                         \
+      _argvec[4] = (unsigned long)(arg4);                         \
+      _argvec[5] = (unsigned long)(arg5);                         \
+      _argvec[6] = (unsigned long)(arg6);                         \
+      _argvec[7] = (unsigned long)(arg7);                         \
+      _argvec[8] = (unsigned long)(arg8);                         \
+      _argvec[9] = (unsigned long)(arg9);                         \
+      _argvec[10] = (unsigned long)(arg10);                       \
+      _argvec[11] = (unsigned long)(arg11);                       \
+      _argvec[12] = (unsigned long)(arg12);                       \
+      __asm__ volatile(                                           \
+         "subu $29, $29, 8 \n\t"                                  \
+         "sw $28, 0($29) \n\t"                                    \
+         "sw $31, 4($29) \n\t"                                    \
+         "lw $4, 20(%1) \n\t"                                     \
+         "subu $29, $29, 56\n\t"                                  \
+         "sw $4, 16($29) \n\t"                                    \
+         "lw $4, 24(%1) \n\t"                                     \
+         "sw $4, 20($29) \n\t"                                    \
+         "lw $4, 28(%1) \n\t"                                     \
+         "sw $4, 24($29) \n\t"                                    \
+         "lw $4, 32(%1) \n\t"                                     \
+         "sw $4, 28($29) \n\t"                                    \
+         "lw $4, 36(%1) \n\t"                                     \
+         "sw $4, 32($29) \n\t"                                    \
+         "lw $4, 40(%1) \n\t"                                     \
+         "sw $4, 36($29) \n\t"                                    \
+         "lw $4, 44(%1) \n\t"                                     \
+         "sw $4, 40($29) \n\t"                                    \
+         "lw $4, 48(%1) \n\t"                                     \
+         "sw $4, 44($29) \n\t"                                    \
+         "lw $4, 4(%1) \n\t"                                      \
+         "lw $5, 8(%1) \n\t"                                      \
+         "lw $6, 12(%1) \n\t"                                     \
+         "lw $7, 16(%1) \n\t"                                     \
+         "lw $25, 0(%1) \n\t"  /* target->t9 */                   \
+         VALGRIND_CALL_NOREDIR_T9                                 \
+         "addu $29, $29, 56 \n\t"                                 \
+         "lw $28, 0($29) \n\t"                                    \
+         "lw $31, 4($29) \n\t"                                    \
+         "addu $29, $29, 8 \n\t"                                  \
+         "move %0, $2\n"                                          \
+         : /*out*/   "=r" (_res)                                  \
+         : /*in*/    "r" (&_argvec[0])                            \
+         : /*trash*/ "memory", __CALLER_SAVED_REGS                \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#endif /* PLAT_mips32_linux */
+
+/* ------------------------- mips64-linux ------------------------- */
+
+#if defined(PLAT_mips64_linux)
+
+/* These regs are trashed by the hidden call. */
+#define __CALLER_SAVED_REGS "$2", "$3", "$4", "$5", "$6",       \
+"$7", "$8", "$9", "$10", "$11", "$12", "$13", "$14", "$15", "$24", \
+"$25", "$31"
+
+/* These CALL_FN_ macros assume that on mips-linux, sizeof(unsigned
+   long) == 4. */
+
+#define CALL_FN_W_v(lval, orig)                                   \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[1];                          \
+      volatile unsigned long _res;                                \
+      _argvec[0] = (unsigned long)_orig.nraddr;                   \
+      __asm__ volatile(                                           \
+         "ld $25, 0(%1)\n\t"  /* target->t9 */                    \
+         VALGRIND_CALL_NOREDIR_T9                                 \
+         "move %0, $2\n"                                          \
+         : /*out*/   "=r" (_res)                                  \
+         : /*in*/    "0" (&_argvec[0])                            \
+         : /*trash*/ "memory", __CALLER_SAVED_REGS                \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_W(lval, orig, arg1)                             \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[2];                          \
+      volatile unsigned long _res;                                \
+      _argvec[0] = (unsigned long)_orig.nraddr;                   \
+      _argvec[1] = (unsigned long)(arg1);                         \
+      __asm__ volatile(                                           \
+         "ld $4, 8(%1)\n\t"   /* arg1*/                           \
+         "ld $25, 0(%1)\n\t"  /* target->t9 */                    \
+         VALGRIND_CALL_NOREDIR_T9                                 \
+         "move %0, $2\n"                                          \
+         : /*out*/   "=r" (_res)                                  \
+         : /*in*/    "r" (&_argvec[0])                            \
+         : /*trash*/ "memory", __CALLER_SAVED_REGS                \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_WW(lval, orig, arg1,arg2)                       \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[3];                          \
+      volatile unsigned long _res;                                \
+      _argvec[0] = (unsigned long)_orig.nraddr;                   \
+      _argvec[1] = (unsigned long)(arg1);                         \
+      _argvec[2] = (unsigned long)(arg2);                         \
+      __asm__ volatile(                                           \
+         "ld $4, 8(%1)\n\t"                                       \
+         "ld $5, 16(%1)\n\t"                                      \
+         "ld $25, 0(%1)\n\t"  /* target->t9 */                    \
+         VALGRIND_CALL_NOREDIR_T9                                 \
+         "move %0, $2\n"                                          \
+         : /*out*/   "=r" (_res)                                  \
+         : /*in*/    "r" (&_argvec[0])                            \
+         : /*trash*/ "memory", __CALLER_SAVED_REGS                \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_WWW(lval, orig, arg1,arg2,arg3)                 \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[4];                          \
+      volatile unsigned long _res;                                \
+      _argvec[0] = (unsigned long)_orig.nraddr;                   \
+      _argvec[1] = (unsigned long)(arg1);                         \
+      _argvec[2] = (unsigned long)(arg2);                         \
+      _argvec[3] = (unsigned long)(arg3);                         \
+      __asm__ volatile(                                           \
+         "ld $4, 8(%1)\n\t"                                       \
+         "ld $5, 16(%1)\n\t"                                      \
+         "ld $6, 24(%1)\n\t"                                      \
+         "ld $25, 0(%1)\n\t"  /* target->t9 */                    \
+         VALGRIND_CALL_NOREDIR_T9                                 \
+         "move %0, $2\n"                                          \
+         : /*out*/   "=r" (_res)                                  \
+         : /*in*/    "r" (&_argvec[0])                            \
+         : /*trash*/ "memory", __CALLER_SAVED_REGS                \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_WWWW(lval, orig, arg1,arg2,arg3,arg4)           \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[5];                          \
+      volatile unsigned long _res;                                \
+      _argvec[0] = (unsigned long)_orig.nraddr;                   \
+      _argvec[1] = (unsigned long)(arg1);                         \
+      _argvec[2] = (unsigned long)(arg2);                         \
+      _argvec[3] = (unsigned long)(arg3);                         \
+      _argvec[4] = (unsigned long)(arg4);                         \
+      __asm__ volatile(                                           \
+         "ld $4, 8(%1)\n\t"                                       \
+         "ld $5, 16(%1)\n\t"                                      \
+         "ld $6, 24(%1)\n\t"                                      \
+         "ld $7, 32(%1)\n\t"                                      \
+         "ld $25, 0(%1)\n\t"  /* target->t9 */                    \
+         VALGRIND_CALL_NOREDIR_T9                                 \
+         "move %0, $2\n"                                          \
+         : /*out*/   "=r" (_res)                                  \
+         : /*in*/    "r" (&_argvec[0])                            \
+         : /*trash*/ "memory", __CALLER_SAVED_REGS                \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_5W(lval, orig, arg1,arg2,arg3,arg4,arg5)        \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[6];                          \
+      volatile unsigned long _res;                                \
+      _argvec[0] = (unsigned long)_orig.nraddr;                   \
+      _argvec[1] = (unsigned long)(arg1);                         \
+      _argvec[2] = (unsigned long)(arg2);                         \
+      _argvec[3] = (unsigned long)(arg3);                         \
+      _argvec[4] = (unsigned long)(arg4);                         \
+      _argvec[5] = (unsigned long)(arg5);                         \
+      __asm__ volatile(                                           \
+         "ld $4, 8(%1)\n\t"                                       \
+         "ld $5, 16(%1)\n\t"                                      \
+         "ld $6, 24(%1)\n\t"                                      \
+         "ld $7, 32(%1)\n\t"                                      \
+         "ld $8, 40(%1)\n\t"                                      \
+         "ld $25, 0(%1)\n\t"  /* target->t9 */                    \
+         VALGRIND_CALL_NOREDIR_T9                                 \
+         "move %0, $2\n"                                          \
+         : /*out*/   "=r" (_res)                                  \
+         : /*in*/    "r" (&_argvec[0])                            \
+         : /*trash*/ "memory", __CALLER_SAVED_REGS                \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_6W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6)   \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[7];                          \
+      volatile unsigned long _res;                                \
+      _argvec[0] = (unsigned long)_orig.nraddr;                   \
+      _argvec[1] = (unsigned long)(arg1);                         \
+      _argvec[2] = (unsigned long)(arg2);                         \
+      _argvec[3] = (unsigned long)(arg3);                         \
+      _argvec[4] = (unsigned long)(arg4);                         \
+      _argvec[5] = (unsigned long)(arg5);                         \
+      _argvec[6] = (unsigned long)(arg6);                         \
+      __asm__ volatile(                                           \
+         "ld $4, 8(%1)\n\t"                                       \
+         "ld $5, 16(%1)\n\t"                                      \
+         "ld $6, 24(%1)\n\t"                                      \
+         "ld $7, 32(%1)\n\t"                                      \
+         "ld $8, 40(%1)\n\t"                                      \
+         "ld $9, 48(%1)\n\t"                                      \
+         "ld $25, 0(%1)\n\t"  /* target->t9 */                    \
+         VALGRIND_CALL_NOREDIR_T9                                 \
+         "move %0, $2\n"                                          \
+         : /*out*/   "=r" (_res)                                  \
+         : /*in*/    "r" (&_argvec[0])                            \
+         : /*trash*/ "memory", __CALLER_SAVED_REGS                \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_7W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6,   \
+                                 arg7)                            \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[8];                          \
+      volatile unsigned long _res;                                \
+      _argvec[0] = (unsigned long)_orig.nraddr;                   \
+      _argvec[1] = (unsigned long)(arg1);                         \
+      _argvec[2] = (unsigned long)(arg2);                         \
+      _argvec[3] = (unsigned long)(arg3);                         \
+      _argvec[4] = (unsigned long)(arg4);                         \
+      _argvec[5] = (unsigned long)(arg5);                         \
+      _argvec[6] = (unsigned long)(arg6);                         \
+      _argvec[7] = (unsigned long)(arg7);                         \
+      __asm__ volatile(                                           \
+         "ld $4, 8(%1)\n\t"                                       \
+         "ld $5, 16(%1)\n\t"                                      \
+         "ld $6, 24(%1)\n\t"                                      \
+         "ld $7, 32(%1)\n\t"                                      \
+         "ld $8, 40(%1)\n\t"                                      \
+         "ld $9, 48(%1)\n\t"                                      \
+         "ld $10, 56(%1)\n\t"                                     \
+         "ld $25, 0(%1) \n\t"  /* target->t9 */                   \
+         VALGRIND_CALL_NOREDIR_T9                                 \
+         "move %0, $2\n"                                          \
+         : /*out*/   "=r" (_res)                                  \
+         : /*in*/    "r" (&_argvec[0])                            \
+         : /*trash*/ "memory", __CALLER_SAVED_REGS                \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_8W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6,   \
+                                 arg7,arg8)                       \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[9];                          \
+      volatile unsigned long _res;                                \
+      _argvec[0] = (unsigned long)_orig.nraddr;                   \
+      _argvec[1] = (unsigned long)(arg1);                         \
+      _argvec[2] = (unsigned long)(arg2);                         \
+      _argvec[3] = (unsigned long)(arg3);                         \
+      _argvec[4] = (unsigned long)(arg4);                         \
+      _argvec[5] = (unsigned long)(arg5);                         \
+      _argvec[6] = (unsigned long)(arg6);                         \
+      _argvec[7] = (unsigned long)(arg7);                         \
+      _argvec[8] = (unsigned long)(arg8);                         \
+      __asm__ volatile(                                           \
+         "ld $4, 8(%1)\n\t"                                       \
+         "ld $5, 16(%1)\n\t"                                      \
+         "ld $6, 24(%1)\n\t"                                      \
+         "ld $7, 32(%1)\n\t"                                      \
+         "ld $8, 40(%1)\n\t"                                      \
+         "ld $9, 48(%1)\n\t"                                      \
+         "ld $10, 56(%1)\n\t"                                     \
+         "ld $11, 64(%1)\n\t"                                     \
+         "ld $25, 0(%1) \n\t"  /* target->t9 */                   \
+         VALGRIND_CALL_NOREDIR_T9                                 \
+         "move %0, $2\n"                                          \
+         : /*out*/   "=r" (_res)                                  \
+         : /*in*/    "r" (&_argvec[0])                            \
+         : /*trash*/ "memory", __CALLER_SAVED_REGS                \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_9W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6,   \
+                                 arg7,arg8,arg9)                  \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[10];                         \
+      volatile unsigned long _res;                                \
+      _argvec[0] = (unsigned long)_orig.nraddr;                   \
+      _argvec[1] = (unsigned long)(arg1);                         \
+      _argvec[2] = (unsigned long)(arg2);                         \
+      _argvec[3] = (unsigned long)(arg3);                         \
+      _argvec[4] = (unsigned long)(arg4);                         \
+      _argvec[5] = (unsigned long)(arg5);                         \
+      _argvec[6] = (unsigned long)(arg6);                         \
+      _argvec[7] = (unsigned long)(arg7);                         \
+      _argvec[8] = (unsigned long)(arg8);                         \
+      _argvec[9] = (unsigned long)(arg9);                         \
+      __asm__ volatile(                                           \
+         "dsubu $29, $29, 8\n\t"                                  \
+         "ld $4, 72(%1)\n\t"                                      \
+         "sd $4, 0($29)\n\t"                                      \
+         "ld $4, 8(%1)\n\t"                                       \
+         "ld $5, 16(%1)\n\t"                                      \
+         "ld $6, 24(%1)\n\t"                                      \
+         "ld $7, 32(%1)\n\t"                                      \
+         "ld $8, 40(%1)\n\t"                                      \
+         "ld $9, 48(%1)\n\t"                                      \
+         "ld $10, 56(%1)\n\t"                                     \
+         "ld $11, 64(%1)\n\t"                                     \
+         "ld $25, 0(%1)\n\t"  /* target->t9 */                    \
+         VALGRIND_CALL_NOREDIR_T9                                 \
+         "daddu $29, $29, 8\n\t"                                  \
+         "move %0, $2\n"                                          \
+         : /*out*/   "=r" (_res)                                  \
+         : /*in*/    "r" (&_argvec[0])                            \
+         : /*trash*/ "memory", __CALLER_SAVED_REGS                \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_10W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6,  \
+                                  arg7,arg8,arg9,arg10)           \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[11];                         \
+      volatile unsigned long _res;                                \
+      _argvec[0] = (unsigned long)_orig.nraddr;                   \
+      _argvec[1] = (unsigned long)(arg1);                         \
+      _argvec[2] = (unsigned long)(arg2);                         \
+      _argvec[3] = (unsigned long)(arg3);                         \
+      _argvec[4] = (unsigned long)(arg4);                         \
+      _argvec[5] = (unsigned long)(arg5);                         \
+      _argvec[6] = (unsigned long)(arg6);                         \
+      _argvec[7] = (unsigned long)(arg7);                         \
+      _argvec[8] = (unsigned long)(arg8);                         \
+      _argvec[9] = (unsigned long)(arg9);                         \
+      _argvec[10] = (unsigned long)(arg10);                       \
+      __asm__ volatile(                                           \
+         "dsubu $29, $29, 16\n\t"                                 \
+         "ld $4, 72(%1)\n\t"                                      \
+         "sd $4, 0($29)\n\t"                                      \
+         "ld $4, 80(%1)\n\t"                                      \
+         "sd $4, 8($29)\n\t"                                      \
+         "ld $4, 8(%1)\n\t"                                       \
+         "ld $5, 16(%1)\n\t"                                      \
+         "ld $6, 24(%1)\n\t"                                      \
+         "ld $7, 32(%1)\n\t"                                      \
+         "ld $8, 40(%1)\n\t"                                      \
+         "ld $9, 48(%1)\n\t"                                      \
+         "ld $10, 56(%1)\n\t"                                     \
+         "ld $11, 64(%1)\n\t"                                     \
+         "ld $25, 0(%1)\n\t"  /* target->t9 */                    \
+         VALGRIND_CALL_NOREDIR_T9                                 \
+         "daddu $29, $29, 16\n\t"                                 \
+         "move %0, $2\n"                                          \
+         : /*out*/   "=r" (_res)                                  \
+         : /*in*/    "r" (&_argvec[0])                            \
+         : /*trash*/ "memory", __CALLER_SAVED_REGS                \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_11W(lval, orig, arg1,arg2,arg3,arg4,arg5,       \
+                                  arg6,arg7,arg8,arg9,arg10,      \
+                                  arg11)                          \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[12];                         \
+      volatile unsigned long _res;                                \
+      _argvec[0] = (unsigned long)_orig.nraddr;                   \
+      _argvec[1] = (unsigned long)(arg1);                         \
+      _argvec[2] = (unsigned long)(arg2);                         \
+      _argvec[3] = (unsigned long)(arg3);                         \
+      _argvec[4] = (unsigned long)(arg4);                         \
+      _argvec[5] = (unsigned long)(arg5);                         \
+      _argvec[6] = (unsigned long)(arg6);                         \
+      _argvec[7] = (unsigned long)(arg7);                         \
+      _argvec[8] = (unsigned long)(arg8);                         \
+      _argvec[9] = (unsigned long)(arg9);                         \
+      _argvec[10] = (unsigned long)(arg10);                       \
+      _argvec[11] = (unsigned long)(arg11);                       \
+      __asm__ volatile(                                           \
+         "dsubu $29, $29, 24\n\t"                                 \
+         "ld $4, 72(%1)\n\t"                                      \
+         "sd $4, 0($29)\n\t"                                      \
+         "ld $4, 80(%1)\n\t"                                      \
+         "sd $4, 8($29)\n\t"                                      \
+         "ld $4, 88(%1)\n\t"                                      \
+         "sd $4, 16($29)\n\t"                                     \
+         "ld $4, 8(%1)\n\t"                                       \
+         "ld $5, 16(%1)\n\t"                                      \
+         "ld $6, 24(%1)\n\t"                                      \
+         "ld $7, 32(%1)\n\t"                                      \
+         "ld $8, 40(%1)\n\t"                                      \
+         "ld $9, 48(%1)\n\t"                                      \
+         "ld $10, 56(%1)\n\t"                                     \
+         "ld $11, 64(%1)\n\t"                                     \
+         "ld $25, 0(%1)\n\t"  /* target->t9 */                    \
+         VALGRIND_CALL_NOREDIR_T9                                 \
+         "daddu $29, $29, 24\n\t"                                 \
+         "move %0, $2\n"                                          \
+         : /*out*/   "=r" (_res)                                  \
+         : /*in*/    "r" (&_argvec[0])                            \
+         : /*trash*/ "memory", __CALLER_SAVED_REGS                \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_12W(lval, orig, arg1,arg2,arg3,arg4,arg5,       \
+                                  arg6,arg7,arg8,arg9,arg10,      \
+                                  arg11,arg12)                    \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[13];                         \
+      volatile unsigned long _res;                                \
+      _argvec[0] = (unsigned long)_orig.nraddr;                   \
+      _argvec[1] = (unsigned long)(arg1);                         \
+      _argvec[2] = (unsigned long)(arg2);                         \
+      _argvec[3] = (unsigned long)(arg3);                         \
+      _argvec[4] = (unsigned long)(arg4);                         \
+      _argvec[5] = (unsigned long)(arg5);                         \
+      _argvec[6] = (unsigned long)(arg6);                         \
+      _argvec[7] = (unsigned long)(arg7);                         \
+      _argvec[8] = (unsigned long)(arg8);                         \
+      _argvec[9] = (unsigned long)(arg9);                         \
+      _argvec[10] = (unsigned long)(arg10);                       \
+      _argvec[11] = (unsigned long)(arg11);                       \
+      _argvec[12] = (unsigned long)(arg12);                       \
+      __asm__ volatile(                                           \
+         "dsubu $29, $29, 32\n\t"                                 \
+         "ld $4, 72(%1)\n\t"                                      \
+         "sd $4, 0($29)\n\t"                                      \
+         "ld $4, 80(%1)\n\t"                                      \
+         "sd $4, 8($29)\n\t"                                      \
+         "ld $4, 88(%1)\n\t"                                      \
+         "sd $4, 16($29)\n\t"                                     \
+         "ld $4, 96(%1)\n\t"                                      \
+         "sd $4, 24($29)\n\t"                                     \
+         "ld $4, 8(%1)\n\t"                                       \
+         "ld $5, 16(%1)\n\t"                                      \
+         "ld $6, 24(%1)\n\t"                                      \
+         "ld $7, 32(%1)\n\t"                                      \
+         "ld $8, 40(%1)\n\t"                                      \
+         "ld $9, 48(%1)\n\t"                                      \
+         "ld $10, 56(%1)\n\t"                                     \
+         "ld $11, 64(%1)\n\t"                                     \
+         "ld $25, 0(%1)\n\t"  /* target->t9 */                    \
+         VALGRIND_CALL_NOREDIR_T9                                 \
+         "daddu $29, $29, 32\n\t"                                 \
+         "move %0, $2\n"                                          \
+         : /*out*/   "=r" (_res)                                  \
+         : /*in*/    "r" (&_argvec[0])                            \
+         : /*trash*/ "memory", __CALLER_SAVED_REGS                \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#endif /* PLAT_mips64_linux */
+
+
+/* ------------------------------------------------------------------ */
+/* ARCHITECTURE INDEPENDENT MACROS for CLIENT REQUESTS.               */
+/*                                                                    */
+/* ------------------------------------------------------------------ */
+
+/* Some request codes.  There are many more of these, but most are not
+   exposed to end-user view.  These are the public ones, all of the
+   form 0x1000 + small_number.
+
+   Core ones are in the range 0x00000000--0x0000ffff.  The non-public
+   ones start at 0x2000.
+*/
+
+/* These macros are used by tools -- they must be public, but don't
+   embed them into other programs. */
+#define VG_USERREQ_TOOL_BASE(a,b) \
+   ((unsigned int)(((a)&0xff) << 24 | ((b)&0xff) << 16))
+#define VG_IS_TOOL_USERREQ(a, b, v) \
+   (VG_USERREQ_TOOL_BASE(a,b) == ((v) & 0xffff0000))
+
+/* !! ABIWARNING !! ABIWARNING !! ABIWARNING !! ABIWARNING !! 
+   This enum comprises an ABI exported by Valgrind to programs
+   which use client requests.  DO NOT CHANGE THE ORDER OF THESE
+   ENTRIES, NOR DELETE ANY -- add new ones at the end. */
+typedef
+   enum { VG_USERREQ__RUNNING_ON_VALGRIND  = 0x1001,
+          VG_USERREQ__DISCARD_TRANSLATIONS = 0x1002,
+
+          /* These allow any function to be called from the simulated
+             CPU but run on the real CPU.  Nb: the first arg passed to
+             the function is always the ThreadId of the running
+             thread!  So CLIENT_CALL0 actually requires a 1 arg
+             function, etc. */
+          VG_USERREQ__CLIENT_CALL0 = 0x1101,
+          VG_USERREQ__CLIENT_CALL1 = 0x1102,
+          VG_USERREQ__CLIENT_CALL2 = 0x1103,
+          VG_USERREQ__CLIENT_CALL3 = 0x1104,
+
+          /* Can be useful in regression testing suites -- eg. can
+             send Valgrind's output to /dev/null and still count
+             errors. */
+          VG_USERREQ__COUNT_ERRORS = 0x1201,
+
+          /* Allows the client program and/or gdbserver to execute a monitor
+             command. */
+          VG_USERREQ__GDB_MONITOR_COMMAND = 0x1202,
+
+          /* These are useful and can be interpreted by any tool that
+             tracks malloc() et al, by using vg_replace_malloc.c. */
+          VG_USERREQ__MALLOCLIKE_BLOCK = 0x1301,
+          VG_USERREQ__RESIZEINPLACE_BLOCK = 0x130b,
+          VG_USERREQ__FREELIKE_BLOCK   = 0x1302,
+          /* Memory pool support. */
+          VG_USERREQ__CREATE_MEMPOOL   = 0x1303,
+          VG_USERREQ__DESTROY_MEMPOOL  = 0x1304,
+          VG_USERREQ__MEMPOOL_ALLOC    = 0x1305,
+          VG_USERREQ__MEMPOOL_FREE     = 0x1306,
+          VG_USERREQ__MEMPOOL_TRIM     = 0x1307,
+          VG_USERREQ__MOVE_MEMPOOL     = 0x1308,
+          VG_USERREQ__MEMPOOL_CHANGE   = 0x1309,
+          VG_USERREQ__MEMPOOL_EXISTS   = 0x130a,
+
+          /* Allow printfs to valgrind log. */
+          /* The first two pass the va_list argument by value, which
+             assumes it is the same size as or smaller than a UWord,
+             which generally isn't the case.  Hence are deprecated.
+             The second two pass the vargs by reference and so are
+             immune to this problem. */
+          /* both :: char* fmt, va_list vargs (DEPRECATED) */
+          VG_USERREQ__PRINTF           = 0x1401,
+          VG_USERREQ__PRINTF_BACKTRACE = 0x1402,
+          /* both :: char* fmt, va_list* vargs */
+          VG_USERREQ__PRINTF_VALIST_BY_REF = 0x1403,
+          VG_USERREQ__PRINTF_BACKTRACE_VALIST_BY_REF = 0x1404,
+
+          /* Stack support. */
+          VG_USERREQ__STACK_REGISTER   = 0x1501,
+          VG_USERREQ__STACK_DEREGISTER = 0x1502,
+          VG_USERREQ__STACK_CHANGE     = 0x1503,
+
+          /* Wine support */
+          VG_USERREQ__LOAD_PDB_DEBUGINFO = 0x1601,
+
+          /* Querying of debug info. */
+          VG_USERREQ__MAP_IP_TO_SRCLOC = 0x1701,
+
+          /* Disable/enable error reporting level.  Takes a single
+             Word arg which is the delta to this thread's error
+             disablement indicator.  Hence 1 disables or further
+             disables errors, and -1 moves back towards enablement.
+             Other values are not allowed. */
+          VG_USERREQ__CHANGE_ERR_DISABLEMENT = 0x1801,
+
+          /* Initialise IR injection */
+          VG_USERREQ__VEX_INIT_FOR_IRI = 0x1901
+   } Vg_ClientRequest;
+
+#if !defined(__GNUC__)
+#  define __extension__ /* */
+#endif
+
+
+/* Returns the number of Valgrinds this code is running under.  That
+   is, 0 if running natively, 1 if running under Valgrind, 2 if
+   running under Valgrind which is running under another Valgrind,
+   etc. */
+#define RUNNING_ON_VALGRIND                                           \
+    (unsigned)VALGRIND_DO_CLIENT_REQUEST_EXPR(0 /* if not */,         \
+                                    VG_USERREQ__RUNNING_ON_VALGRIND,  \
+                                    0, 0, 0, 0, 0)                    \
+
+
+/* Discard translation of code in the range [_qzz_addr .. _qzz_addr +
+   _qzz_len - 1].  Useful if you are debugging a JITter or some such,
+   since it provides a way to make sure valgrind will retranslate the
+   invalidated area.  Returns no value. */
+#define VALGRIND_DISCARD_TRANSLATIONS(_qzz_addr,_qzz_len)              \
+    VALGRIND_DO_CLIENT_REQUEST_STMT(VG_USERREQ__DISCARD_TRANSLATIONS,  \
+                                    _qzz_addr, _qzz_len, 0, 0, 0)
+
+
+/* These requests are for getting Valgrind itself to print something.
+   Possibly with a backtrace.  This is a really ugly hack.  The return value
+   is the number of characters printed, excluding the "**<pid>** " part at the
+   start and the backtrace (if present). */
+
+#if defined(__GNUC__) || defined(__INTEL_COMPILER) && !defined(_MSC_VER)
+/* Modern GCC will optimize the static routine out if unused,
+   and unused attribute will shut down warnings about it.  */
+static int VALGRIND_PRINTF(const char *format, ...)
+   __attribute__((format(__printf__, 1, 2), __unused__));
+#endif
+static int
+#if defined(_MSC_VER)
+__inline
+#endif
+VALGRIND_PRINTF(const char *format, ...)
+{
+#if defined(NVALGRIND)
+   return 0;
+#else /* NVALGRIND */
+#if defined(_MSC_VER) || defined(__MINGW64__)
+   uintptr_t _qzz_res;
+#else
+   unsigned long _qzz_res;
+#endif
+   va_list vargs;
+   va_start(vargs, format);
+#if defined(_MSC_VER) || defined(__MINGW64__)
+   _qzz_res = VALGRIND_DO_CLIENT_REQUEST_EXPR(0,
+                              VG_USERREQ__PRINTF_VALIST_BY_REF,
+                              (uintptr_t)format,
+                              (uintptr_t)&vargs,
+                              0, 0, 0);
+#else
+   _qzz_res = VALGRIND_DO_CLIENT_REQUEST_EXPR(0,
+                              VG_USERREQ__PRINTF_VALIST_BY_REF,
+                              (unsigned long)format,
+                              (unsigned long)&vargs, 
+                              0, 0, 0);
+#endif
+   va_end(vargs);
+   return (int)_qzz_res;
+#endif /* NVALGRIND */
+}
+
+#if defined(__GNUC__) || defined(__INTEL_COMPILER) && !defined(_MSC_VER)
+static int VALGRIND_PRINTF_BACKTRACE(const char *format, ...)
+   __attribute__((format(__printf__, 1, 2), __unused__));
+#endif
+static int
+#if defined(_MSC_VER)
+__inline
+#endif
+VALGRIND_PRINTF_BACKTRACE(const char *format, ...)
+{
+#if defined(NVALGRIND)
+   return 0;
+#else /* NVALGRIND */
+#if defined(_MSC_VER) || defined(__MINGW64__)
+   uintptr_t _qzz_res;
+#else
+   unsigned long _qzz_res;
+#endif
+   va_list vargs;
+   va_start(vargs, format);
+#if defined(_MSC_VER) || defined(__MINGW64__)
+   _qzz_res = VALGRIND_DO_CLIENT_REQUEST_EXPR(0,
+                              VG_USERREQ__PRINTF_BACKTRACE_VALIST_BY_REF,
+                              (uintptr_t)format,
+                              (uintptr_t)&vargs,
+                              0, 0, 0);
+#else
+   _qzz_res = VALGRIND_DO_CLIENT_REQUEST_EXPR(0,
+                              VG_USERREQ__PRINTF_BACKTRACE_VALIST_BY_REF,
+                              (unsigned long)format,
+                              (unsigned long)&vargs, 
+                              0, 0, 0);
+#endif
+   va_end(vargs);
+   return (int)_qzz_res;
+#endif /* NVALGRIND */
+}
+
+
+/* These requests allow control to move from the simulated CPU to the
+   real CPU, calling an arbitary function.
+   
+   Note that the current ThreadId is inserted as the first argument.
+   So this call:
+
+     VALGRIND_NON_SIMD_CALL2(f, arg1, arg2)
+
+   requires f to have this signature:
+
+     Word f(Word tid, Word arg1, Word arg2)
+
+   where "Word" is a word-sized type.
+
+   Note that these client requests are not entirely reliable.  For example,
+   if you call a function with them that subsequently calls printf(),
+   there's a high chance Valgrind will crash.  Generally, your prospects of
+   these working are made higher if the called function does not refer to
+   any global variables, and does not refer to any libc or other functions
+   (printf et al).  Any kind of entanglement with libc or dynamic linking is
+   likely to have a bad outcome, for tricky reasons which we've grappled
+   with a lot in the past.
+*/
+#define VALGRIND_NON_SIMD_CALL0(_qyy_fn)                          \
+    VALGRIND_DO_CLIENT_REQUEST_EXPR(0 /* default return */,       \
+                                    VG_USERREQ__CLIENT_CALL0,     \
+                                    _qyy_fn,                      \
+                                    0, 0, 0, 0)
+
+#define VALGRIND_NON_SIMD_CALL1(_qyy_fn, _qyy_arg1)                    \
+    VALGRIND_DO_CLIENT_REQUEST_EXPR(0 /* default return */,            \
+                                    VG_USERREQ__CLIENT_CALL1,          \
+                                    _qyy_fn,                           \
+                                    _qyy_arg1, 0, 0, 0)
+
+#define VALGRIND_NON_SIMD_CALL2(_qyy_fn, _qyy_arg1, _qyy_arg2)         \
+    VALGRIND_DO_CLIENT_REQUEST_EXPR(0 /* default return */,            \
+                                    VG_USERREQ__CLIENT_CALL2,          \
+                                    _qyy_fn,                           \
+                                    _qyy_arg1, _qyy_arg2, 0, 0)
+
+#define VALGRIND_NON_SIMD_CALL3(_qyy_fn, _qyy_arg1, _qyy_arg2, _qyy_arg3) \
+    VALGRIND_DO_CLIENT_REQUEST_EXPR(0 /* default return */,             \
+                                    VG_USERREQ__CLIENT_CALL3,           \
+                                    _qyy_fn,                            \
+                                    _qyy_arg1, _qyy_arg2,               \
+                                    _qyy_arg3, 0)
+
+
+/* Counts the number of errors that have been recorded by a tool.  Nb:
+   the tool must record the errors with VG_(maybe_record_error)() or
+   VG_(unique_error)() for them to be counted. */
+#define VALGRIND_COUNT_ERRORS                                     \
+    (unsigned)VALGRIND_DO_CLIENT_REQUEST_EXPR(                    \
+                               0 /* default return */,            \
+                               VG_USERREQ__COUNT_ERRORS,          \
+                               0, 0, 0, 0, 0)
+
+/* Several Valgrind tools (Memcheck, Massif, Helgrind, DRD) rely on knowing
+   when heap blocks are allocated in order to give accurate results.  This
+   happens automatically for the standard allocator functions such as
+   malloc(), calloc(), realloc(), memalign(), new, new[], free(), delete,
+   delete[], etc.
+
+   But if your program uses a custom allocator, this doesn't automatically
+   happen, and Valgrind will not do as well.  For example, if you allocate
+   superblocks with mmap() and then allocates chunks of the superblocks, all
+   Valgrind's observations will be at the mmap() level and it won't know that
+   the chunks should be considered separate entities.  In Memcheck's case,
+   that means you probably won't get heap block overrun detection (because
+   there won't be redzones marked as unaddressable) and you definitely won't
+   get any leak detection.
+
+   The following client requests allow a custom allocator to be annotated so
+   that it can be handled accurately by Valgrind.
+
+   VALGRIND_MALLOCLIKE_BLOCK marks a region of memory as having been allocated
+   by a malloc()-like function.  For Memcheck (an illustrative case), this
+   does two things:
+
+   - It records that the block has been allocated.  This means any addresses
+     within the block mentioned in error messages will be
+     identified as belonging to the block.  It also means that if the block
+     isn't freed it will be detected by the leak checker.
+
+   - It marks the block as being addressable and undefined (if 'is_zeroed' is
+     not set), or addressable and defined (if 'is_zeroed' is set).  This
+     controls how accesses to the block by the program are handled.
+   
+   'addr' is the start of the usable block (ie. after any
+   redzone), 'sizeB' is its size.  'rzB' is the redzone size if the allocator
+   can apply redzones -- these are blocks of padding at the start and end of
+   each block.  Adding redzones is recommended as it makes it much more likely
+   Valgrind will spot block overruns.  `is_zeroed' indicates if the memory is
+   zeroed (or filled with another predictable value), as is the case for
+   calloc().
+   
+   VALGRIND_MALLOCLIKE_BLOCK should be put immediately after the point where a
+   heap block -- that will be used by the client program -- is allocated.
+   It's best to put it at the outermost level of the allocator if possible;
+   for example, if you have a function my_alloc() which calls
+   internal_alloc(), and the client request is put inside internal_alloc(),
+   stack traces relating to the heap block will contain entries for both
+   my_alloc() and internal_alloc(), which is probably not what you want.
+
+   For Memcheck users: if you use VALGRIND_MALLOCLIKE_BLOCK to carve out
+   custom blocks from within a heap block, B, that has been allocated with
+   malloc/calloc/new/etc, then block B will be *ignored* during leak-checking
+   -- the custom blocks will take precedence.
+
+   VALGRIND_FREELIKE_BLOCK is the partner to VALGRIND_MALLOCLIKE_BLOCK.  For
+   Memcheck, it does two things:
+
+   - It records that the block has been deallocated.  This assumes that the
+     block was annotated as having been allocated via
+     VALGRIND_MALLOCLIKE_BLOCK.  Otherwise, an error will be issued.
+
+   - It marks the block as being unaddressable.
+
+   VALGRIND_FREELIKE_BLOCK should be put immediately after the point where a
+   heap block is deallocated.
+
+   VALGRIND_RESIZEINPLACE_BLOCK informs a tool about reallocation. For
+   Memcheck, it does four things:
+
+   - It records that the size of a block has been changed.  This assumes that
+     the block was annotated as having been allocated via
+     VALGRIND_MALLOCLIKE_BLOCK.  Otherwise, an error will be issued.
+
+   - If the block shrunk, it marks the freed memory as being unaddressable.
+
+   - If the block grew, it marks the new area as undefined and defines a red
+     zone past the end of the new block.
+
+   - The V-bits of the overlap between the old and the new block are preserved.
+
+   VALGRIND_RESIZEINPLACE_BLOCK should be put after allocation of the new block
+   and before deallocation of the old block.
+
+   In many cases, these three client requests will not be enough to get your
+   allocator working well with Memcheck.  More specifically, if your allocator
+   writes to freed blocks in any way then a VALGRIND_MAKE_MEM_UNDEFINED call
+   will be necessary to mark the memory as addressable just before the zeroing
+   occurs, otherwise you'll get a lot of invalid write errors.  For example,
+   you'll need to do this if your allocator recycles freed blocks, but it
+   zeroes them before handing them back out (via VALGRIND_MALLOCLIKE_BLOCK).
+   Alternatively, if your allocator reuses freed blocks for allocator-internal
+   data structures, VALGRIND_MAKE_MEM_UNDEFINED calls will also be necessary.
+
+   Really, what's happening is a blurring of the lines between the client
+   program and the allocator... after VALGRIND_FREELIKE_BLOCK is called, the
+   memory should be considered unaddressable to the client program, but the
+   allocator knows more than the rest of the client program and so may be able
+   to safely access it.  Extra client requests are necessary for Valgrind to
+   understand the distinction between the allocator and the rest of the
+   program.
+
+   Ignored if addr == 0.
+*/
+#define VALGRIND_MALLOCLIKE_BLOCK(addr, sizeB, rzB, is_zeroed)          \
+    VALGRIND_DO_CLIENT_REQUEST_STMT(VG_USERREQ__MALLOCLIKE_BLOCK,       \
+                                    addr, sizeB, rzB, is_zeroed, 0)
+
+/* See the comment for VALGRIND_MALLOCLIKE_BLOCK for details.
+   Ignored if addr == 0.
+*/
+#define VALGRIND_RESIZEINPLACE_BLOCK(addr, oldSizeB, newSizeB, rzB)     \
+    VALGRIND_DO_CLIENT_REQUEST_STMT(VG_USERREQ__RESIZEINPLACE_BLOCK,    \
+                                    addr, oldSizeB, newSizeB, rzB, 0)
+
+/* See the comment for VALGRIND_MALLOCLIKE_BLOCK for details.
+   Ignored if addr == 0.
+*/
+#define VALGRIND_FREELIKE_BLOCK(addr, rzB)                              \
+    VALGRIND_DO_CLIENT_REQUEST_STMT(VG_USERREQ__FREELIKE_BLOCK,         \
+                                    addr, rzB, 0, 0, 0)
+
+/* Create a memory pool. */
+#define VALGRIND_CREATE_MEMPOOL(pool, rzB, is_zeroed)             \
+    VALGRIND_DO_CLIENT_REQUEST_STMT(VG_USERREQ__CREATE_MEMPOOL,   \
+                                    pool, rzB, is_zeroed, 0, 0)
+
+/* Destroy a memory pool. */
+#define VALGRIND_DESTROY_MEMPOOL(pool)                            \
+    VALGRIND_DO_CLIENT_REQUEST_STMT(VG_USERREQ__DESTROY_MEMPOOL,  \
+                                    pool, 0, 0, 0, 0)
+
+/* Associate a piece of memory with a memory pool. */
+#define VALGRIND_MEMPOOL_ALLOC(pool, addr, size)                  \
+    VALGRIND_DO_CLIENT_REQUEST_STMT(VG_USERREQ__MEMPOOL_ALLOC,    \
+                                    pool, addr, size, 0, 0)
+
+/* Disassociate a piece of memory from a memory pool. */
+#define VALGRIND_MEMPOOL_FREE(pool, addr)                         \
+    VALGRIND_DO_CLIENT_REQUEST_STMT(VG_USERREQ__MEMPOOL_FREE,     \
+                                    pool, addr, 0, 0, 0)
+
+/* Disassociate any pieces outside a particular range. */
+#define VALGRIND_MEMPOOL_TRIM(pool, addr, size)                   \
+    VALGRIND_DO_CLIENT_REQUEST_STMT(VG_USERREQ__MEMPOOL_TRIM,     \
+                                    pool, addr, size, 0, 0)
+
+/* Resize and/or move a piece associated with a memory pool. */
+#define VALGRIND_MOVE_MEMPOOL(poolA, poolB)                       \
+    VALGRIND_DO_CLIENT_REQUEST_STMT(VG_USERREQ__MOVE_MEMPOOL,     \
+                                    poolA, poolB, 0, 0, 0)
+
+/* Resize and/or move a piece associated with a memory pool. */
+#define VALGRIND_MEMPOOL_CHANGE(pool, addrA, addrB, size)         \
+    VALGRIND_DO_CLIENT_REQUEST_STMT(VG_USERREQ__MEMPOOL_CHANGE,   \
+                                    pool, addrA, addrB, size, 0)
+
+/* Return 1 if a mempool exists, else 0. */
+#define VALGRIND_MEMPOOL_EXISTS(pool)                             \
+    (unsigned)VALGRIND_DO_CLIENT_REQUEST_EXPR(0,                  \
+                               VG_USERREQ__MEMPOOL_EXISTS,        \
+                               pool, 0, 0, 0, 0)
+
+/* Mark a piece of memory as being a stack. Returns a stack id. */
+#define VALGRIND_STACK_REGISTER(start, end)                       \
+    (unsigned)VALGRIND_DO_CLIENT_REQUEST_EXPR(0,                  \
+                               VG_USERREQ__STACK_REGISTER,        \
+                               start, end, 0, 0, 0)
+
+/* Unmark the piece of memory associated with a stack id as being a
+   stack. */
+#define VALGRIND_STACK_DEREGISTER(id)                             \
+    VALGRIND_DO_CLIENT_REQUEST_STMT(VG_USERREQ__STACK_DEREGISTER, \
+                                    id, 0, 0, 0, 0)
+
+/* Change the start and end address of the stack id. */
+#define VALGRIND_STACK_CHANGE(id, start, end)                     \
+    VALGRIND_DO_CLIENT_REQUEST_STMT(VG_USERREQ__STACK_CHANGE,     \
+                                    id, start, end, 0, 0)
+
+/* Load PDB debug info for Wine PE image_map. */
+#define VALGRIND_LOAD_PDB_DEBUGINFO(fd, ptr, total_size, delta)     \
+    VALGRIND_DO_CLIENT_REQUEST_STMT(VG_USERREQ__LOAD_PDB_DEBUGINFO, \
+                                    fd, ptr, total_size, delta, 0)
+
+/* Map a code address to a source file name and line number.  buf64
+   must point to a 64-byte buffer in the caller's address space.  The
+   result will be dumped in there and is guaranteed to be zero
+   terminated.  If no info is found, the first byte is set to zero. */
+#define VALGRIND_MAP_IP_TO_SRCLOC(addr, buf64)                    \
+    (unsigned)VALGRIND_DO_CLIENT_REQUEST_EXPR(0,                  \
+                               VG_USERREQ__MAP_IP_TO_SRCLOC,      \
+                               addr, buf64, 0, 0, 0)
+
+/* Disable error reporting for this thread.  Behaves in a stack like
+   way, so you can safely call this multiple times provided that
+   VALGRIND_ENABLE_ERROR_REPORTING is called the same number of times
+   to re-enable reporting.  The first call of this macro disables
+   reporting.  Subsequent calls have no effect except to increase the
+   number of VALGRIND_ENABLE_ERROR_REPORTING calls needed to re-enable
+   reporting.  Child threads do not inherit this setting from their
+   parents -- they are always created with reporting enabled. */
+#define VALGRIND_DISABLE_ERROR_REPORTING                                \
+    VALGRIND_DO_CLIENT_REQUEST_STMT(VG_USERREQ__CHANGE_ERR_DISABLEMENT, \
+                                    1, 0, 0, 0, 0)
+
+/* Re-enable error reporting, as per comments on
+   VALGRIND_DISABLE_ERROR_REPORTING. */
+#define VALGRIND_ENABLE_ERROR_REPORTING                                 \
+    VALGRIND_DO_CLIENT_REQUEST_STMT(VG_USERREQ__CHANGE_ERR_DISABLEMENT, \
+                                    -1, 0, 0, 0, 0)
+
+/* Execute a monitor command from the client program.
+   If a connection is opened with GDB, the output will be sent
+   according to the output mode set for vgdb.
+   If no connection is opened, output will go to the log output.
+   Returns 1 if command not recognised, 0 otherwise. */
+#define VALGRIND_MONITOR_COMMAND(command)                               \
+   VALGRIND_DO_CLIENT_REQUEST_EXPR(0, VG_USERREQ__GDB_MONITOR_COMMAND, \
+                                   command, 0, 0, 0, 0)
+
+
+#undef PLAT_x86_darwin
+#undef PLAT_amd64_darwin
+#undef PLAT_x86_win32
+#undef PLAT_amd64_win64
+#undef PLAT_x86_linux
+#undef PLAT_amd64_linux
+#undef PLAT_ppc32_linux
+#undef PLAT_ppc64_linux
+#undef PLAT_arm_linux
+#undef PLAT_s390x_linux
+#undef PLAT_mips32_linux
+#undef PLAT_mips64_linux
+
+#endif   /* __VALGRIND_H */
diff -Naur ns-3.19/src/core/model/wall-clock-synchronizer.h ns-3.20/src/core/model/wall-clock-synchronizer.h
--- ns-3.19/src/core/model/wall-clock-synchronizer.h	2014-06-17 10:34:00.632635164 -0700
+++ ns-3.20/src/core/model/wall-clock-synchronizer.h	2014-06-17 10:33:13.966995398 -0700
@@ -67,6 +67,7 @@
 
   static const uint64_t US_PER_NS = (uint64_t)1000;
   static const uint64_t US_PER_SEC = (uint64_t)1000000;
+  /// Conversion from ns to s.
   static const uint64_t NS_PER_SEC = (uint64_t)1000000000;
 
 protected:
@@ -156,8 +157,9 @@
  * real-time-clock-specific work of waiting (either busy-waiting or sleeping,
  * or some combination) until the requested simulation time.
  *
- * @param ns The simulation time we need to wait for (normalized to nanosecond
- * units).
+ * @param nsCurrent The current simulation time.
+ * @param nsDelay The simulation time of the next event (in nanosecond units).
+ *
  * @see TimeStepPrecision::Get
  */
   virtual bool DoSynchronize (uint64_t nsCurrent, uint64_t nsDelay);
diff -Naur ns-3.19/src/core/test/attribute-test-suite.cc ns-3.20/src/core/test/attribute-test-suite.cc
--- ns-3.19/src/core/test/attribute-test-suite.cc	2014-06-17 10:34:00.635635140 -0700
+++ ns-3.20/src/core/test/attribute-test-suite.cc	2014-06-17 10:33:13.968995383 -0700
@@ -72,8 +72,7 @@
   Derived () {}
 };
 
-NS_OBJECT_ENSURE_REGISTERED (Derived)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (Derived);
 
 class AttributeObjectTest : public Object
 {
@@ -264,8 +263,7 @@
   Time m_timeWithBounds;
 };
 
-NS_OBJECT_ENSURE_REGISTERED (AttributeObjectTest)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (AttributeObjectTest);
 
 // ===========================================================================
 // Test case template used for generic Attribute Value types -- used to make 
diff -Naur ns-3.19/src/core/test/event-garbage-collector-test-suite.cc ns-3.20/src/core/test/event-garbage-collector-test-suite.cc
--- ns-3.19/src/core/test/event-garbage-collector-test-suite.cc	2014-06-17 10:34:00.636635133 -0700
+++ ns-3.20/src/core/test/event-garbage-collector-test-suite.cc	2014-06-17 10:33:13.970995367 -0700
@@ -21,7 +21,7 @@
 #include "ns3/test.h"
 #include "ns3/event-garbage-collector.h"
 
-namespace ns3 {
+using namespace ns3;
 
 class EventGarbageCollectorTestCase : public TestCase
 {
@@ -84,6 +84,3 @@
     AddTestCase (new EventGarbageCollectorTestCase (), TestCase::QUICK);
   }
 } g_eventGarbageCollectorTests;
-
-}
-
diff -Naur ns-3.19/src/core/test/global-value-test-suite.cc ns-3.20/src/core/test/global-value-test-suite.cc
--- ns-3.19/src/core/test/global-value-test-suite.cc	2014-06-17 10:34:00.637635125 -0700
+++ ns-3.20/src/core/test/global-value-test-suite.cc	2014-06-17 10:33:13.970995367 -0700
@@ -21,7 +21,7 @@
 #include "ns3/test.h"
 #include "ns3/uinteger.h"
 
-namespace ns3 {
+using namespace ns3;
 
 // ===========================================================================
 // Test for the ability to get at a GlobalValue.
@@ -89,6 +89,3 @@
 }
 
 static GlobalValueTestSuite globalValueTestSuite;
-
-} // namespace ns3
-
diff -Naur ns-3.19/src/core/test/hash-test-suite.cc ns-3.20/src/core/test/hash-test-suite.cc
--- ns-3.19/src/core/test/hash-test-suite.cc	2014-06-17 10:34:00.637635125 -0700
+++ ns-3.20/src/core/test/hash-test-suite.cc	2014-06-17 10:33:13.971995360 -0700
@@ -24,7 +24,7 @@
 #include "ns3/test.h"
 #include "ns3/hash.h"
 
-namespace ns3 {
+using namespace ns3;
 
 /**
  * Base class for hash tests
@@ -385,5 +385,3 @@
 }
 
 static HashTestSuite g_hashTestSuite;
-
-}  // namespace ns3
diff -Naur ns-3.19/src/core/test/int64x64-test-suite.cc ns-3.20/src/core/test/int64x64-test-suite.cc
--- ns-3.19/src/core/test/int64x64-test-suite.cc	2014-06-17 10:34:00.638635117 -0700
+++ ns-3.20/src/core/test/int64x64-test-suite.cc	2014-06-17 10:33:13.972995352 -0700
@@ -1,37 +1,150 @@
 #include "ns3/int64x64.h"
 #include "ns3/test.h"
+#include "ns3/valgrind.h"  // Bug 1882
+
+#include <cmath>    // fabs
+#include <iomanip>
+#include <limits>   // numeric_limits<>::epsilon ()
 
 using namespace ns3;
 
-class Int64x64FracTestCase : public TestCase
+namespace ns3 {
+
+  namespace int64x64 {
+
+    namespace test {
+  
+/**
+ * \class ns3::int64x64::Int64x64TestSuite
+ * \internal
+ *
+ * Some of these tests are a little unusual for ns-3 in that they
+ * are sensitive to implementation, specifically the resolution
+ * of the double and long double implementations.
+ * 
+ * To handle this, where needed we define a tolerance to use in the
+ * test comparisions.  If you need to increase the tolerance,
+ * please append the system and compiler version.  For example:
+ *
+ * \code
+ *   // Darwin 12.5.0 (Mac 10.8.5) g++ 4.2.1
+ *   tolerance = 1;
+ *   // System Foo gcc 3.9
+ *   tolerance = 3;
+ * \endcode
+ */
+
+
+class Printer
 {
 public:
-  Int64x64FracTestCase ();
+  Printer (const int64_t high, const uint64_t low)
+    : m_haveInt (false),
+      m_value (0),
+      m_high (high),
+      m_low (low)
+  { }
+
+  Printer (const int64x64_t value)
+    : m_haveInt (true),
+      m_value (value),
+      m_high (value.GetHigh ()),
+      m_low (value.GetLow ())
+  { }
+
+private:
+  friend std::ostream & operator << (std::ostream & os, const Printer & p);
+
+  bool       m_haveInt;
+  int64x64_t m_value;
+  int64_t    m_high;
+  uint64_t   m_low;
+};
+
+std::ostream & operator << (std::ostream & os, const Printer & p)
+{
+  if (p.m_haveInt)
+    {
+      os << std::fixed << std::setprecision (22)
+	 << p.m_value;
+
+    }
+  
+  os << std::hex  << std::setfill ('0')
+     << " (0x" << std::setw (16) << p.m_high
+     << " 0x"  << std::setw (16) << p.m_low  << ")"
+     << std::dec  << std::setfill (' ');
+  return os;
+}
+
+	      
+class Int64x64HiLoTestCase : public TestCase
+{
+public:
+  Int64x64HiLoTestCase ();
   virtual void DoRun (void);
-  void CheckFrac (int64_t hi, uint64_t lo);
+  void Check (const int64_t hi, const uint64_t lo);
 };
 
-void 
-Int64x64FracTestCase::CheckFrac (int64_t hi, uint64_t lo)
+Int64x64HiLoTestCase::Int64x64HiLoTestCase ()
+  : TestCase ("Manipulate the high and low part of every number")
 {
-  int64x64_t tmp = int64x64_t (hi,lo);
-  NS_TEST_EXPECT_MSG_EQ (tmp.GetHigh (), hi,
-                         "High part does not match");
-  NS_TEST_EXPECT_MSG_EQ (tmp.GetLow (), lo,
-                         "Low part does not match");
 }
 
-Int64x64FracTestCase::Int64x64FracTestCase ()
-  : TestCase ("Check that we can manipulate the high and low part of every number")
+void 
+Int64x64HiLoTestCase::Check (const int64_t hi, const uint64_t lo)
 {
+  uint64_t tolerance = 0;
+  if (int64x64_t::implementation == int64x64_t::ld_impl)
+    {
+      // Darwin 12.5.0 (Mac 10.8.5) g++ 4.2.1
+      tolerance = 1;
+    }
+
+  int64x64_t value = int64x64_t (hi,lo);
+  uint64_t vLow = value.GetLow ();
+  bool pass = ( (value.GetHigh () == hi)
+		&& ( (Max (vLow, lo) - Min (vLow, lo)) <= tolerance)
+		);
+
+  std::cout << GetParent ()->GetName () << " Check: "
+	    << (pass ? "pass " : "FAIL ")
+	    << Printer (value) << " from" << Printer (hi, lo)
+	    << std::endl;
+
+  NS_TEST_EXPECT_MSG_EQ (value.GetHigh (), hi,
+			 "High part does not match for hi:" << hi
+			 << " lo: " << lo);
+  NS_TEST_EXPECT_MSG_EQ_TOL ((int64_t)vLow, (int64_t)lo, (int64_t)tolerance,
+			     "Low part does not match for hi: " << hi
+			     << " lo: " << lo);
 }
+
 void
-Int64x64FracTestCase::DoRun (void)
+Int64x64HiLoTestCase::DoRun (void)
 {
-  CheckFrac (1, 0);
-  CheckFrac (1, 1);
-  CheckFrac (-1, 0);
-  CheckFrac (-1, 1);
+  std::cout << std::endl;
+  std::cout << GetParent ()->GetName () << " Check: " << GetName ()
+	    << std::endl;
+
+  uint64_t low = 1;
+  if (int64x64_t::implementation == int64x64_t::ld_impl)
+    {
+      // Darwin 12.5.0 (Mac 10.8.5) g++ 4.2.1
+      low = HP_MAX_64 * std::numeric_limits<long double>::epsilon ();
+    }
+
+  Check ( 0, 0);
+  Check ( 0, low);
+  Check ( 0, 0xffffffffffffffffULL - low);
+  
+  Check ( 1, 0);
+  Check ( 1, low);
+  Check ( 1, 0xffffffffffffffffULL - low);
+  
+  Check (-1, 0);
+  Check (-1, low);
+  Check (-1, 0xffffffffffffffffULL - low);
 }
 
 
@@ -40,136 +153,301 @@
 public:
   Int64x64InputTestCase ();
   virtual void DoRun (void);
-  void CheckString (std::string str, int64_t hi, uint64_t lo);
+  void Check (const std::string & str,
+	      const int64_t hi, const uint64_t lo,
+	      const int64_t tolerance = 0);
 };
 Int64x64InputTestCase::Int64x64InputTestCase ()
-  : TestCase ("Check that we parse Int64x64 numbers as strings")
+  : TestCase ("Parse int64x64_t numbers as strings")
 {
 }
 void 
-Int64x64InputTestCase::CheckString (std::string str, int64_t hi, uint64_t lo)
+Int64x64InputTestCase::Check (const std::string & str,
+			      const int64_t hi, const uint64_t lo,
+			      const int64_t tolerance /* = 0 */)
+			      
 {
   std::istringstream iss;
   iss.str (str);
-  int64x64_t hp;
-  iss >> hp;
-  NS_TEST_EXPECT_MSG_EQ (hp.GetHigh (), hi, "High parts do not match for input string " << str);
-  NS_TEST_EXPECT_MSG_EQ (hp.GetLow (), lo, "Low parts do not match for input string " << str);
+  int64x64_t value;
+  iss >> value;
+
+  std::string input = "\"" + str + "\"";
+  uint64_t vLow = value.GetLow ();
+  bool pass = ( (value.GetHigh () == hi) &&
+		( Max (vLow, lo) - Min (vLow, lo) <= tolerance)
+		);
+
+  std::cout << GetParent ()->GetName () << " Input: "
+	    << (pass ? "pass " : "FAIL ")
+	    << std::left << std::setw (28) << input << std::right
+	    << Printer (value) 
+	    << " expected: " << Printer (hi, lo) << " +/- " << tolerance
+	    << std::endl;
+
+  NS_TEST_EXPECT_MSG_EQ (value.GetHigh (), hi,
+			 "High parts do not match for input string \""
+			 << str << "\"");
+  NS_TEST_EXPECT_MSG_EQ_TOL ((int64_t)value.GetLow (), (int64_t)lo, tolerance,
+			     "Low parts do not match for input string \""
+			     << str << "\"");
 }
 void
 Int64x64InputTestCase::DoRun (void)
 {
-  CheckString ("1", 1, 0);
-  CheckString ("+1", 1, 0);
-  CheckString ("-1", -1, 0);
-  CheckString ("1.0", 1, 0);
-  CheckString ("+1.0", 1, 0);
-  CheckString ("001.0", 1, 0);
-  CheckString ("+001.0", 1, 0);
-  CheckString ("020.0", 20, 0);
-  CheckString ("+020.0", 20, 0);
-  CheckString ("-1.0", -1, 0);
-  CheckString ("-1.0000", -1, 0);
-  CheckString ("1.0000000", 1, 0);
-  CheckString ("1.08446744073709551615", 1, 8446744073709551615LL);
-  CheckString ("-1.08446744073709551615", -1, 8446744073709551615LL);
+  std::cout << std::endl;
+  std::cout << GetParent ()->GetName () << " Input: " << GetName ()
+	    << std::endl;
+
+  int64_t tolerance = 0;
+  if (int64x64_t::implementation == int64x64_t::ld_impl)
+    {
+      // Darwin 12.5.0 (Mac 10.8.5) g++ 4.2.1
+      tolerance = 2;
+    }
+  
+  Check ("1", 1, 0);
+  Check ("+1", 1, 0);
+  Check ("-1", -1, 0);
+  Check ("1.0", 1, 0);
+  Check ("+1.0", 1, 0);
+  Check ("001.0", 1, 0);
+  Check ("+001.0", 1, 0);
+  Check ("020.0", 20, 0);
+  Check ("+020.0", 20, 0);
+  Check ("1.0000000", 1, 0);
+  Check ("-1.0", -1, 0, tolerance);
+  Check ("-1.0000", -1, 0, tolerance);
+  Check (" 1.000000000000000000054",  1, 1, tolerance);
+  Check ("-1.000000000000000000054", -2, -1, tolerance);
 }
 
+
 class Int64x64InputOutputTestCase : public TestCase
 {
 public:
   Int64x64InputOutputTestCase ();
   virtual void DoRun (void);
-  void CheckString (std::string str);
+  void Check (const std::string & str,
+	      const int64_t tolerance = 0);
 };
 Int64x64InputOutputTestCase::Int64x64InputOutputTestCase ()
-  : TestCase ("Check that we can roundtrip Int64x64 numbers as strings")
+  : TestCase ("Roundtrip int64x64_t numbers as strings")
 {
 }
 void 
-Int64x64InputOutputTestCase::CheckString (std::string str)
+Int64x64InputOutputTestCase::Check (const std::string & str,
+				    const int64_t tolerance /* = 0 */)
 {
-  std::istringstream iss;
-  iss.str (str);
+  std::stringstream iss (str);
+  int64x64_t expect;
+  iss >> expect;
+
+  std::stringstream oss;
+  oss << std::scientific << std::setprecision (21) << expect;
   int64x64_t value;
-  iss >> value;
-  std::ostringstream oss;
-  oss << value;
-  NS_TEST_EXPECT_MSG_EQ (oss.str (), str, "Converted string does not match expected string");
+  oss >> value;
+
+  bool pass = Abs (value - expect) <= int64x64_t (0, tolerance + 1);
+
+  std::string input  = "\"" + str + "\"";
+  std::string output = "\"" + oss.str () + "\"";
+
+  if (pass)
+    {
+      std::cout << GetParent ()->GetName () << " InputOutput: "
+		<< (pass ? "pass " : "FAIL ")
+		<< " in:  " << std::left << std::setw (28) << input
+		<< " out: " << std::left << std::setw (28) << output
+		<< std::right
+		<< std::endl;
+    }
+  else
+    {
+      std::cout << GetParent ()->GetName () << " InputOutput: "
+		<< (pass ? "pass " : "FAIL ")
+		<< " in:  " << std::left << std::setw (28) << input
+		<< std::right << Printer (expect)
+		<< std::endl;
+      std::cout << GetParent ()->GetName ()
+		<< std::setw (19) << " "
+		<< " out: " << std::left << std::setw (28) << output
+		<< std::right << Printer (value)
+		<< std::endl;
+    }      
+
+  NS_TEST_EXPECT_MSG_EQ_TOL (value, expect, int64x64_t (0, tolerance),
+			     "Converted string does not match expected string");
 }
+
 void
 Int64x64InputOutputTestCase::DoRun (void)
 {
-  CheckString ("+1.0");
-  CheckString ("-1.0");
-  CheckString ("+20.0");
-  CheckString ("+1.08446744073709551615");
-  CheckString ("-1.08446744073709551615");
-  CheckString ("+1.18446744073709551615");
-  CheckString ("-1.18446744073709551615");
+  std::cout << std::endl;
+  std::cout << GetParent ()->GetName () << " InputOutput: " << GetName ()
+	    << std::endl;
+
+  int64_t tolerance = 0;
+  if (int64x64_t::implementation == int64x64_t::ld_impl)
+    {
+      // Darwin 12.5.0 (Mac 10.8.5) g++ 4.2.1
+      tolerance = 1;
+    }
+  
+  Check ("+1.000000000000000000000");
+  Check ("+20.000000000000000000000");
+  Check ("+0.000000000000000000000", tolerance);
+  Check ("-1.000000000000000000000", tolerance);
+  Check ("+1.084467440737095516158", tolerance);
+  Check ("-2.084467440737095516158", tolerance);
+  Check ("+3.184467440737095516179", tolerance);
+  Check ("-4.184467440737095516179", tolerance);
 }
 
-#define CHECK_EXPECTED(a,b) \
-  NS_TEST_ASSERT_MSG_EQ ((a).GetHigh (),b,"Arithmetic failure: " << ((a).GetHigh ()) << "!=" << (b))
-
-#define V(v) \
-  int64x64_t (v)
 
 class Int64x64ArithmeticTestCase : public TestCase
 {
 public:
   Int64x64ArithmeticTestCase ();
   virtual void DoRun (void);
+  void Check (const int        test,
+	      const int64x64_t value, const int64x64_t expect);
+  void Check (const int        test,
+	      const int64x64_t value, const int64x64_t expect,
+	      const int64x64_t tolerance);
 };
 
 Int64x64ArithmeticTestCase::Int64x64ArithmeticTestCase ()
-  : TestCase ("Check basic arithmetic operations")
+  : TestCase ("Basic arithmetic operations")
 {
 }
 void
-Int64x64ArithmeticTestCase::DoRun (void)
+Int64x64ArithmeticTestCase::Check (const int test,
+				   const int64x64_t value,
+				   const int64x64_t expect)
 {
-  int64x64_t a, b;
+  int64x64_t zero (0,0);
+  Check (test, value, expect, zero);
+}
+void
+Int64x64ArithmeticTestCase::Check (const int test,
+				   const int64x64_t value,
+				   const int64x64_t expect,
+				   const int64x64_t tolerance)
+{
+  bool pass = Abs (value - expect) <= tolerance;
+  
+  std::cout << GetParent ()->GetName () << " Arithmetic: "
+	    << (pass ? "pass " : "FAIL ")
+	    << test << ": " << value << " == " << expect
+	    << " (+/- " << tolerance << ")"
+	    << std::endl;
+  
+  NS_TEST_ASSERT_MSG_EQ_TOL ( value, expect, tolerance,
+			      "Arithmetic failure in test case " << test);
+}
 
-  CHECK_EXPECTED (V (1) - V (1), 0);
-  CHECK_EXPECTED (V (1) - V (2), -1);
-  CHECK_EXPECTED (V (1) - V (3), -2);
-  CHECK_EXPECTED (V (1) - V (-1), 2);
-  CHECK_EXPECTED (V (1) - V (-2), 3);
-  CHECK_EXPECTED (V (-3) - V (-4), 1);
-  CHECK_EXPECTED (V (-2) - V (3), -5);
-  CHECK_EXPECTED (V (1) + V (2), 3);
-  CHECK_EXPECTED (V (1) + V (-3), -2);
-  CHECK_EXPECTED (V (0) + V (0), 0);
-  CHECK_EXPECTED (V (0) * V (0), 0);
-  CHECK_EXPECTED (V (0) * V (1), 0);
-  CHECK_EXPECTED (V (0) * V (-1), 0);
-  CHECK_EXPECTED (V (1) * V (0), 0);
-  CHECK_EXPECTED (V (1) * V (1), 1);
-  CHECK_EXPECTED (V (1) * V (-1), -1);
-  CHECK_EXPECTED (V (-1) * V (-1), 1);
-  CHECK_EXPECTED (V (0) * V (1), 0);
-  CHECK_EXPECTED (V (0) * V (-1), 0);
-  CHECK_EXPECTED (V (-1) * V (1), -1);
-
-
-  CHECK_EXPECTED (V (2) * V (3) / V (3), 2);
-
-  // Below, the division loses precision because 2/3 is not
-  // representable exactly in 64.64 integers. So, we got
-  // something super close but the final rounding kills us.
-  a = V (2);
-  b = V (3);
-  a /= b;
-  a *= b;
-  CHECK_EXPECTED (V (2) / V (3) * V (3), 1);
+void
+Int64x64ArithmeticTestCase::DoRun (void)
+{
+  const int64x64_t tol1 (0, 1);
+  const int64x64_t zero (0, 0);
+  const int64x64_t one  (1, 0);
+  const int64x64_t two  (2, 0);
+  const int64x64_t thre (3, 0);
+
+  std::cout << std::endl;
+  std::cout << GetParent ()->GetName () << " Arithmetic: " << GetName ()
+	    << std::endl;
+  
+  Check ( 0,   zero  -   zero ,   zero  );
+  Check ( 1,   zero  -   one ,   -one   );
+  Check ( 2,   one   -   one ,    zero  );
+  Check ( 3,   one   -   two ,   -one   );
+  Check ( 4,   one   - (-one ),   two   );
+  Check ( 5, (-one ) - (-two ),   one   );
+  Check ( 6, (-one ) -   two ,   -thre  );
+  
+  Check ( 7,   zero  +   zero ,   zero  );
+  Check ( 8,   zero  +   one ,    one   );
+  Check ( 9,   one   +   one ,    two   );
+  Check (10,   one   +   two ,    thre  );
+  Check (11,   one   + (-one ),   zero  );
+  Check (12, (-one ) + (-two ),  -thre  );
+  Check (13, (-one ) +   two ,    one   );
+  
+  Check (14,   zero  *   zero ,   zero  );
+  Check (15,   zero  *   one ,    zero  );
+  Check (16,   zero  * (-one ),   zero  );
+  Check (17,   one   *   one ,    one   );
+  Check (18,   one   * (-one ),  -one   );
+  Check (19, (-one ) * (-one ),   one   );
+  
+  Check (20,  (two  * thre ) / thre , two  );
+
+  const int64x64_t frac  = int64x64_t (0, 0xc000000000000000ULL);  // 0.75
+  const int64x64_t fplf2 = frac + frac * frac;  // 1.3125
+  
+  Check (21,   frac,              0.75);
+  Check (22,   fplf2,             1.3125);
+  
+  const int64x64_t zerof = zero + frac;
+  const int64x64_t onef  = one  + frac;
+  const int64x64_t twof  = two  + frac;
+  const int64x64_t thref = thre + frac;
+
+  Check (23,   zerof,             frac);
+  
+  
+  Check (24,   zerof -   zerof,   zero );
+  Check (25,   zerof -   onef,   -one  );
+  Check (26,   onef  -   onef,    zero );
+  Check (27,   onef  -   twof,   -one  );
+  Check (28,   onef  - (-onef),   twof  + frac  );
+  Check (29 , (-onef) - (-twof),   one  );
+  Check (30 , (-onef) -   twof,   -thref - frac  );
+  
+  Check (31,   zerof +   zerof,   zerof + frac  );
+  Check (32,   zerof +   onef,    onef  + frac  );
+  Check (33,   onef  +   onef,    twof  + frac  );
+  Check (34,   onef  +   twof,    thref + frac  );
+  Check (35,   onef  + (-onef),   zero  );
+  Check (36 , (-onef) + (-twof),  -thref - frac  );
+  Check (37, (-onef) +   twof,    one   );
+  
+  Check (38,   zerof *   zerof,   frac  * frac  );
+  Check (39 ,   zero  *   onef,    zero  );
+  Check (40 ,   zerof *   one,     frac  );
+  
+  Check (41,   zerof *   onef,    fplf2 );
+  Check (42,   zerof * (-onef),  -fplf2 );
+  Check (43,   onef  *   onef,    onef  + fplf2 );
+  Check (44,   onef  * (-onef),  -onef  - fplf2 );
+  Check (45, (-onef) * (-onef),   onef  + fplf2 );
+  
+  
+  // Multiplication followed by division is exact:
+  Check (46, (two  * thre ) / thre , two  );
+  Check (47, (twof * thref) / thref, twof );
+
+  // Division followed by multiplication loses a bit or two:
+  Check (48, (two  / thre)  * thre,  two , 2 * tol1 );
+  Check (49, (twof / thref) * thref, twof, 3 * tol1 );
 
   // The example below shows that we really do not lose
   // much precision internally: it is almost always the
   // final conversion which loses precision.
-  CHECK_EXPECTED (V (2000000000) / V (3) * V (3), 1999999999);
+  Check (50, (int64x64_t (2000000000) / int64x64_t (3)) * int64x64_t (3),
+	      int64x64_t (1999999999, 0xfffffffffffffffeULL));
+
+  // Check special values
+  Check (51,  int64x64_t (0, 0x159fa87f8aeaad21ULL) * 10,
+	           int64x64_t (0, 0xd83c94fb6d2ac34aULL));
+  
 }
 
+
+
 /**
  * See \bugid{455}
  */
@@ -178,6 +456,8 @@
 public:
   Int64x64Bug455TestCase ();
   virtual void DoRun (void);
+  void Check (const double result, const double expect,
+	      const std::string & msg);
 };
 
 Int64x64Bug455TestCase::Int64x64Bug455TestCase ()
@@ -185,25 +465,51 @@
 {
 }
 void
+Int64x64Bug455TestCase::Check (const double result, const double expect,
+			       const std::string & msg)
+{
+  bool pass = result == expect;
+  
+  std::cout << GetParent ()->GetName () << " Bug 455: "
+	    << (pass ? "pass " : "FAIL ")
+	    << "res: "  << result
+	    << " exp: " << expect
+	    << ": " << msg
+	    << std::endl;
+  
+  NS_TEST_ASSERT_MSG_EQ (result, expect, msg);
+}
+
+void
 Int64x64Bug455TestCase::DoRun (void)
 {
+  std::cout << std::endl;
+  std::cout << GetParent ()->GetName () << " Bug 455: " << GetName ()
+	    << std::endl;
+  
   int64x64_t a = int64x64_t (0.1);
   a /= int64x64_t (1.25);
-  NS_TEST_ASSERT_MSG_EQ (a.GetDouble (), 0.08, "The original testcase");
+  Check (a.GetDouble (), 0.08, "The original testcase");
+  
   a = int64x64_t (0.5);
   a *= int64x64_t (5);
-  NS_TEST_ASSERT_MSG_EQ (a.GetDouble (), 2.5, "Simple test for multiplication");
+  Check (a.GetDouble (), 2.5, "Simple test for multiplication");
+  
   a = int64x64_t (-0.5);
   a *= int64x64_t (5);
-  NS_TEST_ASSERT_MSG_EQ (a.GetDouble (), -2.5, "Test sign, first operation negative");
+  Check (a.GetDouble (), -2.5, "Test sign, first operation negative");
+  
   a = int64x64_t (-0.5);
   a *=int64x64_t (-5);
-  NS_TEST_ASSERT_MSG_EQ (a.GetDouble (), 2.5, "both operands negative");
+  Check (a.GetDouble (), 2.5, "both operands negative");
+  
   a = int64x64_t (0.5);
   a *= int64x64_t (-5);
-  NS_TEST_ASSERT_MSG_EQ (a.GetDouble (), -2.5, "only second operand negative");
+  Check (a.GetDouble (), -2.5, "only second operand negative");
 }
 
+
+
 /**
  * See \bugid{863}
  */
@@ -212,6 +518,8 @@
 public:
   Int64x64Bug863TestCase ();
   virtual void DoRun (void);
+  void Check (const double result, const double expect,
+	      const std::string & msg);
 };
 
 Int64x64Bug863TestCase::Int64x64Bug863TestCase ()
@@ -219,125 +527,686 @@
 {
 }
 void
+Int64x64Bug863TestCase::Check (const double result, const double expect,
+			       const std::string & msg)
+{
+  bool pass = result == expect;
+  
+  std::cout << GetParent ()->GetName () << " Bug 863: "
+	    << (pass ? "pass " : "FAIL ")
+	    << "res: "  << result
+	    << " exp: " << expect
+	    << ": " << msg
+	    << std::endl;
+  
+  NS_TEST_ASSERT_MSG_EQ (result, expect, msg);
+}
+
+void
 Int64x64Bug863TestCase::DoRun (void)
 {
+  std::cout << std::endl;
+  std::cout << GetParent ()->GetName () << " Bug 863: " << GetName ()
+	    << std::endl;
+  
   int64x64_t a = int64x64_t (0.9);
   a /= int64x64_t (1);
-  NS_TEST_ASSERT_MSG_EQ (a.GetDouble (), 0.9, "The original testcase");
+  Check (a.GetDouble (), 0.9, "The original testcase");
+  
   a = int64x64_t (0.5);
   a /= int64x64_t (0.5);
-  NS_TEST_ASSERT_MSG_EQ (a.GetDouble (), 1.0, "Simple test for division");
+  Check (a.GetDouble (), 1.0, "Simple test for division");
+  
   a = int64x64_t (-0.5);
-  NS_TEST_ASSERT_MSG_EQ (a.GetDouble (), -0.5, "Check that we actually convert doubles correctly");
+  Check (a.GetDouble (), -0.5, "Check that we actually convert doubles correctly");
+  
   a /= int64x64_t (0.5);
-  NS_TEST_ASSERT_MSG_EQ (a.GetDouble (), -1.0, "first argument negative");
+  Check (a.GetDouble (), -1.0, "first argument negative");
+  
   a = int64x64_t (0.5);
   a /= int64x64_t (-0.5);
-  NS_TEST_ASSERT_MSG_EQ (a.GetDouble (), -1.0, "second argument negative");
+  Check (a.GetDouble (), -1.0, "second argument negative");
+  
   a = int64x64_t (-0.5);
   a /= int64x64_t (-0.5);
-  NS_TEST_ASSERT_MSG_EQ (a.GetDouble (), 1.0, "both arguments negative");
+  Check (a.GetDouble (), 1.0, "both arguments negative");
 }
 
+
+/**
+ * See \bugid{1786}
+ */
+class Int64x64Bug1786TestCase : public TestCase
+{
+public:
+  Int64x64Bug1786TestCase ();
+  virtual void DoRun (void);
+  void Check (const uint64_t low, const std::string & value,
+	      const int64_t tolerance = 0);
+};
+
+Int64x64Bug1786TestCase::Int64x64Bug1786TestCase ()
+  : TestCase ("Test case for bug 1786")
+{
+}
+void
+Int64x64Bug1786TestCase::Check (const uint64_t low,
+				const std::string & str,
+				const int64_t tolerance /* = 0 */)
+{
+  int64x64_t value (0, low);
+  std::ostringstream oss;
+  oss << std::scientific << std::setprecision (22) << value;
+
+  if (tolerance == 0)
+    {
+      bool pass = oss.str () == str;
+  
+      std::cout << GetParent ()->GetName () << " Bug 1786: "
+		<< (pass ? "pass " : "FAIL ")
+		<< "    0x" << std::hex << std::setw (16) << low << std::dec
+		<< " = "    << oss.str ();
+      if (!pass)
+	{
+	  std::cout << ", expected " << str;
+	}
+      std::cout << std::endl;
+
+      NS_TEST_EXPECT_MSG_EQ (oss.str (), str,
+			     "Fraction string not correct");
+    }
+  else
+    {
+      // No obvious way to implement a tolerance on the strings
+      
+      std::cout << GetParent ()->GetName () << " Bug 1786: "
+		<< "skip "
+		<< "    0x" << std::hex << std::setw (16) << low << std::dec
+		<< " = "    << oss.str ()
+		<< ", expected " << str
+		<< std::endl;
+
+    }
+}
+void
+Int64x64Bug1786TestCase::DoRun (void)
+{
+  std::cout << std::endl;
+  std::cout << GetParent ()->GetName () << " But 1786: " << GetName ()
+	    << std::endl;
+
+  int64_t tolerance = 0;
+  if (int64x64_t::implementation == int64x64_t::ld_impl)
+    {
+      // Darwin 12.5.0 (Mac 10.8.5) g++ 4.2.1
+      tolerance = 1;
+    }
+
+  // Some of these values differ from the DoubleTestCase
+  // by one count in the last place
+  // because operator<< truncates the last output digit,
+  // instead of rounding.
+  Check (                 1ULL, "+0.0000000000000000000542");
+  Check (                 2ULL, "+0.0000000000000000001084");
+  Check (                 3ULL, "+0.0000000000000000001626");
+  Check (                 4ULL, "+0.0000000000000000002168");
+  Check (                 5ULL, "+0.0000000000000000002710");
+  Check (                 6ULL, "+0.0000000000000000003253");
+  Check (                 7ULL, "+0.0000000000000000003795");
+  Check (                 8ULL, "+0.0000000000000000004337");
+  Check (                 9ULL, "+0.0000000000000000004879");
+  Check (               0xAULL, "+0.0000000000000000005421");
+  Check (               0xFULL, "+0.0000000000000000008132");
+  Check (              0xF0ULL, "+0.0000000000000000130104");
+  Check (             0xF00ULL, "+0.0000000000000002081668");
+  Check (            0xF000ULL, "+0.0000000000000033306691");
+  Check (           0xF0000ULL, "+0.0000000000000532907052");
+  Check (          0xF00000ULL, "+0.0000000000008526512829");
+  Check (         0xF000000ULL, "+0.0000000000136424205266");
+  Check (        0xF0000000ULL, "+0.0000000002182787284255");
+  Check (       0xF00000000ULL, "+0.0000000034924596548080");
+  Check (      0xF000000000ULL, "+0.0000000558793544769287");
+  Check (     0xF0000000000ULL, "+0.0000008940696716308594");
+  Check (    0xF00000000000ULL, "+0.0000143051147460937500");
+  Check (   0xF000000000000ULL, "+0.0002288818359375000000");
+  Check (  0xF0000000000000ULL, "+0.0036621093750000000000");
+  Check ( 0xF00000000000000ULL, "+0.0585937500000000000000");
+  std::cout << std::endl;
+  Check (0x7FFFFFFFFFFFFFFDULL, "+0.4999999999999999998374", tolerance);
+  Check (0x7FFFFFFFFFFFFFFEULL, "+0.4999999999999999998916", tolerance);
+  Check (0x7FFFFFFFFFFFFFFFULL, "+0.4999999999999999999458", tolerance);
+  Check (0x8000000000000000ULL, "+0.5000000000000000000000");
+  Check (0x8000000000000001ULL, "+0.5000000000000000000542", tolerance);
+  Check (0x8000000000000002ULL, "+0.5000000000000000001084", tolerance);
+  Check (0x8000000000000003ULL, "+0.5000000000000000001626", tolerance);
+  std::cout << std::endl;
+  Check (0xF000000000000000ULL, "+0.9375000000000000000000");
+  Check (0xFF00000000000000ULL, "+0.9960937500000000000000");
+  Check (0xFFF0000000000000ULL, "+0.9997558593750000000000");
+  Check (0xFFFF000000000000ULL, "+0.9999847412109375000000");
+  Check (0xFFFFF00000000000ULL, "+0.9999990463256835937500");
+  Check (0xFFFFFF0000000000ULL, "+0.9999999403953552246094");
+  Check (0xFFFFFFF000000000ULL, "+0.9999999962747097015381");
+  Check (0xFFFFFFFF00000000ULL, "+0.9999999997671693563461");
+  Check (0xFFFFFFFFF0000000ULL, "+0.9999999999854480847716");
+  Check (0xFFFFFFFFFF000000ULL, "+0.9999999999990905052982");
+  Check (0xFFFFFFFFFFF00000ULL, "+0.9999999999999431565811");
+  Check (0xFFFFFFFFFFFF0000ULL, "+0.9999999999999964472863");
+  Check (0xFFFFFFFFFFFFF000ULL, "+0.9999999999999997779554");
+  Check (0xFFFFFFFFFFFFFF00ULL, "+0.9999999999999999861222");
+  Check (0xFFFFFFFFFFFFFFF0ULL, "+0.9999999999999999991326");
+  Check (0xFFFFFFFFFFFFFFF5ULL, "+0.9999999999999999994037", tolerance);
+  Check (0xFFFFFFFFFFFFFFF6ULL, "+0.9999999999999999994579", tolerance);
+  Check (0xFFFFFFFFFFFFFFF7ULL, "+0.9999999999999999995121", tolerance);
+  Check (0xFFFFFFFFFFFFFFF8ULL, "+0.9999999999999999995663", tolerance);
+  Check (0xFFFFFFFFFFFFFFF9ULL, "+0.9999999999999999996205", tolerance);
+  Check (0xFFFFFFFFFFFFFFFAULL, "+0.9999999999999999996747", tolerance);
+  Check (0xFFFFFFFFFFFFFFFBULL, "+0.9999999999999999997289", tolerance);
+  Check (0xFFFFFFFFFFFFFFFCULL, "+0.9999999999999999997832", tolerance);
+  Check (0xFFFFFFFFFFFFFFFDULL, "+0.9999999999999999998374", tolerance);
+  Check (0xFFFFFFFFFFFFFFFEULL, "+0.9999999999999999998916", tolerance);
+  Check (0xFFFFFFFFFFFFFFFFULL, "+0.9999999999999999999458", tolerance);
+}
+
+
 class Int64x64CompareTestCase : public TestCase
 {
 public:
   Int64x64CompareTestCase ();
   virtual void DoRun (void);
+
+  void Check (const bool result, const bool expect,
+	      const std::string & msg);
 };
 Int64x64CompareTestCase::Int64x64CompareTestCase ()
-  : TestCase ("Check basic compare operations")
+  : TestCase ("Basic compare operations")
 {
 }
 void
-Int64x64CompareTestCase::DoRun (void)
+Int64x64CompareTestCase::Check (const bool result, const bool expect,
+				const std::string & msg)
 {
+  bool pass = result == expect;
+  
+  std::cout << GetParent ()->GetName () << " Compare: "
+	    << (pass ? "pass " : "FAIL ")
+	    << msg
+	    << std::endl;
+  
+  NS_TEST_ASSERT_MSG_EQ (result, expect, msg);
+}
 
-  NS_TEST_ASSERT_MSG_EQ ((V (-1) < V (1)), true, "a is smaller than b");
-  NS_TEST_ASSERT_MSG_EQ ((V (-1) > V (-2)), true, "a is bigger than b");
-  NS_TEST_ASSERT_MSG_EQ ((V (-1) == V (-1)), true, "a is equal to b");
-
-  NS_TEST_ASSERT_MSG_EQ ((V (1) > V (-1)), true, "a is bigger than b");
-  NS_TEST_ASSERT_MSG_EQ ((V (1) < V (2)), true, "a is smaller than b");
+void
+Int64x64CompareTestCase::DoRun (void)
+{
+  std::cout << std::endl;
+  std::cout << GetParent ()->GetName () << " Compare: " << GetName ()
+	    << std::endl;
+
+  const int64x64_t zero ( 0, 0);
+  const int64x64_t one  ( 1, 0);
+  const int64x64_t two  ( 2, 0);
+  const int64x64_t mone (-1, 0);
+  const int64x64_t mtwo (-2, 0);
+  const int64x64_t frac  = int64x64_t (0, 0xc000000000000000ULL);  // 0.75
+  const int64x64_t zerof = zero + frac;
+  const int64x64_t onef  = one  + frac;
+  const int64x64_t monef = mone - frac;
+  const int64x64_t mtwof = mtwo - frac;
+  
+  Check ( zerof    == zerof, true,  "equality, zero");
+  Check ( onef     == onef,  true,  "equality, positive");
+  Check ( mtwof    == mtwof, true,  "equality, negative");
+  Check ( zero     == one,   false, "equality false, zero");
+  Check ( one      == two,   false, "equality false, unsigned");
+  Check ( one      == mone,  false, "equality false, signed");
+  Check ( onef     == one,   false, "equality false, fraction");
+  std::cout << std::endl;
+
+  Check ( zerof    != zerof, false, "inequality, zero");
+  Check ( onef     != onef,  false, "inequality, positive");
+  Check ( mtwof    != mtwof, false, "inequality, negative");
+  Check ( zero     != one,   true,  "inequality true, zero");
+  Check ( one      != two,   true,  "inequality true, unsigned");
+  Check ( one      != mone,  true,  "inequality true, signed");
+  Check ( onef     != one,   true,  "inequality true, fraction");
+  std::cout << std::endl;
+
+  Check ( zerof    <  onef,  true,  "less, zerof");
+  Check ( zero     <  zerof, true,  "less, zero");
+  Check ( one      <  onef,  true,  "less, positive");
+  Check ( monef    <  mone,  true,  "less, negative");
+  Check ( onef     <  one,   false, "less, false, positive");
+  Check ( mtwo     <  mtwof, false, "less, false, negative");
+  std::cout << std::endl;
+
+  Check ( zerof    <= zerof, true,  "less equal, equal, zerof");
+  Check ( zero     <= zerof, true,  "less equal, less, zero");
+  Check ( onef     <= onef,  true,  "less equal, equal, positive");
+  Check ( monef    <= mone,  true,  "less equal, less, negative");
+  Check ( onef     <= one,   false, "less equal, false, positive");
+  Check ( mtwo     <= mtwof, false, "less equal, false, negative");
+  std::cout << std::endl;
+
+  Check ( onef     >  zerof, true,  "greater, zerof");
+  Check ( zerof    >  zero,  true,  "greater, zero");
+  Check ( onef     >  one,   true,  "greater, positive");
+  Check ( mone     >  monef, true,  "greater, negative");
+  Check ( one      >  onef,  false, "greater, false, positive");
+  Check ( mtwof    >  mtwo,  false, "greater, false, negative");
+  std::cout << std::endl;
+
+  Check ( zerof    >= zerof, true,  "greater equal, equal, zerof");
+  Check ( zerof    >= zero,  true,  "greater equal, greater, zero");
+  Check ( onef     >= onef,  true,  "greater equal, equal, positive");
+  Check ( mone     >= monef, true,  "greater equal, greater, negative");
+  Check ( one      >= onef,  false, "greater equal, false, positive");
+  Check ( mtwof    >= mtwo,  false, "greater equal, false, negative");
+  std::cout << std::endl;
+
+  Check ( zero     == false, true,  "zero   == false");
+  Check ( one      == true,  true,  "one    == true");
+  Check ( zerof    != false, true,  "zerof  != false");
+  Check ( (!zero)  == true,  true,  "!zero  == true");
+  Check ( (!zerof) == false, true,  "!zerof == false");
+  Check ( (!one)   == false, true,  "!one   == false");
+  Check ( (+onef)  == onef,  true, "unary positive");
+  Check ( (-onef)  == monef, true, "unary negative");
 }
 
+
 class Int64x64InvertTestCase : public TestCase
 {
 public:
   Int64x64InvertTestCase ();
   virtual void DoRun (void);
+  void Check (const int64_t factor);
+  void CheckCase (const uint64_t factor,
+		  const int64x64_t result, const int64x64_t expect,
+		  const std::string & msg,
+		  const double tolerance = 0);
 };
 
 Int64x64InvertTestCase::Int64x64InvertTestCase ()
-  : TestCase ("Test case for invertion")
+  : TestCase ("Invert and MulByInvert")
 {
 }
+void
+Int64x64InvertTestCase::CheckCase (const uint64_t factor,
+				   const int64x64_t result,
+				   const int64x64_t expect,
+				   const std::string & msg,
+				   const double tolerance /* = 0 */)
+{
+  bool pass = Abs (result - expect) <= tolerance;
+  
+  std::cout << GetParent ()->GetName () << " Invert: ";
+
+  if (pass)
+    {
+      std::cout << "pass:  " << factor << ": ";
+
+    }
+  else
+    {
+      std::cout << "FAIL:  " << factor << ": "
+		<< "(res: " << result
+		<< " exp: " << expect
+		<< " tol: " << tolerance << ")  ";
+    }
+  std::cout << msg 
+	    << std::endl;
+  
+  NS_TEST_ASSERT_MSG_EQ_TOL (result, expect, int64x64_t(tolerance), msg);
+}
+
+void
+Int64x64InvertTestCase::Check (const int64_t factor)
+{
+  const int64x64_t one (1, 0);
+  const int64x64_t factorI = one / int64x64_t (factor);
+  
+  const int64x64_t a = int64x64_t::Invert (factor);
+  int64x64_t b = int64x64_t (factor);
+
+  double tolerance = 0;
+  if (int64x64_t::implementation == int64x64_t::ld_impl)
+    {
+      // Darwin 12.5.0 (Mac 10.8.5) g++ 4.2.1
+      tolerance = 0.000000000000000001L;
+    }
+  
+  b.MulByInvert (a);
+  CheckCase (factor, b, one, "x * x^-1 == 1", tolerance);
+  
+  int64x64_t c = int64x64_t (1);
+  c.MulByInvert (a);
+  CheckCase (factor, c, factorI, "1 * x^-1 == 1 / x");
+  
+  int64x64_t d = int64x64_t (1);
+  d /= (int64x64_t (factor));
+  CheckCase (factor, d, c, "1/x == x^-1");
+  
+  int64x64_t e = int64x64_t (-factor);
+  e.MulByInvert (a);
+  CheckCase (factor, e, -one, "-x * x^-1 == -1", tolerance);
+}
 
 void
 Int64x64InvertTestCase::DoRun (void)
 {
-#define TEST(factor)                                                    \
-  do {                                                                  \
-      int64x64_t a;                                                       \
-      a = int64x64_t::Invert (factor);                                    \
-      int64x64_t b = V (factor);                                          \
-      b.MulByInvert (a);                                                  \
-      NS_TEST_ASSERT_MSG_EQ (b.GetHigh (), 1,                             \
-                             "x * 1/x should be 1 for x=" << factor);     \
-      int64x64_t c = V (1);                                               \
-      c.MulByInvert (a);                                                  \
-      NS_TEST_ASSERT_MSG_EQ (c.GetHigh (), 0,                             \
-                             "1 * 1/x should be 0 for x=" << factor);     \
-      int64x64_t d = V (1);                                               \
-      d /= (V (factor));                                                  \
-      NS_TEST_ASSERT_MSG_EQ (d.GetDouble (), c.GetDouble (),              \
-                             "1 * 1/x should be equal to 1/x for x=" << factor); \
-      int64x64_t e = V (-factor);                                 \
-      e.MulByInvert (a);                                                  \
-      NS_TEST_ASSERT_MSG_EQ (e.GetHigh (), -1,                            \
-                             "-x * 1/x should be -1 for x=" << factor);   \
-    } \
-  while(false)
-  TEST (2);
-  TEST (3);
-  TEST (4);
-  TEST (5);
-  TEST (6);
-  TEST (10);
-  TEST (99);
-  TEST (100);
-  TEST (1000);
-  TEST (10000);
-  TEST (100000);
-  TEST (100000);
-  TEST (1000000);
-  TEST (10000000);
-  TEST (100000000);
-  TEST (1000000000);
-  TEST (10000000000LL);
-  TEST (100000000000LL);
-  TEST (1000000000000LL);
-  TEST (10000000000000LL);
-  TEST (100000000000000LL);
-  TEST (1000000000000000LL);
-#undef TEST
+  std::cout << std::endl;
+  std::cout << GetParent ()->GetName () << " Invert: " << GetName ()
+	    << std::endl;
+  
+  Check (2);
+  Check (3);
+  Check (4);
+  Check (5);
+  Check (6);
+  Check (10);
+  Check (99);
+  Check (100);
+  Check (1000);
+  Check (10000);
+  Check (100000);
+  Check (100000);
+  Check (1000000);
+  Check (10000000);
+  Check (100000000);
+  Check (1000000000);
+  Check (10000000000LL);
+  Check (100000000000LL);
+  Check (1000000000000LL);
+  Check (10000000000000LL);
+  Check (100000000000000LL);
+  Check (1000000000000000LL);
+}
+
+
+class Int64x64DoubleTestCase : public TestCase
+{
+public:
+  Int64x64DoubleTestCase ();
+  virtual void DoRun (void);
+  void Check (const int64_t intPart);
+  void Check (const long double value,
+	      const int64_t intPart,
+	      const uint64_t lo);
+private:
+  long double m_last;
+  int64x64_t  m_deltaMax;
+  int         m_deltaCount;
+};
+
+Int64x64DoubleTestCase::Int64x64DoubleTestCase ()
+  : TestCase ("Construct from floating point.")
+{
+}
+
+void
+Int64x64DoubleTestCase::Check (const long double value,
+			       const int64_t intPart,
+			       const uint64_t lo)
+{
+  // Construct the expected value
+  int64x64_t expect = int64x64_t (0, lo);
+  expect += intPart;
+
+  // Actual value of conversion from double
+  const int64x64_t result = int64x64_t (value);
+
+  // Make tolerance depend on magnitude of value
+  long double epsilon = std::numeric_limits<long double>::epsilon ();
+  long double margin = 0;
+  if (int64x64_t::implementation == int64x64_t::ld_impl)
+    {
+      // Darwin 12.5.0 (Mac 10.8.5) g++ 4.2.1
+      margin = 1.0;
+    }
+  if (RUNNING_ON_VALGRIND)
+    {
+      // Valgrind uses 64-bit doubles for long doubles
+      // See ns-3 bug 1882
+      // Need non-zero margin to ensure final tolerance is non-zero
+      margin = 1.0;
+      epsilon = std::numeric_limits<double>::epsilon ();
+    }
+
+  const int64x64_t tolerance = (margin + std::fabs (value)) * epsilon;
+  
+  const int64x64_t delta = Abs (result - expect);
+  const bool skip = value == m_last;
+  const bool pass = delta <= tolerance;
+  
+  // Save stream format flags
+  std::ios_base::fmtflags ff = std::cout.flags ();
+  std::cout << std::fixed << std::setprecision (22);
+  
+  std::cout << GetParent ()->GetName () << " Double: "
+	    << (skip ? "skip " : (pass ? "pass " : "FAIL "))
+	    << std::showpos << value << " == " 
+	    << Printer (result)
+	    << std::endl;
+  
+  // Log non-zero delta
+  if ( delta > int64x64_t() )
+    {
+      std::cout << GetParent ()->GetName ()
+		<< std::left  << std::setw (43) << "         expected"
+		<< std::right << Printer (expect)
+		<< std::endl;
+
+      if (delta == tolerance)
+	{
+	  std::cout << GetParent ()->GetName ()
+		    << std::left  << std::setw (43) << "         delta = tolerance"
+		    << std::right << Printer (delta)
+		    << std::endl;
+	}
+      else
+	{
+	  std::cout << GetParent ()->GetName ()
+		    << std::left  << std::setw (43) << "         delta"
+		    << std::right << Printer (delta)
+		    << std::endl;
+	  std::cout << GetParent ()->GetName ()
+		    << std::left  << std::setw (43) << "         +/-"
+		    << std::right << Printer (tolerance)
+		    << std::endl;
+	}
+      
+      ++m_deltaCount;
+      
+      if ( delta > m_deltaMax )
+	{
+	  m_deltaMax = delta;
+	}
+    }
+  
+  NS_TEST_ASSERT_MSG_EQ_TOL (result, expect, tolerance,
+			     "int64x64_t (long double) failed");
+  m_last = value;
+  std::cout.flags (ff);
+
+}
+
+void
+Int64x64DoubleTestCase::Check (const int64_t intPart)
+{
+  std::cout << std::endl;
+  std::cout << GetParent ()->GetName () << " Double: "
+	    << "integer: " << intPart
+	    << std::endl;
+  m_last = intPart;
+  m_deltaCount = 0;
+
+  // Nudging the integer part eliminates deltas around 0
+  long double v = intPart;
+  
+  Check (v +0.0000000000000000000542L, intPart,                0x1ULL);
+  Check (v +0.0000000000000000001084L, intPart,                0x2ULL);
+  Check (v +0.0000000000000000001626L, intPart,                0x3ULL);
+  Check (v +0.0000000000000000002168L, intPart,                0x4ULL);
+  Check (v +0.0000000000000000002710L, intPart,                0x5ULL);
+  Check (v +0.0000000000000000003253L, intPart,                0x6ULL);
+  Check (v +0.0000000000000000003795L, intPart,                0x7ULL);
+  Check (v +0.0000000000000000004337L, intPart,                0x8ULL);
+  Check (v +0.0000000000000000004879L, intPart,                0x9ULL);
+  Check (v +0.0000000000000000005421L, intPart,                0xAULL);
+  Check (v +0.0000000000000000008132L, intPart,                0xFULL);
+  Check (v +0.0000000000000000130104L, intPart,               0xF0ULL);
+  Check (v +0.0000000000000002081668L, intPart,              0xF00ULL);
+  Check (v +0.0000000000000033306691L, intPart,             0xF000ULL);
+  Check (v +0.0000000000000532907052L, intPart,            0xF0000ULL);
+  Check (v +0.0000000000008526512829L, intPart,           0xF00000ULL);
+  Check (v +0.0000000000136424205266L, intPart,          0xF000000ULL);
+  Check (v +0.0000000002182787284255L, intPart,         0xF0000000ULL);
+  Check (v +0.0000000034924596548080L, intPart,        0xF00000000ULL);
+  Check (v +0.0000000558793544769287L, intPart,       0xF000000000ULL);
+  Check (v +0.0000008940696716308594L, intPart,      0xF0000000000ULL);
+  Check (v +0.0000143051147460937500L, intPart,     0xF00000000000ULL);
+  Check (v +0.0002288818359375000000L, intPart,    0xF000000000000ULL);
+  Check (v +0.0036621093750000000000L, intPart,   0xF0000000000000ULL);
+  Check (v +0.0585937500000000000000L, intPart,  0xF00000000000000ULL);
+  std::cout << std::endl;
+  Check (v +0.4999999999999999998374L, intPart, 0x7FFFFFFFFFFFFFFDULL);
+  Check (v +0.4999999999999999998916L, intPart, 0x7FFFFFFFFFFFFFFEULL);
+  Check (v +0.4999999999999999999458L, intPart, 0x7FFFFFFFFFFFFFFFULL);
+  Check (v +0.5000000000000000000000L, intPart, 0x8000000000000000ULL);
+  Check (v +0.5000000000000000000542L, intPart, 0x8000000000000001ULL);
+  Check (v +0.5000000000000000001084L, intPart, 0x8000000000000002ULL);
+  Check (v +0.5000000000000000001626L, intPart, 0x8000000000000003ULL);
+  std::cout << std::endl;
+  Check (v +0.9375000000000000000000L, intPart, 0xF000000000000000ULL);
+  Check (v +0.9960937500000000000000L, intPart, 0xFF00000000000000ULL);
+  Check (v +0.9997558593750000000000L, intPart, 0xFFF0000000000000ULL);
+  Check (v +0.9999847412109375000000L, intPart, 0xFFFF000000000000ULL);
+  Check (v +0.9999990463256835937500L, intPart, 0xFFFFF00000000000ULL);
+  Check (v +0.9999999403953552246094L, intPart, 0xFFFFFF0000000000ULL);
+  Check (v +0.9999999962747097015381L, intPart, 0xFFFFFFF000000000ULL);
+  Check (v +0.9999999997671693563461L, intPart, 0xFFFFFFFF00000000ULL);
+  Check (v +0.9999999999854480847716L, intPart, 0xFFFFFFFFF0000000ULL);
+  Check (v +0.9999999999990905052982L, intPart, 0xFFFFFFFFFF000000ULL);
+  Check (v +0.9999999999999431565811L, intPart, 0xFFFFFFFFFFF00000ULL);
+  Check (v +0.9999999999999964472863L, intPart, 0xFFFFFFFFFFFF0000ULL);
+  Check (v +0.9999999999999997779554L, intPart, 0xFFFFFFFFFFFFF000ULL);
+  Check (v +0.9999999999999999861222L, intPart, 0xFFFFFFFFFFFFFF00ULL);
+  Check (v +0.9999999999999999991326L, intPart, 0xFFFFFFFFFFFFFFF0ULL);
+  Check (v +0.9999999999999999994037L, intPart, 0xFFFFFFFFFFFFFFF5ULL);
+  Check (v +0.9999999999999999994579L, intPart, 0xFFFFFFFFFFFFFFF6ULL);
+  Check (v +0.9999999999999999995121L, intPart, 0xFFFFFFFFFFFFFFF7ULL);
+  Check (v +0.9999999999999999995663L, intPart, 0xFFFFFFFFFFFFFFF8ULL);
+  Check (v +0.9999999999999999996205L, intPart, 0xFFFFFFFFFFFFFFF9ULL);
+  Check (v +0.9999999999999999996747L, intPart, 0xFFFFFFFFFFFFFFFAULL);
+  Check (v +0.9999999999999999997289L, intPart, 0xFFFFFFFFFFFFFFFBULL);
+  Check (v +0.9999999999999999997832L, intPart, 0xFFFFFFFFFFFFFFFCULL);
+  Check (v +0.9999999999999999998374L, intPart, 0xFFFFFFFFFFFFFFFDULL);
+  Check (v +0.9999999999999999998916L, intPart, 0xFFFFFFFFFFFFFFFEULL);
+  Check (v +0.9999999999999999999458L, intPart, 0xFFFFFFFFFFFFFFFFULL);
+
+  std::cout << GetParent ()->GetName () << " Double: "
+	    << "integer: " << intPart
+	    << ": delta count: " << m_deltaCount
+	    << ", max: " << Printer (m_deltaMax)
+	    << std::endl;  
+}
+
+void
+Int64x64DoubleTestCase::DoRun (void)
+{
+  std::cout << std::endl;
+  std::cout << GetParent ()->GetName () << " Double: " << GetName ()
+	    << std::endl;
+
+  // Save stream format flags
+  std::ios_base::fmtflags ff = std::cout.flags ();
+  std::cout << std::scientific << std::setprecision (21);
+
+  m_deltaMax = int64x64_t ();
+
+  std::cout << GetParent ()->GetName () << " Double: "
+	    << std::endl;
+    
+  Check (-2);
+  Check (-1);
+  Check ( 0);
+  Check ( 1);
+  Check ( 2);
+
+  std::cout << GetParent ()->GetName () << " Double: "
+	    << "max delta: " << Printer (m_deltaMax)
+	    << std::endl;
+
+  std::cout.flags (ff);
+}
+
+
+class Int64x64ImplTestCase : public TestCase
+{
+public:
+  Int64x64ImplTestCase ();
+  virtual void DoRun (void);
+};
+
+Int64x64ImplTestCase::Int64x64ImplTestCase ()
+  : TestCase ("Print the implementation")
+{
 }
 
+void
+Int64x64ImplTestCase::DoRun (void)
+{
+  std::cout << std::endl;
+  std::cout << GetParent ()->GetName () << " Impl: " << GetName ()
+	    << std::endl;
+
+  
+  std::cout << "int64x64_t::implementation: ";
+  switch (int64x64_t::implementation)
+    {
+    case (int64x64_t::int128_impl) : std::cout << "int128_impl"; break;
+    case (int64x64_t::cairo_impl)  : std::cout << "cairo_impl";  break;
+    case (int64x64_t::ld_impl)     : std::cout << "ld_impl";     break;
+    default :                        std::cout << "unknown!";    
+    }
+  std::cout << std::endl;
+
+#if defined (INT64X64_USE_CAIRO) && !defined (PYTHON_SCAN)
+  std::cout << "cairo_impl64:  " << cairo_impl64 << std::endl;
+  std::cout << "cairo_impl128: " << cairo_impl128 << std::endl;
+#endif
+
+  if (RUNNING_ON_VALGRIND != 0)
+    {
+      std::cout << "Running with valgrind" << std::endl;
+    }
 
+}
 
-static class Int64x64128TestSuite : public TestSuite
+static class Int64x64TestSuite : public TestSuite
 {
 public:
-  Int64x64128TestSuite ()
+  Int64x64TestSuite ()
     : TestSuite ("int64x64", UNIT)
   {
-    AddTestCase (new Int64x64FracTestCase (), TestCase::QUICK);
+    AddTestCase (new Int64x64ImplTestCase (), TestCase::QUICK);
+    AddTestCase (new Int64x64HiLoTestCase (), TestCase::QUICK);
+    AddTestCase (new Int64x64ArithmeticTestCase (), TestCase::QUICK);
+    AddTestCase (new Int64x64CompareTestCase (), TestCase::QUICK);
     AddTestCase (new Int64x64InputTestCase (), TestCase::QUICK);
     AddTestCase (new Int64x64InputOutputTestCase (), TestCase::QUICK);
-    AddTestCase (new Int64x64ArithmeticTestCase (), TestCase::QUICK);
     AddTestCase (new Int64x64Bug455TestCase (), TestCase::QUICK);
     AddTestCase (new Int64x64Bug863TestCase (), TestCase::QUICK);
-    AddTestCase (new Int64x64CompareTestCase (), TestCase::QUICK);
+    AddTestCase (new Int64x64Bug1786TestCase (), TestCase::QUICK);
     AddTestCase (new Int64x64InvertTestCase (), TestCase::QUICK);
+    AddTestCase (new Int64x64DoubleTestCase (), TestCase::QUICK);
   }
-} g_int64x64TestSuite;
+}  g_int64x64TestSuite;
+
+}  // namespace test
+
+}  // namespace int64x64
+
+}  // namespace ns3
+
diff -Naur ns-3.19/src/core/test/object-test-suite.cc ns-3.20/src/core/test/object-test-suite.cc
--- ns-3.19/src/core/test/object-test-suite.cc	2014-06-17 10:34:00.639635109 -0700
+++ ns-3.20/src/core/test/object-test-suite.cc	2014-06-17 10:33:13.973995344 -0700
@@ -89,18 +89,14 @@
   }
 };
 
-NS_OBJECT_ENSURE_REGISTERED (BaseA)
-  ;
-NS_OBJECT_ENSURE_REGISTERED (DerivedA)
-  ;
-NS_OBJECT_ENSURE_REGISTERED (BaseB)
-  ;
-NS_OBJECT_ENSURE_REGISTERED (DerivedB)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (BaseA);
+NS_OBJECT_ENSURE_REGISTERED (DerivedA);
+NS_OBJECT_ENSURE_REGISTERED (BaseB);
+NS_OBJECT_ENSURE_REGISTERED (DerivedB);
 
 } // namespace anonymous
 
-namespace ns3 {
+using namespace ns3;
 
 // ===========================================================================
 // Test case to make sure that we can make Objects using CreateObject.
@@ -429,5 +425,3 @@
 }
 
 static ObjectTestSuite objectTestSuite;
-
-} // namespace ns3
diff -Naur ns-3.19/src/core/test/ptr-test-suite.cc ns-3.20/src/core/test/ptr-test-suite.cc
--- ns-3.19/src/core/test/ptr-test-suite.cc	2014-06-17 10:34:00.261638028 -0700
+++ ns-3.20/src/core/test/ptr-test-suite.cc	2014-06-17 10:33:13.974995337 -0700
@@ -25,18 +25,18 @@
 
 class PtrTestCase;
 
-class Base
+class PtrTestBase
 {
 public:
-  Base ();
-  virtual ~Base ();
+  PtrTestBase ();
+  virtual ~PtrTestBase ();
   void Ref (void) const;
   void Unref (void) const;
 private:
   mutable uint32_t m_count;
 };
 
-class NoCount : public Base
+class NoCount : public PtrTestBase
 {
 public:
   NoCount (PtrTestCase *test);
@@ -60,20 +60,20 @@
 };
 
 
-Base::Base ()
+PtrTestBase::PtrTestBase ()
   : m_count (1)
 {
 }
-Base::~Base ()
+PtrTestBase::~PtrTestBase ()
 {
 }
 void
-Base::Ref (void) const
+PtrTestBase::Ref (void) const
 {
   m_count++;
 }
 void
-Base::Unref (void) const
+PtrTestBase::Unref (void) const
 {
   m_count--;
   if (m_count == 0)
@@ -256,7 +256,7 @@
   NS_TEST_EXPECT_MSG_EQ (m_nDestroyed, 1, "013");
 
   {
-    Ptr<Base> p0 = Create<NoCount> (this);
+    Ptr<PtrTestBase> p0 = Create<NoCount> (this);
     Ptr<NoCount> p1 = Create<NoCount> (this);
     NS_TEST_EXPECT_MSG_EQ ((p0 == p1), false, "operator == failed");
     NS_TEST_EXPECT_MSG_EQ ((p0 != p1), true, "operator != failed");
diff -Naur ns-3.19/src/core/test/random-variable-stream-test-suite.cc ns-3.20/src/core/test/random-variable-stream-test-suite.cc
--- ns-3.19/src/core/test/random-variable-stream-test-suite.cc	2014-06-17 10:34:00.263638013 -0700
+++ ns-3.20/src/core/test/random-variable-stream-test-suite.cc	2014-06-17 10:33:13.975995329 -0700
@@ -288,7 +288,7 @@
 {
 public:
   static const uint32_t N_MEASUREMENTS = 1000000;
-  static const double TOLERANCE = 1e-8;
+  static const double TOLERANCE;
 
   RandomVariableStreamConstantTestCase ();
   virtual ~RandomVariableStreamConstantTestCase ();
@@ -297,6 +297,8 @@
   virtual void DoRun (void);
 };
 
+const double RandomVariableStreamConstantTestCase::TOLERANCE = 1e-8;
+
 RandomVariableStreamConstantTestCase::RandomVariableStreamConstantTestCase ()
   : TestCase ("Constant Random Variable Stream Generator")
 {
@@ -336,7 +338,7 @@
 class RandomVariableStreamSequentialTestCase : public TestCase
 {
 public:
-  static const double TOLERANCE = 1e-8;
+  static const double TOLERANCE;
 
   RandomVariableStreamSequentialTestCase ();
   virtual ~RandomVariableStreamSequentialTestCase ();
@@ -345,6 +347,8 @@
   virtual void DoRun (void);
 };
 
+const double RandomVariableStreamSequentialTestCase::TOLERANCE = 1e-8;
+
 RandomVariableStreamSequentialTestCase::RandomVariableStreamSequentialTestCase ()
   : TestCase ("Sequential Random Variable Stream Generator")
 {
@@ -2590,7 +2594,7 @@
 class RandomVariableStreamDeterministicTestCase : public TestCase
 {
 public:
-  static const double TOLERANCE = 1e-8;
+  static const double TOLERANCE;
 
   RandomVariableStreamDeterministicTestCase ();
   virtual ~RandomVariableStreamDeterministicTestCase ();
@@ -2599,6 +2603,8 @@
   virtual void DoRun (void);
 };
 
+const double RandomVariableStreamDeterministicTestCase::TOLERANCE = 1e-8;
+
 RandomVariableStreamDeterministicTestCase::RandomVariableStreamDeterministicTestCase ()
   : TestCase ("Deterministic Random Variable Stream Generator")
 {
diff -Naur ns-3.19/src/core/test/simulator-test-suite.cc ns-3.20/src/core/test/simulator-test-suite.cc
--- ns-3.19/src/core/test/simulator-test-suite.cc	2014-06-17 10:34:00.265637997 -0700
+++ ns-3.20/src/core/test/simulator-test-suite.cc	2014-06-17 10:33:13.976995321 -0700
@@ -31,11 +31,11 @@
 public:
   SimulatorEventsTestCase (ObjectFactory schedulerFactory);
   virtual void DoRun (void);
-  void A (int a);
-  void B (int b);
-  void C (int c);
-  void D (int d);
-  void foo0 (void);
+  void EventA (int a);
+  void EventB (int b);
+  void EventC (int c);
+  void EventD (int d);
+  void Eventfoo0 (void);
   uint64_t NowUs (void);
   void destroy (void);
   bool m_b;
@@ -62,13 +62,13 @@
 }
 
 void
-SimulatorEventsTestCase::A (int a)
+SimulatorEventsTestCase::EventA (int a)
 {
   m_a = false;
 }
 
 void
-SimulatorEventsTestCase::B (int b)
+SimulatorEventsTestCase::EventB (int b)
 {
   if (b != 2 || NowUs () != 11) 
     {
@@ -79,17 +79,17 @@
       m_b = true;
     }
   Simulator::Remove (m_idC);
-  Simulator::Schedule (MicroSeconds (10), &SimulatorEventsTestCase::D, this, 4);
+  Simulator::Schedule (MicroSeconds (10), &SimulatorEventsTestCase::EventD, this, 4);
 }
 
 void
-SimulatorEventsTestCase::C (int c)
+SimulatorEventsTestCase::EventC (int c)
 {
   m_c = false;
 }
 
 void
-SimulatorEventsTestCase::D (int d)
+SimulatorEventsTestCase::EventD (int d)
 {
   if (d != 4 || NowUs () != (11+10)) 
     {
@@ -102,7 +102,7 @@
 }
 
 void
-SimulatorEventsTestCase::foo0 (void)
+SimulatorEventsTestCase::Eventfoo0 (void)
 {}
 
 void
@@ -123,9 +123,9 @@
 
   Simulator::SetScheduler (m_schedulerFactory);
 
-  EventId a = Simulator::Schedule (MicroSeconds (10), &SimulatorEventsTestCase::A, this, 1);
-  Simulator::Schedule (MicroSeconds (11), &SimulatorEventsTestCase::B, this, 2);
-  m_idC = Simulator::Schedule (MicroSeconds (12), &SimulatorEventsTestCase::C, this, 3);
+  EventId a = Simulator::Schedule (MicroSeconds (10), &SimulatorEventsTestCase::EventA, this, 1);
+  Simulator::Schedule (MicroSeconds (11), &SimulatorEventsTestCase::EventB, this, 2);
+  m_idC = Simulator::Schedule (MicroSeconds (12), &SimulatorEventsTestCase::EventC, this, 3);
 
   NS_TEST_EXPECT_MSG_EQ (!m_idC.IsExpired (), true, "");
   NS_TEST_EXPECT_MSG_EQ (!a.IsExpired (), true, "");
@@ -137,7 +137,7 @@
   NS_TEST_EXPECT_MSG_EQ (m_c, true, "Event C did not run ?");
   NS_TEST_EXPECT_MSG_EQ (m_d, true, "Event D did not run ?");
 
-  EventId anId = Simulator::ScheduleNow (&SimulatorEventsTestCase::foo0, this);
+  EventId anId = Simulator::ScheduleNow (&SimulatorEventsTestCase::Eventfoo0, this);
   EventId anotherId = anId;
   NS_TEST_EXPECT_MSG_EQ (!(anId.IsExpired () || anotherId.IsExpired ()), true, "Event should not have expired yet.");
 
diff -Naur ns-3.19/src/core/test/threaded-test-suite.cc ns-3.20/src/core/test/threaded-test-suite.cc
--- ns-3.19/src/core/test/threaded-test-suite.cc	2014-06-17 10:34:00.266637989 -0700
+++ ns-3.20/src/core/test/threaded-test-suite.cc	2014-06-17 10:33:13.976995321 -0700
@@ -39,10 +39,10 @@
 {
 public:
   ThreadedSimulatorEventsTestCase (ObjectFactory schedulerFactory, const std::string &simulatorType, unsigned int threads);
-  void A (int a);
-  void B (int b);
-  void C (int c);
-  void D (int d);
+  void EventA (int a);
+  void EventB (int b);
+  void EventC (int c);
+  void EventD (int d);
   void DoNothing (unsigned int threadno);
   static void SchedulingThread (std::pair<ThreadedSimulatorEventsTestCase *, unsigned int> context);
   void End (void);
@@ -113,7 +113,7 @@
   m_threadWaiting[threadno] = false;
 }
 void
-ThreadedSimulatorEventsTestCase::A (int a)
+ThreadedSimulatorEventsTestCase::EventA (int a)
 {
   if (m_a != m_b || m_a != m_c || m_a != m_d)
     {
@@ -122,11 +122,11 @@
     };
   ++m_a;
   Simulator::Schedule (MicroSeconds (10),
-                       &ThreadedSimulatorEventsTestCase::B, this, a+1);
+                       &ThreadedSimulatorEventsTestCase::EventB, this, a+1);
 }
 
 void
-ThreadedSimulatorEventsTestCase::B (int b)
+ThreadedSimulatorEventsTestCase::EventB (int b)
 {
   if (m_a != (m_b+1) || m_a != (m_c+1) || m_a != (m_d+1))
     {
@@ -135,11 +135,11 @@
     };
   ++m_b;
   Simulator::Schedule (MicroSeconds (10),
-                       &ThreadedSimulatorEventsTestCase::C, this, b+1);
+                       &ThreadedSimulatorEventsTestCase::EventC, this, b+1);
 }
 
 void
-ThreadedSimulatorEventsTestCase::C (int c)
+ThreadedSimulatorEventsTestCase::EventC (int c)
 {
   if (m_a != m_b || m_a != (m_c+1) || m_a != (m_d+1))
     {
@@ -148,11 +148,11 @@
     };
   ++m_c;
   Simulator::Schedule (MicroSeconds (10),
-                       &ThreadedSimulatorEventsTestCase::D, this, c+1);
+                       &ThreadedSimulatorEventsTestCase::EventD, this, c+1);
 }
 
 void
-ThreadedSimulatorEventsTestCase::D (int d)
+ThreadedSimulatorEventsTestCase::EventD (int d)
 {
   if (m_a != m_b || m_a != m_c || m_a != (m_d+1))
     {
@@ -167,7 +167,7 @@
   else
     {
       Simulator::Schedule (MicroSeconds (10),
-                           &ThreadedSimulatorEventsTestCase::A, this, d+1);
+                           &ThreadedSimulatorEventsTestCase::EventA, this, d+1);
     }
 }
 
@@ -207,7 +207,7 @@
   m_stop = false;
   Simulator::SetScheduler (m_schedulerFactory);
 
-  Simulator::Schedule (MicroSeconds (10), &ThreadedSimulatorEventsTestCase::A, this, 1);
+  Simulator::Schedule (MicroSeconds (10), &ThreadedSimulatorEventsTestCase::EventA, this, 1);
   Simulator::Schedule (Seconds (1), &ThreadedSimulatorEventsTestCase::End, this);
 
   
diff -Naur ns-3.19/src/core/test/time-test-suite.cc ns-3.20/src/core/test/time-test-suite.cc
--- ns-3.19/src/core/test/time-test-suite.cc	2014-06-17 10:34:00.267637982 -0700
+++ ns-3.20/src/core/test/time-test-suite.cc	2014-06-17 10:33:13.977995313 -0700
@@ -19,7 +19,14 @@
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  * TimeStep support by Emmanuelle Laprise <emmanuelle.laprise@bluekazoo.ca>
  */
+
+#include <iomanip>
+#include <iostream>
+#include <string>
+#include <sstream>
+
 #include "ns3/nstime.h"
+#include "ns3/int64x64.h"
 #include "ns3/test.h"
 
 using namespace ns3;
@@ -150,13 +157,90 @@
 {
 }
 
+
+class TimeIntputOutputTestCase : public TestCase
+{
+public:
+  TimeIntputOutputTestCase ();
+private:
+  virtual void DoRun (void);
+  void Check (const std::string & str);
+};
+
+TimeIntputOutputTestCase::TimeIntputOutputTestCase ()
+  : TestCase ("Input,output from,to strings")
+{
+}
+
+void
+TimeIntputOutputTestCase::Check (const std::string & str)
+{
+  std::stringstream ss (str);
+  Time time;
+  ss >> time;
+  ss << time;
+  bool pass = (str == ss.str ()); 
+
+  std::cout << GetParent ()->GetName () << " InputOutput: "
+            << (pass ? "pass " : "FAIL ")
+            << "\"" << str << "\"";
+  if (!pass)
+    {
+      std::cout << ", got " << ss.str ();
+    }
+  std::cout << std::endl;
+}
+
+void
+TimeIntputOutputTestCase::DoRun (void)
+{
+  std::cout << std::endl;
+  std::cout << GetParent ()->GetName () << " InputOutput: " << GetName ()
+	    << std::endl;
+  
+  Check ("2ns");
+  Check ("+3.1us");
+  Check ("-4.2ms");
+  Check ("5.3s");
+  Check ("6.4min");
+  Check ("7.5h");
+  Check ("8.6d");
+  Check ("10.8y");
+
+  Time t (3.141592654e9);  // Pi seconds
+  
+  std::cout << GetParent ()->GetName () << " InputOutput: "
+            << "example: raw:   " << t
+            << std::endl;
+  
+  std::cout << GetParent ()->GetName () << " InputOutput: "
+            << std::fixed << std::setprecision (9)
+            << "example: in s:  " << t.As (Time::S)
+            << std::endl;
+    
+  std::cout << GetParent ()->GetName () << " InputOutput: "
+            << std::setprecision (6)
+            << "example: in ms: " << t.As (Time::MS)
+            << std::endl;
+
+  std::cout << GetParent ()->GetName () << " InputOutput: "
+            << "example: Get ns: " << t.GetNanoSeconds ()
+            << std::endl;
+
+  std::cout << std::endl;
+}
+    
 static class TimeTestSuite : public TestSuite
 {
 public:
   TimeTestSuite ()
     : TestSuite ("time", UNIT)
   {
-    AddTestCase (new TimeSimpleTestCase (), TestCase::QUICK);
     AddTestCase (new TimesWithSignsTestCase (), TestCase::QUICK);
+    AddTestCase (new TimeIntputOutputTestCase (), TestCase::QUICK);
+    // This should be last, since it changes the resolution
+    AddTestCase (new TimeSimpleTestCase (), TestCase::QUICK);
   }
 } g_timeTestSuite;
+
+
diff -Naur ns-3.19/src/core/test/type-id-test-suite.cc ns-3.20/src/core/test/type-id-test-suite.cc
--- ns-3.19/src/core/test/type-id-test-suite.cc	2014-06-17 10:34:00.268637974 -0700
+++ ns-3.20/src/core/test/type-id-test-suite.cc	2014-06-17 10:33:13.978995306 -0700
@@ -28,7 +28,7 @@
 
 using namespace std;
 
-namespace ns3 {
+using namespace ns3;
 
 
 const std::string suite("type-id: ");
@@ -315,7 +315,4 @@
   AddTestCase (new LookupTimeTestCase, QUICK);
 }
 
-static TypeIdPerformanceSuite g_TypeIdPerformanceSuite;  
-  
-
-}  // namespace ns3
+static TypeIdPerformanceSuite g_TypeIdPerformanceSuite;
diff -Naur ns-3.19/src/core/waf ns-3.20/src/core/waf
--- ns-3.19/src/core/waf	2014-06-17 10:34:00.269637966 -0700
+++ ns-3.20/src/core/waf	1969-12-31 16:00:00.000000000 -0800
@@ -1 +0,0 @@
-exec "`dirname "$0"`"/../../waf "$@"
\ No newline at end of file
diff -Naur ns-3.19/src/core/wscript ns-3.20/src/core/wscript
--- ns-3.19/src/core/wscript	2014-06-17 10:34:00.270637958 -0700
+++ ns-3.20/src/core/wscript	2014-06-17 10:33:13.980995290 -0700
@@ -4,14 +4,38 @@
 from waflib import Options
 import wutils
 
+int64x64 = {
+    # implementation name: [define, env, highprec]
+    'default': ['INT64X64_USE_128',    'INT64X64_USE_128',    '128-bit integer'], 
+    'int128':  ['INT64X64_USE_128',    'INT64X64_USE_128',    '128-bit integer'], 
+    'cairo':   ['INT64X64_USE_CAIRO',  'INT64X64_USE_CAIRO',  'cairo 128-bit integer'],
+    'double':  ['INT64X64_USE_DOUBLE', 'INT64X64_USE_DOUBLE', 'long double'],
+    }
+
+default_int64x64 = 'default'
+
 def options(opt):
-    opt.add_option('--int64x64-as-double',
-                   help=('Whether to use a double floating point'
-                         ' type for int64x64 values'
-                         ' WARNING: this option only has effect '
-                         'with the configure command.'),
-                   action="store_true", default=False,
-                   dest='int64x64_as_double')
+    assert default_int64x64 in int64x64
+    opt.add_option('--int64x64',
+                   action='store',
+                   default=default_int64x64,
+                   help=("Force the choice of int64x64_t implementation "
+                         "(normally only for debugging).  "
+                         "The supported implementations use int128_t, "
+                         "cairo_int128, or long double.  "
+                         "The int128_t implementation (the preferred option) "
+                         "requires compiler support.  "
+                         "The cairo implementation fallback provides exactly "
+                         "the same numerical results, but possibly at lower "
+                         "execution speed.  The long double implementation "
+                         "may not provide the same numerical results because "
+                         "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(),
+                   dest='int64x64_impl')
+                   
     opt.add_option('--disable-pthread',
                    help=('Whether to enable the use of POSIX threads'),
                    action="store_true", default=False,
@@ -20,23 +44,24 @@
 
 
 def configure(conf):
-    a = conf.check_nonfatal(type_name='uint128_t', define_name='HAVE_UINT128_T')
-    b = conf.check_nonfatal(type_name='__uint128_t', define_name='HAVE___UINT128_T')
-
-    if Options.options.int64x64_as_double:
-        conf.define('INT64X64_USE_DOUBLE', 1)
-        conf.env['INT64X64_USE_DOUBLE'] = 1
-        highprec = 'long double'
-    elif a or b:
-        conf.define('INT64X64_USE_128', 1)
-        conf.env['INT64X64_USE_128'] = 1
-        highprec = '128-bit integer'
-    else:
-        conf.define('INT64X64_USE_CAIRO', 1)
-        conf.env['INT64X64_USE_CAIRO'] = 1
-        highprec = 'cairo 128-bit integer'
-
-    conf.msg('Checking high precision time implementation', highprec)
+    int64x64_impl = Options.options.int64x64_impl
+    if int64x64_impl == 'default' or int64x64_impl == 'int128':
+        have_uint128  = conf.check_nonfatal(type_name='uint128_t',
+                                            define_name='HAVE_UINT128_T')
+        have__uint128 = conf.check_nonfatal(type_name='__uint128_t',
+                                            define_name='HAVE___UINT128_T')
+        if have_uint128 or have__uint128:
+            int64x64_impl = 'int128'
+        else:
+            int64x64_impl = 'cairo'
+        
+    def_flag, env_flag, highprec = int64x64[int64x64_impl]
+    # Add a tag confirming default choice
+    if Options.options.int64x64_impl == 'default':
+        highprec += ' (default)'
+    conf.define(def_flag, 1)
+    conf.env[env_flag] = 1
+    conf.msg('Checking high precision implementation', highprec)
 
     conf.check_nonfatal(header_name='stdint.h', define_name='HAVE_STDINT_H')
     conf.check_nonfatal(header_name='inttypes.h', define_name='HAVE_INTTYPES_H')
@@ -223,6 +248,8 @@
         'model/ptr.h',
         'model/object.h',
         'model/log.h',
+        'model/log-macros-enabled.h',
+        'model/log-macros-disabled.h',
         'model/assert.h',
         'model/breakpoint.h',
         'model/fatal-error.h',
@@ -271,6 +298,7 @@
         'model/hash-murmur3.h',
         'model/hash-fnv.h',
         'model/hash.h',
+        'model/valgrind.h',
         ]
 
     if sys.platform == 'win32':
@@ -330,7 +358,10 @@
     if env['ENABLE_GSL']:
         core.use.extend(['GSL', 'GSLCBLAS', 'M'])
         core_test.use.extend(['GSL', 'GSLCBLAS', 'M'])
-        core_test.source.extend(['test/rng-test-suite.cc'])
+        core_test.source.extend([
+                'test/rng-test-suite.cc',
+                'test/random-variable-stream-test-suite.cc'
+                ])
 
     if (bld.env['ENABLE_EXAMPLES']):
         bld.recurse('examples')
diff -Naur ns-3.19/src/csma/bindings/modulegen__gcc_ILP32.py ns-3.20/src/csma/bindings/modulegen__gcc_ILP32.py
--- ns-3.19/src/csma/bindings/modulegen__gcc_ILP32.py	2014-06-17 10:34:00.289637812 -0700
+++ ns-3.20/src/csma/bindings/modulegen__gcc_ILP32.py	2014-06-17 10:33:13.621998061 -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'], 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_PRISM_HEADER', 'DLT_IEEE802_11_RADIO', 'DLT_IEEE802_15_4'], 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]
@@ -120,6 +120,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]
@@ -132,6 +134,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'])
     ## csma-helper.h (module 'csma'): ns3::CsmaHelper [class]
@@ -296,7 +300,7 @@
     module.add_class('CsmaNetDevice', parent=root_module['ns3::NetDevice'])
     ## csma-net-device.h (module 'csma'): ns3::CsmaNetDevice::EncapsulationMode [enumeration]
     module.add_enum('EncapsulationMode', ['ILLEGAL', 'DIX', 'LLC'], outer_class=root_module['ns3::CsmaNetDevice'])
-    module.add_container('std::list< unsigned int >', 'unsigned int', container_type='list')
+    module.add_container('std::list< unsigned int >', 'unsigned int', container_type=u'list')
     
     ## Register a nested module for the namespace FatalImpl
     
@@ -319,12 +323,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
     
@@ -387,6 +391,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'])
@@ -878,6 +883,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', 
@@ -890,6 +899,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', 
@@ -2469,6 +2482,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('!=')
@@ -2666,62 +2687,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('==')
@@ -2730,6 +2707,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]
@@ -2770,6 +2749,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):
@@ -3339,13 +3320,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('==')
@@ -3372,6 +3355,11 @@
     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', 
@@ -4256,10 +4244,10 @@
     cls.add_method('Reset', 
                    'void', 
                    [])
-    ## error-model.h (module 'network'): bool ns3::ErrorModel::DoCorrupt(ns3::Ptr<ns3::Packet> arg0) [member function]
+    ## error-model.h (module 'network'): bool ns3::ErrorModel::DoCorrupt(ns3::Ptr<ns3::Packet> p) [member function]
     cls.add_method('DoCorrupt', 
                    'bool', 
-                   [param('ns3::Ptr< ns3::Packet >', 'arg0')], 
+                   [param('ns3::Ptr< ns3::Packet >', 'p')], 
                    is_pure_virtual=True, visibility='private', is_virtual=True)
     ## error-model.h (module 'network'): void ns3::ErrorModel::DoReset() [member function]
     cls.add_method('DoReset', 
@@ -5173,10 +5161,10 @@
                    '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')])
     return
 
 def register_Ns3ParetoRandomVariable_methods(root_module, cls):
diff -Naur ns-3.19/src/csma/bindings/modulegen__gcc_LP64.py ns-3.20/src/csma/bindings/modulegen__gcc_LP64.py
--- ns-3.19/src/csma/bindings/modulegen__gcc_LP64.py	2014-06-17 10:34:00.294637773 -0700
+++ ns-3.20/src/csma/bindings/modulegen__gcc_LP64.py	2014-06-17 10:33:13.625998030 -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'], 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_PRISM_HEADER', 'DLT_IEEE802_11_RADIO', 'DLT_IEEE802_15_4'], 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]
@@ -120,6 +120,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]
@@ -132,6 +134,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'])
     ## csma-helper.h (module 'csma'): ns3::CsmaHelper [class]
@@ -296,7 +300,7 @@
     module.add_class('CsmaNetDevice', parent=root_module['ns3::NetDevice'])
     ## csma-net-device.h (module 'csma'): ns3::CsmaNetDevice::EncapsulationMode [enumeration]
     module.add_enum('EncapsulationMode', ['ILLEGAL', 'DIX', 'LLC'], outer_class=root_module['ns3::CsmaNetDevice'])
-    module.add_container('std::list< unsigned int >', 'unsigned int', container_type='list')
+    module.add_container('std::list< unsigned int >', 'unsigned int', container_type=u'list')
     
     ## Register a nested module for the namespace FatalImpl
     
@@ -319,12 +323,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
     
@@ -387,6 +391,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'])
@@ -878,6 +883,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', 
@@ -890,6 +899,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', 
@@ -2469,6 +2482,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('!=')
@@ -2666,62 +2687,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('==')
@@ -2730,6 +2707,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]
@@ -2770,6 +2749,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):
@@ -3339,13 +3320,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('==')
@@ -3372,6 +3355,11 @@
     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', 
@@ -4256,10 +4244,10 @@
     cls.add_method('Reset', 
                    'void', 
                    [])
-    ## error-model.h (module 'network'): bool ns3::ErrorModel::DoCorrupt(ns3::Ptr<ns3::Packet> arg0) [member function]
+    ## error-model.h (module 'network'): bool ns3::ErrorModel::DoCorrupt(ns3::Ptr<ns3::Packet> p) [member function]
     cls.add_method('DoCorrupt', 
                    'bool', 
-                   [param('ns3::Ptr< ns3::Packet >', 'arg0')], 
+                   [param('ns3::Ptr< ns3::Packet >', 'p')], 
                    is_pure_virtual=True, visibility='private', is_virtual=True)
     ## error-model.h (module 'network'): void ns3::ErrorModel::DoReset() [member function]
     cls.add_method('DoReset', 
@@ -5173,10 +5161,10 @@
                    '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')])
     return
 
 def register_Ns3ParetoRandomVariable_methods(root_module, cls):
diff -Naur ns-3.19/src/csma/examples/waf ns-3.20/src/csma/examples/waf
--- ns-3.19/src/csma/examples/waf	2014-06-17 10:34:00.298637743 -0700
+++ ns-3.20/src/csma/examples/waf	1969-12-31 16:00:00.000000000 -0800
@@ -1 +0,0 @@
-exec "`dirname "$0"`"/../../waf "$@"
diff -Naur ns-3.19/src/csma/model/csma-channel.cc ns-3.20/src/csma/model/csma-channel.cc
--- ns-3.19/src/csma/model/csma-channel.cc	2014-06-17 10:34:00.300637727 -0700
+++ ns-3.20/src/csma/model/csma-channel.cc	2014-06-17 10:33:13.632997976 -0700
@@ -28,8 +28,7 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (CsmaChannel)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (CsmaChannel);
 
 TypeId
 CsmaChannel::GetTypeId (void)
diff -Naur ns-3.19/src/csma/model/csma-net-device.cc ns-3.20/src/csma/model/csma-net-device.cc
--- ns-3.19/src/csma/model/csma-net-device.cc	2014-06-17 10:34:00.301637719 -0700
+++ ns-3.20/src/csma/model/csma-net-device.cc	2014-06-17 10:33:13.633997968 -0700
@@ -37,8 +37,7 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (CsmaNetDevice)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (CsmaNetDevice);
 
 TypeId
 CsmaNetDevice::GetTypeId (void)
diff -Naur ns-3.19/src/csma/waf ns-3.20/src/csma/waf
--- ns-3.19/src/csma/waf	2014-06-17 10:34:00.303637704 -0700
+++ ns-3.20/src/csma/waf	1969-12-31 16:00:00.000000000 -0800
@@ -1 +0,0 @@
-exec "`dirname "$0"`"/../../../waf "$@"
diff -Naur ns-3.19/src/csma-layout/bindings/modulegen__gcc_ILP32.py ns-3.20/src/csma-layout/bindings/modulegen__gcc_ILP32.py
--- ns-3.19/src/csma-layout/bindings/modulegen__gcc_ILP32.py	2014-06-17 10:34:00.277637905 -0700
+++ ns-3.20/src/csma-layout/bindings/modulegen__gcc_ILP32.py	2014-06-17 10:33:13.985995252 -0700
@@ -72,34 +72,6 @@
     module.add_class('InetSocketAddress', import_from_module='ns.network')
     ## inet-socket-address.h (module 'network'): ns3::InetSocketAddress [class]
     root_module['ns3::InetSocketAddress'].implicitly_converts_to(root_module['ns3::Address'])
-    ## int-to-type.h (module 'core'): ns3::IntToType<0> [struct]
-    module.add_class('IntToType', import_from_module='ns.core', template_parameters=['0'])
-    ## int-to-type.h (module 'core'): ns3::IntToType<0>::v_e [enumeration]
-    module.add_enum('v_e', ['value'], outer_class=root_module['ns3::IntToType< 0 >'], import_from_module='ns.core')
-    ## int-to-type.h (module 'core'): ns3::IntToType<1> [struct]
-    module.add_class('IntToType', import_from_module='ns.core', template_parameters=['1'])
-    ## int-to-type.h (module 'core'): ns3::IntToType<1>::v_e [enumeration]
-    module.add_enum('v_e', ['value'], outer_class=root_module['ns3::IntToType< 1 >'], import_from_module='ns.core')
-    ## int-to-type.h (module 'core'): ns3::IntToType<2> [struct]
-    module.add_class('IntToType', import_from_module='ns.core', template_parameters=['2'])
-    ## int-to-type.h (module 'core'): ns3::IntToType<2>::v_e [enumeration]
-    module.add_enum('v_e', ['value'], outer_class=root_module['ns3::IntToType< 2 >'], import_from_module='ns.core')
-    ## int-to-type.h (module 'core'): ns3::IntToType<3> [struct]
-    module.add_class('IntToType', import_from_module='ns.core', template_parameters=['3'])
-    ## int-to-type.h (module 'core'): ns3::IntToType<3>::v_e [enumeration]
-    module.add_enum('v_e', ['value'], outer_class=root_module['ns3::IntToType< 3 >'], import_from_module='ns.core')
-    ## int-to-type.h (module 'core'): ns3::IntToType<4> [struct]
-    module.add_class('IntToType', import_from_module='ns.core', template_parameters=['4'])
-    ## int-to-type.h (module 'core'): ns3::IntToType<4>::v_e [enumeration]
-    module.add_enum('v_e', ['value'], outer_class=root_module['ns3::IntToType< 4 >'], import_from_module='ns.core')
-    ## int-to-type.h (module 'core'): ns3::IntToType<5> [struct]
-    module.add_class('IntToType', import_from_module='ns.core', template_parameters=['5'])
-    ## int-to-type.h (module 'core'): ns3::IntToType<5>::v_e [enumeration]
-    module.add_enum('v_e', ['value'], outer_class=root_module['ns3::IntToType< 5 >'], import_from_module='ns.core')
-    ## int-to-type.h (module 'core'): ns3::IntToType<6> [struct]
-    module.add_class('IntToType', import_from_module='ns.core', template_parameters=['6'])
-    ## int-to-type.h (module 'core'): ns3::IntToType<6>::v_e [enumeration]
-    module.add_enum('v_e', ['value'], outer_class=root_module['ns3::IntToType< 6 >'], 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]
@@ -165,7 +137,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'], 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_PRISM_HEADER', 'DLT_IEEE802_11_RADIO', 'DLT_IEEE802_15_4'], 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]
@@ -180,14 +152,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')
-    ## timer.h (module 'core'): ns3::Timer [class]
-    module.add_class('Timer', import_from_module='ns.core')
-    ## timer.h (module 'core'): ns3::Timer::DestroyPolicy [enumeration]
-    module.add_enum('DestroyPolicy', ['CANCEL_ON_DESTROY', 'REMOVE_ON_DESTROY', 'CHECK_ON_DESTROY'], outer_class=root_module['ns3::Timer'], import_from_module='ns.core')
-    ## timer.h (module 'core'): ns3::Timer::State [enumeration]
-    module.add_enum('State', ['RUNNING', 'EXPIRED', 'SUSPENDED'], outer_class=root_module['ns3::Timer'], import_from_module='ns.core')
-    ## timer-impl.h (module 'core'): ns3::TimerImpl [class]
-    module.add_class('TimerImpl', allow_subclassing=True, import_from_module='ns.core')
+    ## 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]
@@ -200,6 +166,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'])
     ## csma-helper.h (module 'csma'): ns3::CsmaHelper [class]
@@ -300,10 +268,6 @@
     module.add_class('EmptyAttributeValue', 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> >'])
-    ## ip-l4-protocol.h (module 'internet'): ns3::IpL4Protocol [class]
-    module.add_class('IpL4Protocol', import_from_module='ns.internet', parent=root_module['ns3::Object'])
-    ## ip-l4-protocol.h (module 'internet'): ns3::IpL4Protocol::RxStatus [enumeration]
-    module.add_enum('RxStatus', ['RX_OK', 'RX_CSUM_FAILED', 'RX_ENDPOINT_CLOSED', 'RX_ENDPOINT_UNREACH'], outer_class=root_module['ns3::IpL4Protocol'], import_from_module='ns.internet')
     ## ipv4.h (module 'internet'): ns3::Ipv4 [class]
     module.add_class('Ipv4', import_from_module='ns.internet', parent=root_module['ns3::Object'])
     ## ipv4-address.h (module 'network'): ns3::Ipv4AddressChecker [class]
@@ -330,12 +294,10 @@
     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-interface.h (module 'internet'): ns3::Ipv6Interface [class]
-    module.add_class('Ipv6Interface', import_from_module='ns.internet', parent=root_module['ns3::Object'])
     ## ipv6-l3-protocol.h (module 'internet'): ns3::Ipv6L3Protocol [class]
     module.add_class('Ipv6L3Protocol', import_from_module='ns.internet', parent=root_module['ns3::Ipv6'])
     ## ipv6-l3-protocol.h (module 'internet'): ns3::Ipv6L3Protocol::DropReason [enumeration]
-    module.add_enum('DropReason', ['DROP_TTL_EXPIRED', 'DROP_NO_ROUTE', 'DROP_INTERFACE_DOWN', 'DROP_ROUTE_ERROR', 'DROP_UNKNOWN_PROTOCOL'], outer_class=root_module['ns3::Ipv6L3Protocol'], import_from_module='ns.internet')
+    module.add_enum('DropReason', ['DROP_TTL_EXPIRED', 'DROP_NO_ROUTE', 'DROP_INTERFACE_DOWN', 'DROP_ROUTE_ERROR', 'DROP_UNKNOWN_PROTOCOL', 'DROP_UNKNOWN_OPTION', 'DROP_MALFORMED_HEADER', 'DROP_FRAGMENT_TIMEOUT'], outer_class=root_module['ns3::Ipv6L3Protocol'], import_from_module='ns.internet')
     ## ipv6-pmtu-cache.h (module 'internet'): ns3::Ipv6PmtuCache [class]
     module.add_class('Ipv6PmtuCache', import_from_module='ns.internet', parent=root_module['ns3::Object'])
     ## ipv6-address.h (module 'network'): ns3::Ipv6PrefixChecker [class]
@@ -368,8 +330,8 @@
     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< bool >', 'bool', container_type='vector')
-    module.add_container('std::map< unsigned int, unsigned int >', ('unsigned int', 'unsigned int'), container_type='map')
+    module.add_container('std::vector< bool >', 'bool', 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
     
@@ -392,12 +354,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
     
@@ -440,13 +402,6 @@
     register_Ns3Hasher_methods(root_module, root_module['ns3::Hasher'])
     register_Ns3Inet6SocketAddress_methods(root_module, root_module['ns3::Inet6SocketAddress'])
     register_Ns3InetSocketAddress_methods(root_module, root_module['ns3::InetSocketAddress'])
-    register_Ns3IntToType__0_methods(root_module, root_module['ns3::IntToType< 0 >'])
-    register_Ns3IntToType__1_methods(root_module, root_module['ns3::IntToType< 1 >'])
-    register_Ns3IntToType__2_methods(root_module, root_module['ns3::IntToType< 2 >'])
-    register_Ns3IntToType__3_methods(root_module, root_module['ns3::IntToType< 3 >'])
-    register_Ns3IntToType__4_methods(root_module, root_module['ns3::IntToType< 4 >'])
-    register_Ns3IntToType__5_methods(root_module, root_module['ns3::IntToType< 5 >'])
-    register_Ns3IntToType__6_methods(root_module, root_module['ns3::IntToType< 6 >'])
     register_Ns3Ipv4Address_methods(root_module, root_module['ns3::Ipv4Address'])
     register_Ns3Ipv4AddressHelper_methods(root_module, root_module['ns3::Ipv4AddressHelper'])
     register_Ns3Ipv4InterfaceAddress_methods(root_module, root_module['ns3::Ipv4InterfaceAddress'])
@@ -479,8 +434,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_Ns3Timer_methods(root_module, root_module['ns3::Timer'])
-    register_Ns3TimerImpl_methods(root_module, root_module['ns3::TimerImpl'])
+    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'])
@@ -529,7 +483,6 @@
     register_Ns3DataRateValue_methods(root_module, root_module['ns3::DataRateValue'])
     register_Ns3EmptyAttributeValue_methods(root_module, root_module['ns3::EmptyAttributeValue'])
     register_Ns3EventImpl_methods(root_module, root_module['ns3::EventImpl'])
-    register_Ns3IpL4Protocol_methods(root_module, root_module['ns3::IpL4Protocol'])
     register_Ns3Ipv4_methods(root_module, root_module['ns3::Ipv4'])
     register_Ns3Ipv4AddressChecker_methods(root_module, root_module['ns3::Ipv4AddressChecker'])
     register_Ns3Ipv4AddressValue_methods(root_module, root_module['ns3::Ipv4AddressValue'])
@@ -542,7 +495,6 @@
     register_Ns3Ipv6_methods(root_module, root_module['ns3::Ipv6'])
     register_Ns3Ipv6AddressChecker_methods(root_module, root_module['ns3::Ipv6AddressChecker'])
     register_Ns3Ipv6AddressValue_methods(root_module, root_module['ns3::Ipv6AddressValue'])
-    register_Ns3Ipv6Interface_methods(root_module, root_module['ns3::Ipv6Interface'])
     register_Ns3Ipv6L3Protocol_methods(root_module, root_module['ns3::Ipv6L3Protocol'])
     register_Ns3Ipv6PmtuCache_methods(root_module, root_module['ns3::Ipv6PmtuCache'])
     register_Ns3Ipv6PrefixChecker_methods(root_module, root_module['ns3::Ipv6PrefixChecker'])
@@ -1050,6 +1002,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', 
@@ -1062,6 +1018,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', 
@@ -1552,55 +1512,6 @@
                    [param('uint16_t', 'port')])
     return
 
-def register_Ns3IntToType__0_methods(root_module, cls):
-    ## int-to-type.h (module 'core'): ns3::IntToType<0>::IntToType() [constructor]
-    cls.add_constructor([])
-    ## int-to-type.h (module 'core'): ns3::IntToType<0>::IntToType(ns3::IntToType<0> const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::IntToType< 0 > const &', 'arg0')])
-    return
-
-def register_Ns3IntToType__1_methods(root_module, cls):
-    ## int-to-type.h (module 'core'): ns3::IntToType<1>::IntToType() [constructor]
-    cls.add_constructor([])
-    ## int-to-type.h (module 'core'): ns3::IntToType<1>::IntToType(ns3::IntToType<1> const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::IntToType< 1 > const &', 'arg0')])
-    return
-
-def register_Ns3IntToType__2_methods(root_module, cls):
-    ## int-to-type.h (module 'core'): ns3::IntToType<2>::IntToType() [constructor]
-    cls.add_constructor([])
-    ## int-to-type.h (module 'core'): ns3::IntToType<2>::IntToType(ns3::IntToType<2> const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::IntToType< 2 > const &', 'arg0')])
-    return
-
-def register_Ns3IntToType__3_methods(root_module, cls):
-    ## int-to-type.h (module 'core'): ns3::IntToType<3>::IntToType() [constructor]
-    cls.add_constructor([])
-    ## int-to-type.h (module 'core'): ns3::IntToType<3>::IntToType(ns3::IntToType<3> const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::IntToType< 3 > const &', 'arg0')])
-    return
-
-def register_Ns3IntToType__4_methods(root_module, cls):
-    ## int-to-type.h (module 'core'): ns3::IntToType<4>::IntToType() [constructor]
-    cls.add_constructor([])
-    ## int-to-type.h (module 'core'): ns3::IntToType<4>::IntToType(ns3::IntToType<4> const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::IntToType< 4 > const &', 'arg0')])
-    return
-
-def register_Ns3IntToType__5_methods(root_module, cls):
-    ## int-to-type.h (module 'core'): ns3::IntToType<5>::IntToType() [constructor]
-    cls.add_constructor([])
-    ## int-to-type.h (module 'core'): ns3::IntToType<5>::IntToType(ns3::IntToType<5> const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::IntToType< 5 > const &', 'arg0')])
-    return
-
-def register_Ns3IntToType__6_methods(root_module, cls):
-    ## int-to-type.h (module 'core'): ns3::IntToType<6>::IntToType() [constructor]
-    cls.add_constructor([])
-    ## int-to-type.h (module 'core'): ns3::IntToType<6>::IntToType(ns3::IntToType<6> const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::IntToType< 6 > const &', 'arg0')])
-    return
-
 def register_Ns3Ipv4Address_methods(root_module, cls):
     cls.add_binary_comparison_operator('<')
     cls.add_binary_comparison_operator('!=')
@@ -2240,6 +2151,11 @@
                    'ns3::Ipv6InterfaceAddress::State_e', 
                    [], 
                    is_const=True)
+    ## ipv6-interface-address.h (module 'internet'): bool ns3::Ipv6InterfaceAddress::IsInSameSubnet(ns3::Ipv6Address b) const [member function]
+    cls.add_method('IsInSameSubnet', 
+                   'bool', 
+                   [param('ns3::Ipv6Address', 'b')], 
+                   is_const=True)
     ## ipv6-interface-address.h (module 'internet'): void ns3::Ipv6InterfaceAddress::SetAddress(ns3::Ipv6Address address) [member function]
     cls.add_method('SetAddress', 
                    'void', 
@@ -3204,88 +3120,12 @@
                    [param('uint8_t', 'v')])
     return
 
-def register_Ns3Timer_methods(root_module, cls):
-    ## timer.h (module 'core'): ns3::Timer::Timer(ns3::Timer const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::Timer const &', 'arg0')])
-    ## timer.h (module 'core'): ns3::Timer::Timer() [constructor]
-    cls.add_constructor([])
-    ## timer.h (module 'core'): ns3::Timer::Timer(ns3::Timer::DestroyPolicy destroyPolicy) [constructor]
-    cls.add_constructor([param('ns3::Timer::DestroyPolicy', 'destroyPolicy')])
-    ## timer.h (module 'core'): void ns3::Timer::Cancel() [member function]
-    cls.add_method('Cancel', 
-                   'void', 
-                   [])
-    ## timer.h (module 'core'): ns3::Time ns3::Timer::GetDelay() const [member function]
-    cls.add_method('GetDelay', 
-                   'ns3::Time', 
-                   [], 
-                   is_const=True)
-    ## timer.h (module 'core'): ns3::Time ns3::Timer::GetDelayLeft() const [member function]
-    cls.add_method('GetDelayLeft', 
-                   'ns3::Time', 
-                   [], 
-                   is_const=True)
-    ## timer.h (module 'core'): ns3::Timer::State ns3::Timer::GetState() const [member function]
-    cls.add_method('GetState', 
-                   'ns3::Timer::State', 
-                   [], 
-                   is_const=True)
-    ## timer.h (module 'core'): bool ns3::Timer::IsExpired() const [member function]
-    cls.add_method('IsExpired', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## timer.h (module 'core'): bool ns3::Timer::IsRunning() const [member function]
-    cls.add_method('IsRunning', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## timer.h (module 'core'): bool ns3::Timer::IsSuspended() const [member function]
-    cls.add_method('IsSuspended', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## timer.h (module 'core'): void ns3::Timer::Remove() [member function]
-    cls.add_method('Remove', 
-                   'void', 
-                   [])
-    ## timer.h (module 'core'): void ns3::Timer::Resume() [member function]
-    cls.add_method('Resume', 
-                   'void', 
-                   [])
-    ## timer.h (module 'core'): void ns3::Timer::Schedule() [member function]
-    cls.add_method('Schedule', 
-                   'void', 
-                   [])
-    ## timer.h (module 'core'): void ns3::Timer::Schedule(ns3::Time delay) [member function]
-    cls.add_method('Schedule', 
-                   'void', 
-                   [param('ns3::Time', 'delay')])
-    ## timer.h (module 'core'): void ns3::Timer::SetDelay(ns3::Time const & delay) [member function]
-    cls.add_method('SetDelay', 
-                   'void', 
-                   [param('ns3::Time const &', 'delay')])
-    ## timer.h (module 'core'): void ns3::Timer::Suspend() [member function]
-    cls.add_method('Suspend', 
-                   'void', 
-                   [])
-    return
-
-def register_Ns3TimerImpl_methods(root_module, cls):
-    ## timer-impl.h (module 'core'): ns3::TimerImpl::TimerImpl() [constructor]
-    cls.add_constructor([])
-    ## timer-impl.h (module 'core'): ns3::TimerImpl::TimerImpl(ns3::TimerImpl const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::TimerImpl const &', 'arg0')])
-    ## timer-impl.h (module 'core'): void ns3::TimerImpl::Invoke() [member function]
-    cls.add_method('Invoke', 
-                   'void', 
-                   [], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## timer-impl.h (module 'core'): ns3::EventId ns3::TimerImpl::Schedule(ns3::Time const & delay) [member function]
-    cls.add_method('Schedule', 
-                   'ns3::EventId', 
-                   [param('ns3::Time const &', 'delay')], 
-                   is_pure_virtual=True, is_virtual=True)
+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):
@@ -3485,62 +3325,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('==')
@@ -3549,6 +3345,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]
@@ -3589,6 +3387,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):
@@ -4981,13 +4781,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('==')
@@ -5014,6 +4816,11 @@
     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', 
@@ -5567,63 +5374,6 @@
                    is_pure_virtual=True, visibility='protected', is_virtual=True)
     return
 
-def register_Ns3IpL4Protocol_methods(root_module, cls):
-    ## ip-l4-protocol.h (module 'internet'): ns3::IpL4Protocol::IpL4Protocol() [constructor]
-    cls.add_constructor([])
-    ## ip-l4-protocol.h (module 'internet'): ns3::IpL4Protocol::IpL4Protocol(ns3::IpL4Protocol const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::IpL4Protocol const &', 'arg0')])
-    ## ip-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::IpL4Protocol::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 >', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## ip-l4-protocol.h (module 'internet'): 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> ns3::IpL4Protocol::GetDownTarget6() const [member function]
-    cls.add_method('GetDownTarget6', 
-                   '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 >', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## ip-l4-protocol.h (module 'internet'): int ns3::IpL4Protocol::GetProtocolNumber() const [member function]
-    cls.add_method('GetProtocolNumber', 
-                   'int', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## ip-l4-protocol.h (module 'internet'): static ns3::TypeId ns3::IpL4Protocol::GetTypeId() [member function]
-    cls.add_method('GetTypeId', 
-                   'ns3::TypeId', 
-                   [], 
-                   is_static=True)
-    ## ip-l4-protocol.h (module 'internet'): ns3::IpL4Protocol::RxStatus ns3::IpL4Protocol::Receive(ns3::Ptr<ns3::Packet> p, ns3::Ipv4Header const & header, 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')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## ip-l4-protocol.h (module 'internet'): ns3::IpL4Protocol::RxStatus ns3::IpL4Protocol::Receive(ns3::Ptr<ns3::Packet> p, ns3::Ipv6Header const & header, 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')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## ip-l4-protocol.h (module 'internet'): void ns3::IpL4Protocol::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', 
-                   'void', 
-                   [param('ns3::Ipv4Address', 'icmpSource'), param('uint8_t', 'icmpTtl'), param('uint8_t', 'icmpType'), param('uint8_t', 'icmpCode'), param('uint32_t', 'icmpInfo'), param('ns3::Ipv4Address', 'payloadSource'), param('ns3::Ipv4Address', 'payloadDestination'), param('uint8_t const *', 'payload')], 
-                   is_virtual=True)
-    ## ip-l4-protocol.h (module 'internet'): void ns3::IpL4Protocol::ReceiveIcmp(ns3::Ipv6Address icmpSource, uint8_t icmpTtl, uint8_t icmpType, uint8_t icmpCode, uint32_t icmpInfo, ns3::Ipv6Address payloadSource, ns3::Ipv6Address payloadDestination, uint8_t const * payload) [member function]
-    cls.add_method('ReceiveIcmp', 
-                   'void', 
-                   [param('ns3::Ipv6Address', 'icmpSource'), param('uint8_t', 'icmpTtl'), param('uint8_t', 'icmpType'), param('uint8_t', 'icmpCode'), param('uint32_t', 'icmpInfo'), param('ns3::Ipv6Address', 'payloadSource'), param('ns3::Ipv6Address', 'payloadDestination'), param('uint8_t const *', 'payload')], 
-                   is_virtual=True)
-    ## ip-l4-protocol.h (module 'internet'): void ns3::IpL4Protocol::SetDownTarget(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> cb) [member function]
-    cls.add_method('SetDownTarget', 
-                   'void', 
-                   [param('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 >', 'cb')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## ip-l4-protocol.h (module 'internet'): void ns3::IpL4Protocol::SetDownTarget6(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) [member function]
-    cls.add_method('SetDownTarget6', 
-                   '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_pure_virtual=True, is_virtual=True)
-    return
-
 def register_Ns3Ipv4_methods(root_module, cls):
     ## ipv4.h (module 'internet'): ns3::Ipv4::Ipv4(ns3::Ipv4 const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::Ipv4 const &', 'arg0')])
@@ -5946,6 +5696,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', 
@@ -6299,6 +6054,11 @@
                    'ns3::Ptr< ns3::NetDevice >', 
                    [param('uint32_t', 'interface')], 
                    is_pure_virtual=True, is_virtual=True)
+    ## ipv6.h (module 'internet'): ns3::Ptr<ns3::IpL4Protocol> ns3::Ipv6::GetProtocol(int protocolNumber) const [member function]
+    cls.add_method('GetProtocol', 
+                   'ns3::Ptr< ns3::IpL4Protocol >', 
+                   [param('int', 'protocolNumber')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## ipv6.h (module 'internet'): ns3::Ptr<ns3::Ipv6RoutingProtocol> ns3::Ipv6::GetRoutingProtocol() const [member function]
     cls.add_method('GetRoutingProtocol', 
                    'ns3::Ptr< ns3::Ipv6RoutingProtocol >', 
@@ -6369,6 +6129,11 @@
                    'void', 
                    [param('uint32_t', 'interface')], 
                    is_pure_virtual=True, is_virtual=True)
+    ## ipv6.h (module 'internet'): ns3::Ipv6Address ns3::Ipv6::SourceAddressSelection(uint32_t interface, ns3::Ipv6Address dest) [member function]
+    cls.add_method('SourceAddressSelection', 
+                   'ns3::Ipv6Address', 
+                   [param('uint32_t', 'interface'), param('ns3::Ipv6Address', 'dest')], 
+                   is_pure_virtual=True, is_virtual=True)
     ## ipv6.h (module 'internet'): ns3::Ipv6::IF_ANY [variable]
     cls.add_static_attribute('IF_ANY', 'uint32_t const', is_const=True)
     ## ipv6.h (module 'internet'): bool ns3::Ipv6::GetIpForward() const [member function]
@@ -6433,151 +6198,6 @@
                    [param('ns3::Ipv6Address const &', 'value')])
     return
 
-def register_Ns3Ipv6Interface_methods(root_module, cls):
-    ## ipv6-interface.h (module 'internet'): ns3::Ipv6Interface::Ipv6Interface(ns3::Ipv6Interface const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::Ipv6Interface const &', 'arg0')])
-    ## ipv6-interface.h (module 'internet'): ns3::Ipv6Interface::Ipv6Interface() [constructor]
-    cls.add_constructor([])
-    ## ipv6-interface.h (module 'internet'): bool ns3::Ipv6Interface::AddAddress(ns3::Ipv6InterfaceAddress iface) [member function]
-    cls.add_method('AddAddress', 
-                   'bool', 
-                   [param('ns3::Ipv6InterfaceAddress', 'iface')])
-    ## ipv6-interface.h (module 'internet'): ns3::Ipv6InterfaceAddress ns3::Ipv6Interface::GetAddress(uint32_t index) const [member function]
-    cls.add_method('GetAddress', 
-                   'ns3::Ipv6InterfaceAddress', 
-                   [param('uint32_t', 'index')], 
-                   is_const=True)
-    ## ipv6-interface.h (module 'internet'): ns3::Ipv6InterfaceAddress ns3::Ipv6Interface::GetAddressMatchingDestination(ns3::Ipv6Address dst) [member function]
-    cls.add_method('GetAddressMatchingDestination', 
-                   'ns3::Ipv6InterfaceAddress', 
-                   [param('ns3::Ipv6Address', 'dst')])
-    ## ipv6-interface.h (module 'internet'): uint16_t ns3::Ipv6Interface::GetBaseReachableTime() const [member function]
-    cls.add_method('GetBaseReachableTime', 
-                   'uint16_t', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface.h (module 'internet'): uint8_t ns3::Ipv6Interface::GetCurHopLimit() const [member function]
-    cls.add_method('GetCurHopLimit', 
-                   'uint8_t', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface.h (module 'internet'): ns3::Ptr<ns3::NetDevice> ns3::Ipv6Interface::GetDevice() const [member function]
-    cls.add_method('GetDevice', 
-                   'ns3::Ptr< ns3::NetDevice >', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## ipv6-interface.h (module 'internet'): ns3::Ipv6InterfaceAddress ns3::Ipv6Interface::GetLinkLocalAddress() const [member function]
-    cls.add_method('GetLinkLocalAddress', 
-                   'ns3::Ipv6InterfaceAddress', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface.h (module 'internet'): uint16_t ns3::Ipv6Interface::GetMetric() const [member function]
-    cls.add_method('GetMetric', 
-                   'uint16_t', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface.h (module 'internet'): uint32_t ns3::Ipv6Interface::GetNAddresses() const [member function]
-    cls.add_method('GetNAddresses', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface.h (module 'internet'): uint16_t ns3::Ipv6Interface::GetReachableTime() const [member function]
-    cls.add_method('GetReachableTime', 
-                   'uint16_t', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface.h (module 'internet'): uint16_t ns3::Ipv6Interface::GetRetransTimer() const [member function]
-    cls.add_method('GetRetransTimer', 
-                   'uint16_t', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface.h (module 'internet'): static ns3::TypeId ns3::Ipv6Interface::GetTypeId() [member function]
-    cls.add_method('GetTypeId', 
-                   'ns3::TypeId', 
-                   [], 
-                   is_static=True)
-    ## ipv6-interface.h (module 'internet'): bool ns3::Ipv6Interface::IsDown() const [member function]
-    cls.add_method('IsDown', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface.h (module 'internet'): bool ns3::Ipv6Interface::IsForwarding() const [member function]
-    cls.add_method('IsForwarding', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface.h (module 'internet'): bool ns3::Ipv6Interface::IsUp() const [member function]
-    cls.add_method('IsUp', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface.h (module 'internet'): ns3::Ipv6InterfaceAddress ns3::Ipv6Interface::RemoveAddress(uint32_t index) [member function]
-    cls.add_method('RemoveAddress', 
-                   'ns3::Ipv6InterfaceAddress', 
-                   [param('uint32_t', 'index')])
-    ## ipv6-interface.h (module 'internet'): ns3::Ipv6InterfaceAddress ns3::Ipv6Interface::RemoveAddress(ns3::Ipv6Address address) [member function]
-    cls.add_method('RemoveAddress', 
-                   'ns3::Ipv6InterfaceAddress', 
-                   [param('ns3::Ipv6Address', 'address')])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::Send(ns3::Ptr<ns3::Packet> p, ns3::Ipv6Address dest) [member function]
-    cls.add_method('Send', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::Packet >', 'p'), param('ns3::Ipv6Address', 'dest')])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetBaseReachableTime(uint16_t baseReachableTime) [member function]
-    cls.add_method('SetBaseReachableTime', 
-                   'void', 
-                   [param('uint16_t', 'baseReachableTime')])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetCurHopLimit(uint8_t curHopLimit) [member function]
-    cls.add_method('SetCurHopLimit', 
-                   'void', 
-                   [param('uint8_t', 'curHopLimit')])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetDevice(ns3::Ptr<ns3::NetDevice> device) [member function]
-    cls.add_method('SetDevice', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::NetDevice >', 'device')])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetDown() [member function]
-    cls.add_method('SetDown', 
-                   'void', 
-                   [])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetForwarding(bool forward) [member function]
-    cls.add_method('SetForwarding', 
-                   'void', 
-                   [param('bool', 'forward')])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetMetric(uint16_t metric) [member function]
-    cls.add_method('SetMetric', 
-                   'void', 
-                   [param('uint16_t', 'metric')])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetNode(ns3::Ptr<ns3::Node> node) [member function]
-    cls.add_method('SetNode', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::Node >', 'node')])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetNsDadUid(ns3::Ipv6Address address, uint32_t uid) [member function]
-    cls.add_method('SetNsDadUid', 
-                   'void', 
-                   [param('ns3::Ipv6Address', 'address'), param('uint32_t', 'uid')])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetReachableTime(uint16_t reachableTime) [member function]
-    cls.add_method('SetReachableTime', 
-                   'void', 
-                   [param('uint16_t', 'reachableTime')])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetRetransTimer(uint16_t retransTimer) [member function]
-    cls.add_method('SetRetransTimer', 
-                   'void', 
-                   [param('uint16_t', 'retransTimer')])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetState(ns3::Ipv6Address address, ns3::Ipv6InterfaceAddress::State_e state) [member function]
-    cls.add_method('SetState', 
-                   'void', 
-                   [param('ns3::Ipv6Address', 'address'), param('ns3::Ipv6InterfaceAddress::State_e', 'state')])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetUp() [member function]
-    cls.add_method('SetUp', 
-                   'void', 
-                   [])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::DoDispose() [member function]
-    cls.add_method('DoDispose', 
-                   'void', 
-                   [], 
-                   visibility='protected', is_virtual=True)
-    return
-
 def register_Ns3Ipv6L3Protocol_methods(root_module, cls):
     ## ipv6-l3-protocol.h (module 'internet'): ns3::Ipv6L3Protocol::PROT_NUMBER [variable]
     cls.add_static_attribute('PROT_NUMBER', 'uint16_t const', is_const=True)
@@ -6604,7 +6224,7 @@
     cls.add_method('GetProtocol', 
                    'ns3::Ptr< ns3::IpL4Protocol >', 
                    [param('int', 'protocolNumber')], 
-                   is_const=True)
+                   is_const=True, is_virtual=True)
     ## ipv6-l3-protocol.h (module 'internet'): ns3::Ptr<ns3::Socket> ns3::Ipv6L3Protocol::CreateRawSocket() [member function]
     cls.add_method('CreateRawSocket', 
                    'ns3::Ptr< ns3::Socket >', 
@@ -6739,6 +6359,11 @@
                    'void', 
                    [param('uint32_t', 'i'), param('bool', 'val')], 
                    is_virtual=True)
+    ## ipv6-l3-protocol.h (module 'internet'): ns3::Ipv6Address ns3::Ipv6L3Protocol::SourceAddressSelection(uint32_t interface, ns3::Ipv6Address dest) [member function]
+    cls.add_method('SourceAddressSelection', 
+                   'ns3::Ipv6Address', 
+                   [param('uint32_t', 'interface'), param('ns3::Ipv6Address', 'dest')], 
+                   is_virtual=True)
     ## ipv6-l3-protocol.h (module 'internet'): ns3::Ptr<ns3::NetDevice> ns3::Ipv6L3Protocol::GetNetDevice(uint32_t i) [member function]
     cls.add_method('GetNetDevice', 
                    'ns3::Ptr< ns3::NetDevice >', 
@@ -6767,6 +6392,11 @@
                    'void', 
                    [], 
                    is_virtual=True)
+    ## ipv6-l3-protocol.h (module 'internet'): void ns3::Ipv6L3Protocol::ReportDrop(ns3::Ipv6Header ipHeader, ns3::Ptr<ns3::Packet> p, ns3::Ipv6L3Protocol::DropReason dropReason) [member function]
+    cls.add_method('ReportDrop', 
+                   'void', 
+                   [param('ns3::Ipv6Header', 'ipHeader'), param('ns3::Ptr< ns3::Packet >', 'p'), param('ns3::Ipv6L3Protocol::DropReason', 'dropReason')], 
+                   is_virtual=True)
     ## ipv6-l3-protocol.h (module 'internet'): void ns3::Ipv6L3Protocol::DoDispose() [member function]
     cls.add_method('DoDispose', 
                    'void', 
@@ -7374,10 +7004,10 @@
                    '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')])
     return
 
 def register_Ns3TimeValue_methods(root_module, cls):
diff -Naur ns-3.19/src/csma-layout/bindings/modulegen__gcc_LP64.py ns-3.20/src/csma-layout/bindings/modulegen__gcc_LP64.py
--- ns-3.19/src/csma-layout/bindings/modulegen__gcc_LP64.py	2014-06-17 10:34:00.282637866 -0700
+++ ns-3.20/src/csma-layout/bindings/modulegen__gcc_LP64.py	2014-06-17 10:33:13.614998115 -0700
@@ -72,34 +72,6 @@
     module.add_class('InetSocketAddress', import_from_module='ns.network')
     ## inet-socket-address.h (module 'network'): ns3::InetSocketAddress [class]
     root_module['ns3::InetSocketAddress'].implicitly_converts_to(root_module['ns3::Address'])
-    ## int-to-type.h (module 'core'): ns3::IntToType<0> [struct]
-    module.add_class('IntToType', import_from_module='ns.core', template_parameters=['0'])
-    ## int-to-type.h (module 'core'): ns3::IntToType<0>::v_e [enumeration]
-    module.add_enum('v_e', ['value'], outer_class=root_module['ns3::IntToType< 0 >'], import_from_module='ns.core')
-    ## int-to-type.h (module 'core'): ns3::IntToType<1> [struct]
-    module.add_class('IntToType', import_from_module='ns.core', template_parameters=['1'])
-    ## int-to-type.h (module 'core'): ns3::IntToType<1>::v_e [enumeration]
-    module.add_enum('v_e', ['value'], outer_class=root_module['ns3::IntToType< 1 >'], import_from_module='ns.core')
-    ## int-to-type.h (module 'core'): ns3::IntToType<2> [struct]
-    module.add_class('IntToType', import_from_module='ns.core', template_parameters=['2'])
-    ## int-to-type.h (module 'core'): ns3::IntToType<2>::v_e [enumeration]
-    module.add_enum('v_e', ['value'], outer_class=root_module['ns3::IntToType< 2 >'], import_from_module='ns.core')
-    ## int-to-type.h (module 'core'): ns3::IntToType<3> [struct]
-    module.add_class('IntToType', import_from_module='ns.core', template_parameters=['3'])
-    ## int-to-type.h (module 'core'): ns3::IntToType<3>::v_e [enumeration]
-    module.add_enum('v_e', ['value'], outer_class=root_module['ns3::IntToType< 3 >'], import_from_module='ns.core')
-    ## int-to-type.h (module 'core'): ns3::IntToType<4> [struct]
-    module.add_class('IntToType', import_from_module='ns.core', template_parameters=['4'])
-    ## int-to-type.h (module 'core'): ns3::IntToType<4>::v_e [enumeration]
-    module.add_enum('v_e', ['value'], outer_class=root_module['ns3::IntToType< 4 >'], import_from_module='ns.core')
-    ## int-to-type.h (module 'core'): ns3::IntToType<5> [struct]
-    module.add_class('IntToType', import_from_module='ns.core', template_parameters=['5'])
-    ## int-to-type.h (module 'core'): ns3::IntToType<5>::v_e [enumeration]
-    module.add_enum('v_e', ['value'], outer_class=root_module['ns3::IntToType< 5 >'], import_from_module='ns.core')
-    ## int-to-type.h (module 'core'): ns3::IntToType<6> [struct]
-    module.add_class('IntToType', import_from_module='ns.core', template_parameters=['6'])
-    ## int-to-type.h (module 'core'): ns3::IntToType<6>::v_e [enumeration]
-    module.add_enum('v_e', ['value'], outer_class=root_module['ns3::IntToType< 6 >'], 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]
@@ -165,7 +137,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'], 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_PRISM_HEADER', 'DLT_IEEE802_11_RADIO', 'DLT_IEEE802_15_4'], 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]
@@ -180,14 +152,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')
-    ## timer.h (module 'core'): ns3::Timer [class]
-    module.add_class('Timer', import_from_module='ns.core')
-    ## timer.h (module 'core'): ns3::Timer::DestroyPolicy [enumeration]
-    module.add_enum('DestroyPolicy', ['CANCEL_ON_DESTROY', 'REMOVE_ON_DESTROY', 'CHECK_ON_DESTROY'], outer_class=root_module['ns3::Timer'], import_from_module='ns.core')
-    ## timer.h (module 'core'): ns3::Timer::State [enumeration]
-    module.add_enum('State', ['RUNNING', 'EXPIRED', 'SUSPENDED'], outer_class=root_module['ns3::Timer'], import_from_module='ns.core')
-    ## timer-impl.h (module 'core'): ns3::TimerImpl [class]
-    module.add_class('TimerImpl', allow_subclassing=True, import_from_module='ns.core')
+    ## 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]
@@ -200,6 +166,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'])
     ## csma-helper.h (module 'csma'): ns3::CsmaHelper [class]
@@ -300,10 +268,6 @@
     module.add_class('EmptyAttributeValue', 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> >'])
-    ## ip-l4-protocol.h (module 'internet'): ns3::IpL4Protocol [class]
-    module.add_class('IpL4Protocol', import_from_module='ns.internet', parent=root_module['ns3::Object'])
-    ## ip-l4-protocol.h (module 'internet'): ns3::IpL4Protocol::RxStatus [enumeration]
-    module.add_enum('RxStatus', ['RX_OK', 'RX_CSUM_FAILED', 'RX_ENDPOINT_CLOSED', 'RX_ENDPOINT_UNREACH'], outer_class=root_module['ns3::IpL4Protocol'], import_from_module='ns.internet')
     ## ipv4.h (module 'internet'): ns3::Ipv4 [class]
     module.add_class('Ipv4', import_from_module='ns.internet', parent=root_module['ns3::Object'])
     ## ipv4-address.h (module 'network'): ns3::Ipv4AddressChecker [class]
@@ -330,12 +294,10 @@
     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-interface.h (module 'internet'): ns3::Ipv6Interface [class]
-    module.add_class('Ipv6Interface', import_from_module='ns.internet', parent=root_module['ns3::Object'])
     ## ipv6-l3-protocol.h (module 'internet'): ns3::Ipv6L3Protocol [class]
     module.add_class('Ipv6L3Protocol', import_from_module='ns.internet', parent=root_module['ns3::Ipv6'])
     ## ipv6-l3-protocol.h (module 'internet'): ns3::Ipv6L3Protocol::DropReason [enumeration]
-    module.add_enum('DropReason', ['DROP_TTL_EXPIRED', 'DROP_NO_ROUTE', 'DROP_INTERFACE_DOWN', 'DROP_ROUTE_ERROR', 'DROP_UNKNOWN_PROTOCOL'], outer_class=root_module['ns3::Ipv6L3Protocol'], import_from_module='ns.internet')
+    module.add_enum('DropReason', ['DROP_TTL_EXPIRED', 'DROP_NO_ROUTE', 'DROP_INTERFACE_DOWN', 'DROP_ROUTE_ERROR', 'DROP_UNKNOWN_PROTOCOL', 'DROP_UNKNOWN_OPTION', 'DROP_MALFORMED_HEADER', 'DROP_FRAGMENT_TIMEOUT'], outer_class=root_module['ns3::Ipv6L3Protocol'], import_from_module='ns.internet')
     ## ipv6-pmtu-cache.h (module 'internet'): ns3::Ipv6PmtuCache [class]
     module.add_class('Ipv6PmtuCache', import_from_module='ns.internet', parent=root_module['ns3::Object'])
     ## ipv6-address.h (module 'network'): ns3::Ipv6PrefixChecker [class]
@@ -368,8 +330,8 @@
     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< bool >', 'bool', container_type='vector')
-    module.add_container('std::map< unsigned int, unsigned int >', ('unsigned int', 'unsigned int'), container_type='map')
+    module.add_container('std::vector< bool >', 'bool', 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
     
@@ -392,12 +354,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
     
@@ -440,13 +402,6 @@
     register_Ns3Hasher_methods(root_module, root_module['ns3::Hasher'])
     register_Ns3Inet6SocketAddress_methods(root_module, root_module['ns3::Inet6SocketAddress'])
     register_Ns3InetSocketAddress_methods(root_module, root_module['ns3::InetSocketAddress'])
-    register_Ns3IntToType__0_methods(root_module, root_module['ns3::IntToType< 0 >'])
-    register_Ns3IntToType__1_methods(root_module, root_module['ns3::IntToType< 1 >'])
-    register_Ns3IntToType__2_methods(root_module, root_module['ns3::IntToType< 2 >'])
-    register_Ns3IntToType__3_methods(root_module, root_module['ns3::IntToType< 3 >'])
-    register_Ns3IntToType__4_methods(root_module, root_module['ns3::IntToType< 4 >'])
-    register_Ns3IntToType__5_methods(root_module, root_module['ns3::IntToType< 5 >'])
-    register_Ns3IntToType__6_methods(root_module, root_module['ns3::IntToType< 6 >'])
     register_Ns3Ipv4Address_methods(root_module, root_module['ns3::Ipv4Address'])
     register_Ns3Ipv4AddressHelper_methods(root_module, root_module['ns3::Ipv4AddressHelper'])
     register_Ns3Ipv4InterfaceAddress_methods(root_module, root_module['ns3::Ipv4InterfaceAddress'])
@@ -479,8 +434,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_Ns3Timer_methods(root_module, root_module['ns3::Timer'])
-    register_Ns3TimerImpl_methods(root_module, root_module['ns3::TimerImpl'])
+    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'])
@@ -529,7 +483,6 @@
     register_Ns3DataRateValue_methods(root_module, root_module['ns3::DataRateValue'])
     register_Ns3EmptyAttributeValue_methods(root_module, root_module['ns3::EmptyAttributeValue'])
     register_Ns3EventImpl_methods(root_module, root_module['ns3::EventImpl'])
-    register_Ns3IpL4Protocol_methods(root_module, root_module['ns3::IpL4Protocol'])
     register_Ns3Ipv4_methods(root_module, root_module['ns3::Ipv4'])
     register_Ns3Ipv4AddressChecker_methods(root_module, root_module['ns3::Ipv4AddressChecker'])
     register_Ns3Ipv4AddressValue_methods(root_module, root_module['ns3::Ipv4AddressValue'])
@@ -542,7 +495,6 @@
     register_Ns3Ipv6_methods(root_module, root_module['ns3::Ipv6'])
     register_Ns3Ipv6AddressChecker_methods(root_module, root_module['ns3::Ipv6AddressChecker'])
     register_Ns3Ipv6AddressValue_methods(root_module, root_module['ns3::Ipv6AddressValue'])
-    register_Ns3Ipv6Interface_methods(root_module, root_module['ns3::Ipv6Interface'])
     register_Ns3Ipv6L3Protocol_methods(root_module, root_module['ns3::Ipv6L3Protocol'])
     register_Ns3Ipv6PmtuCache_methods(root_module, root_module['ns3::Ipv6PmtuCache'])
     register_Ns3Ipv6PrefixChecker_methods(root_module, root_module['ns3::Ipv6PrefixChecker'])
@@ -1050,6 +1002,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', 
@@ -1062,6 +1018,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', 
@@ -1552,55 +1512,6 @@
                    [param('uint16_t', 'port')])
     return
 
-def register_Ns3IntToType__0_methods(root_module, cls):
-    ## int-to-type.h (module 'core'): ns3::IntToType<0>::IntToType() [constructor]
-    cls.add_constructor([])
-    ## int-to-type.h (module 'core'): ns3::IntToType<0>::IntToType(ns3::IntToType<0> const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::IntToType< 0 > const &', 'arg0')])
-    return
-
-def register_Ns3IntToType__1_methods(root_module, cls):
-    ## int-to-type.h (module 'core'): ns3::IntToType<1>::IntToType() [constructor]
-    cls.add_constructor([])
-    ## int-to-type.h (module 'core'): ns3::IntToType<1>::IntToType(ns3::IntToType<1> const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::IntToType< 1 > const &', 'arg0')])
-    return
-
-def register_Ns3IntToType__2_methods(root_module, cls):
-    ## int-to-type.h (module 'core'): ns3::IntToType<2>::IntToType() [constructor]
-    cls.add_constructor([])
-    ## int-to-type.h (module 'core'): ns3::IntToType<2>::IntToType(ns3::IntToType<2> const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::IntToType< 2 > const &', 'arg0')])
-    return
-
-def register_Ns3IntToType__3_methods(root_module, cls):
-    ## int-to-type.h (module 'core'): ns3::IntToType<3>::IntToType() [constructor]
-    cls.add_constructor([])
-    ## int-to-type.h (module 'core'): ns3::IntToType<3>::IntToType(ns3::IntToType<3> const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::IntToType< 3 > const &', 'arg0')])
-    return
-
-def register_Ns3IntToType__4_methods(root_module, cls):
-    ## int-to-type.h (module 'core'): ns3::IntToType<4>::IntToType() [constructor]
-    cls.add_constructor([])
-    ## int-to-type.h (module 'core'): ns3::IntToType<4>::IntToType(ns3::IntToType<4> const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::IntToType< 4 > const &', 'arg0')])
-    return
-
-def register_Ns3IntToType__5_methods(root_module, cls):
-    ## int-to-type.h (module 'core'): ns3::IntToType<5>::IntToType() [constructor]
-    cls.add_constructor([])
-    ## int-to-type.h (module 'core'): ns3::IntToType<5>::IntToType(ns3::IntToType<5> const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::IntToType< 5 > const &', 'arg0')])
-    return
-
-def register_Ns3IntToType__6_methods(root_module, cls):
-    ## int-to-type.h (module 'core'): ns3::IntToType<6>::IntToType() [constructor]
-    cls.add_constructor([])
-    ## int-to-type.h (module 'core'): ns3::IntToType<6>::IntToType(ns3::IntToType<6> const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::IntToType< 6 > const &', 'arg0')])
-    return
-
 def register_Ns3Ipv4Address_methods(root_module, cls):
     cls.add_binary_comparison_operator('<')
     cls.add_binary_comparison_operator('!=')
@@ -2240,6 +2151,11 @@
                    'ns3::Ipv6InterfaceAddress::State_e', 
                    [], 
                    is_const=True)
+    ## ipv6-interface-address.h (module 'internet'): bool ns3::Ipv6InterfaceAddress::IsInSameSubnet(ns3::Ipv6Address b) const [member function]
+    cls.add_method('IsInSameSubnet', 
+                   'bool', 
+                   [param('ns3::Ipv6Address', 'b')], 
+                   is_const=True)
     ## ipv6-interface-address.h (module 'internet'): void ns3::Ipv6InterfaceAddress::SetAddress(ns3::Ipv6Address address) [member function]
     cls.add_method('SetAddress', 
                    'void', 
@@ -3204,88 +3120,12 @@
                    [param('uint8_t', 'v')])
     return
 
-def register_Ns3Timer_methods(root_module, cls):
-    ## timer.h (module 'core'): ns3::Timer::Timer(ns3::Timer const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::Timer const &', 'arg0')])
-    ## timer.h (module 'core'): ns3::Timer::Timer() [constructor]
-    cls.add_constructor([])
-    ## timer.h (module 'core'): ns3::Timer::Timer(ns3::Timer::DestroyPolicy destroyPolicy) [constructor]
-    cls.add_constructor([param('ns3::Timer::DestroyPolicy', 'destroyPolicy')])
-    ## timer.h (module 'core'): void ns3::Timer::Cancel() [member function]
-    cls.add_method('Cancel', 
-                   'void', 
-                   [])
-    ## timer.h (module 'core'): ns3::Time ns3::Timer::GetDelay() const [member function]
-    cls.add_method('GetDelay', 
-                   'ns3::Time', 
-                   [], 
-                   is_const=True)
-    ## timer.h (module 'core'): ns3::Time ns3::Timer::GetDelayLeft() const [member function]
-    cls.add_method('GetDelayLeft', 
-                   'ns3::Time', 
-                   [], 
-                   is_const=True)
-    ## timer.h (module 'core'): ns3::Timer::State ns3::Timer::GetState() const [member function]
-    cls.add_method('GetState', 
-                   'ns3::Timer::State', 
-                   [], 
-                   is_const=True)
-    ## timer.h (module 'core'): bool ns3::Timer::IsExpired() const [member function]
-    cls.add_method('IsExpired', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## timer.h (module 'core'): bool ns3::Timer::IsRunning() const [member function]
-    cls.add_method('IsRunning', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## timer.h (module 'core'): bool ns3::Timer::IsSuspended() const [member function]
-    cls.add_method('IsSuspended', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## timer.h (module 'core'): void ns3::Timer::Remove() [member function]
-    cls.add_method('Remove', 
-                   'void', 
-                   [])
-    ## timer.h (module 'core'): void ns3::Timer::Resume() [member function]
-    cls.add_method('Resume', 
-                   'void', 
-                   [])
-    ## timer.h (module 'core'): void ns3::Timer::Schedule() [member function]
-    cls.add_method('Schedule', 
-                   'void', 
-                   [])
-    ## timer.h (module 'core'): void ns3::Timer::Schedule(ns3::Time delay) [member function]
-    cls.add_method('Schedule', 
-                   'void', 
-                   [param('ns3::Time', 'delay')])
-    ## timer.h (module 'core'): void ns3::Timer::SetDelay(ns3::Time const & delay) [member function]
-    cls.add_method('SetDelay', 
-                   'void', 
-                   [param('ns3::Time const &', 'delay')])
-    ## timer.h (module 'core'): void ns3::Timer::Suspend() [member function]
-    cls.add_method('Suspend', 
-                   'void', 
-                   [])
-    return
-
-def register_Ns3TimerImpl_methods(root_module, cls):
-    ## timer-impl.h (module 'core'): ns3::TimerImpl::TimerImpl() [constructor]
-    cls.add_constructor([])
-    ## timer-impl.h (module 'core'): ns3::TimerImpl::TimerImpl(ns3::TimerImpl const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::TimerImpl const &', 'arg0')])
-    ## timer-impl.h (module 'core'): void ns3::TimerImpl::Invoke() [member function]
-    cls.add_method('Invoke', 
-                   'void', 
-                   [], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## timer-impl.h (module 'core'): ns3::EventId ns3::TimerImpl::Schedule(ns3::Time const & delay) [member function]
-    cls.add_method('Schedule', 
-                   'ns3::EventId', 
-                   [param('ns3::Time const &', 'delay')], 
-                   is_pure_virtual=True, is_virtual=True)
+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):
@@ -3485,62 +3325,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('==')
@@ -3549,6 +3345,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]
@@ -3589,6 +3387,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):
@@ -4981,13 +4781,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('==')
@@ -5014,6 +4816,11 @@
     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', 
@@ -5567,63 +5374,6 @@
                    is_pure_virtual=True, visibility='protected', is_virtual=True)
     return
 
-def register_Ns3IpL4Protocol_methods(root_module, cls):
-    ## ip-l4-protocol.h (module 'internet'): ns3::IpL4Protocol::IpL4Protocol() [constructor]
-    cls.add_constructor([])
-    ## ip-l4-protocol.h (module 'internet'): ns3::IpL4Protocol::IpL4Protocol(ns3::IpL4Protocol const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::IpL4Protocol const &', 'arg0')])
-    ## ip-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::IpL4Protocol::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 >', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## ip-l4-protocol.h (module 'internet'): 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> ns3::IpL4Protocol::GetDownTarget6() const [member function]
-    cls.add_method('GetDownTarget6', 
-                   '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 >', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## ip-l4-protocol.h (module 'internet'): int ns3::IpL4Protocol::GetProtocolNumber() const [member function]
-    cls.add_method('GetProtocolNumber', 
-                   'int', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## ip-l4-protocol.h (module 'internet'): static ns3::TypeId ns3::IpL4Protocol::GetTypeId() [member function]
-    cls.add_method('GetTypeId', 
-                   'ns3::TypeId', 
-                   [], 
-                   is_static=True)
-    ## ip-l4-protocol.h (module 'internet'): ns3::IpL4Protocol::RxStatus ns3::IpL4Protocol::Receive(ns3::Ptr<ns3::Packet> p, ns3::Ipv4Header const & header, 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')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## ip-l4-protocol.h (module 'internet'): ns3::IpL4Protocol::RxStatus ns3::IpL4Protocol::Receive(ns3::Ptr<ns3::Packet> p, ns3::Ipv6Header const & header, 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')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## ip-l4-protocol.h (module 'internet'): void ns3::IpL4Protocol::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', 
-                   'void', 
-                   [param('ns3::Ipv4Address', 'icmpSource'), param('uint8_t', 'icmpTtl'), param('uint8_t', 'icmpType'), param('uint8_t', 'icmpCode'), param('uint32_t', 'icmpInfo'), param('ns3::Ipv4Address', 'payloadSource'), param('ns3::Ipv4Address', 'payloadDestination'), param('uint8_t const *', 'payload')], 
-                   is_virtual=True)
-    ## ip-l4-protocol.h (module 'internet'): void ns3::IpL4Protocol::ReceiveIcmp(ns3::Ipv6Address icmpSource, uint8_t icmpTtl, uint8_t icmpType, uint8_t icmpCode, uint32_t icmpInfo, ns3::Ipv6Address payloadSource, ns3::Ipv6Address payloadDestination, uint8_t const * payload) [member function]
-    cls.add_method('ReceiveIcmp', 
-                   'void', 
-                   [param('ns3::Ipv6Address', 'icmpSource'), param('uint8_t', 'icmpTtl'), param('uint8_t', 'icmpType'), param('uint8_t', 'icmpCode'), param('uint32_t', 'icmpInfo'), param('ns3::Ipv6Address', 'payloadSource'), param('ns3::Ipv6Address', 'payloadDestination'), param('uint8_t const *', 'payload')], 
-                   is_virtual=True)
-    ## ip-l4-protocol.h (module 'internet'): void ns3::IpL4Protocol::SetDownTarget(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> cb) [member function]
-    cls.add_method('SetDownTarget', 
-                   'void', 
-                   [param('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 >', 'cb')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## ip-l4-protocol.h (module 'internet'): void ns3::IpL4Protocol::SetDownTarget6(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) [member function]
-    cls.add_method('SetDownTarget6', 
-                   '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_pure_virtual=True, is_virtual=True)
-    return
-
 def register_Ns3Ipv4_methods(root_module, cls):
     ## ipv4.h (module 'internet'): ns3::Ipv4::Ipv4(ns3::Ipv4 const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::Ipv4 const &', 'arg0')])
@@ -5946,6 +5696,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', 
@@ -6299,6 +6054,11 @@
                    'ns3::Ptr< ns3::NetDevice >', 
                    [param('uint32_t', 'interface')], 
                    is_pure_virtual=True, is_virtual=True)
+    ## ipv6.h (module 'internet'): ns3::Ptr<ns3::IpL4Protocol> ns3::Ipv6::GetProtocol(int protocolNumber) const [member function]
+    cls.add_method('GetProtocol', 
+                   'ns3::Ptr< ns3::IpL4Protocol >', 
+                   [param('int', 'protocolNumber')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## ipv6.h (module 'internet'): ns3::Ptr<ns3::Ipv6RoutingProtocol> ns3::Ipv6::GetRoutingProtocol() const [member function]
     cls.add_method('GetRoutingProtocol', 
                    'ns3::Ptr< ns3::Ipv6RoutingProtocol >', 
@@ -6369,6 +6129,11 @@
                    'void', 
                    [param('uint32_t', 'interface')], 
                    is_pure_virtual=True, is_virtual=True)
+    ## ipv6.h (module 'internet'): ns3::Ipv6Address ns3::Ipv6::SourceAddressSelection(uint32_t interface, ns3::Ipv6Address dest) [member function]
+    cls.add_method('SourceAddressSelection', 
+                   'ns3::Ipv6Address', 
+                   [param('uint32_t', 'interface'), param('ns3::Ipv6Address', 'dest')], 
+                   is_pure_virtual=True, is_virtual=True)
     ## ipv6.h (module 'internet'): ns3::Ipv6::IF_ANY [variable]
     cls.add_static_attribute('IF_ANY', 'uint32_t const', is_const=True)
     ## ipv6.h (module 'internet'): bool ns3::Ipv6::GetIpForward() const [member function]
@@ -6433,151 +6198,6 @@
                    [param('ns3::Ipv6Address const &', 'value')])
     return
 
-def register_Ns3Ipv6Interface_methods(root_module, cls):
-    ## ipv6-interface.h (module 'internet'): ns3::Ipv6Interface::Ipv6Interface(ns3::Ipv6Interface const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::Ipv6Interface const &', 'arg0')])
-    ## ipv6-interface.h (module 'internet'): ns3::Ipv6Interface::Ipv6Interface() [constructor]
-    cls.add_constructor([])
-    ## ipv6-interface.h (module 'internet'): bool ns3::Ipv6Interface::AddAddress(ns3::Ipv6InterfaceAddress iface) [member function]
-    cls.add_method('AddAddress', 
-                   'bool', 
-                   [param('ns3::Ipv6InterfaceAddress', 'iface')])
-    ## ipv6-interface.h (module 'internet'): ns3::Ipv6InterfaceAddress ns3::Ipv6Interface::GetAddress(uint32_t index) const [member function]
-    cls.add_method('GetAddress', 
-                   'ns3::Ipv6InterfaceAddress', 
-                   [param('uint32_t', 'index')], 
-                   is_const=True)
-    ## ipv6-interface.h (module 'internet'): ns3::Ipv6InterfaceAddress ns3::Ipv6Interface::GetAddressMatchingDestination(ns3::Ipv6Address dst) [member function]
-    cls.add_method('GetAddressMatchingDestination', 
-                   'ns3::Ipv6InterfaceAddress', 
-                   [param('ns3::Ipv6Address', 'dst')])
-    ## ipv6-interface.h (module 'internet'): uint16_t ns3::Ipv6Interface::GetBaseReachableTime() const [member function]
-    cls.add_method('GetBaseReachableTime', 
-                   'uint16_t', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface.h (module 'internet'): uint8_t ns3::Ipv6Interface::GetCurHopLimit() const [member function]
-    cls.add_method('GetCurHopLimit', 
-                   'uint8_t', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface.h (module 'internet'): ns3::Ptr<ns3::NetDevice> ns3::Ipv6Interface::GetDevice() const [member function]
-    cls.add_method('GetDevice', 
-                   'ns3::Ptr< ns3::NetDevice >', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## ipv6-interface.h (module 'internet'): ns3::Ipv6InterfaceAddress ns3::Ipv6Interface::GetLinkLocalAddress() const [member function]
-    cls.add_method('GetLinkLocalAddress', 
-                   'ns3::Ipv6InterfaceAddress', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface.h (module 'internet'): uint16_t ns3::Ipv6Interface::GetMetric() const [member function]
-    cls.add_method('GetMetric', 
-                   'uint16_t', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface.h (module 'internet'): uint32_t ns3::Ipv6Interface::GetNAddresses() const [member function]
-    cls.add_method('GetNAddresses', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface.h (module 'internet'): uint16_t ns3::Ipv6Interface::GetReachableTime() const [member function]
-    cls.add_method('GetReachableTime', 
-                   'uint16_t', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface.h (module 'internet'): uint16_t ns3::Ipv6Interface::GetRetransTimer() const [member function]
-    cls.add_method('GetRetransTimer', 
-                   'uint16_t', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface.h (module 'internet'): static ns3::TypeId ns3::Ipv6Interface::GetTypeId() [member function]
-    cls.add_method('GetTypeId', 
-                   'ns3::TypeId', 
-                   [], 
-                   is_static=True)
-    ## ipv6-interface.h (module 'internet'): bool ns3::Ipv6Interface::IsDown() const [member function]
-    cls.add_method('IsDown', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface.h (module 'internet'): bool ns3::Ipv6Interface::IsForwarding() const [member function]
-    cls.add_method('IsForwarding', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface.h (module 'internet'): bool ns3::Ipv6Interface::IsUp() const [member function]
-    cls.add_method('IsUp', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface.h (module 'internet'): ns3::Ipv6InterfaceAddress ns3::Ipv6Interface::RemoveAddress(uint32_t index) [member function]
-    cls.add_method('RemoveAddress', 
-                   'ns3::Ipv6InterfaceAddress', 
-                   [param('uint32_t', 'index')])
-    ## ipv6-interface.h (module 'internet'): ns3::Ipv6InterfaceAddress ns3::Ipv6Interface::RemoveAddress(ns3::Ipv6Address address) [member function]
-    cls.add_method('RemoveAddress', 
-                   'ns3::Ipv6InterfaceAddress', 
-                   [param('ns3::Ipv6Address', 'address')])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::Send(ns3::Ptr<ns3::Packet> p, ns3::Ipv6Address dest) [member function]
-    cls.add_method('Send', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::Packet >', 'p'), param('ns3::Ipv6Address', 'dest')])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetBaseReachableTime(uint16_t baseReachableTime) [member function]
-    cls.add_method('SetBaseReachableTime', 
-                   'void', 
-                   [param('uint16_t', 'baseReachableTime')])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetCurHopLimit(uint8_t curHopLimit) [member function]
-    cls.add_method('SetCurHopLimit', 
-                   'void', 
-                   [param('uint8_t', 'curHopLimit')])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetDevice(ns3::Ptr<ns3::NetDevice> device) [member function]
-    cls.add_method('SetDevice', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::NetDevice >', 'device')])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetDown() [member function]
-    cls.add_method('SetDown', 
-                   'void', 
-                   [])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetForwarding(bool forward) [member function]
-    cls.add_method('SetForwarding', 
-                   'void', 
-                   [param('bool', 'forward')])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetMetric(uint16_t metric) [member function]
-    cls.add_method('SetMetric', 
-                   'void', 
-                   [param('uint16_t', 'metric')])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetNode(ns3::Ptr<ns3::Node> node) [member function]
-    cls.add_method('SetNode', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::Node >', 'node')])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetNsDadUid(ns3::Ipv6Address address, uint32_t uid) [member function]
-    cls.add_method('SetNsDadUid', 
-                   'void', 
-                   [param('ns3::Ipv6Address', 'address'), param('uint32_t', 'uid')])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetReachableTime(uint16_t reachableTime) [member function]
-    cls.add_method('SetReachableTime', 
-                   'void', 
-                   [param('uint16_t', 'reachableTime')])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetRetransTimer(uint16_t retransTimer) [member function]
-    cls.add_method('SetRetransTimer', 
-                   'void', 
-                   [param('uint16_t', 'retransTimer')])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetState(ns3::Ipv6Address address, ns3::Ipv6InterfaceAddress::State_e state) [member function]
-    cls.add_method('SetState', 
-                   'void', 
-                   [param('ns3::Ipv6Address', 'address'), param('ns3::Ipv6InterfaceAddress::State_e', 'state')])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetUp() [member function]
-    cls.add_method('SetUp', 
-                   'void', 
-                   [])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::DoDispose() [member function]
-    cls.add_method('DoDispose', 
-                   'void', 
-                   [], 
-                   visibility='protected', is_virtual=True)
-    return
-
 def register_Ns3Ipv6L3Protocol_methods(root_module, cls):
     ## ipv6-l3-protocol.h (module 'internet'): ns3::Ipv6L3Protocol::PROT_NUMBER [variable]
     cls.add_static_attribute('PROT_NUMBER', 'uint16_t const', is_const=True)
@@ -6604,7 +6224,7 @@
     cls.add_method('GetProtocol', 
                    'ns3::Ptr< ns3::IpL4Protocol >', 
                    [param('int', 'protocolNumber')], 
-                   is_const=True)
+                   is_const=True, is_virtual=True)
     ## ipv6-l3-protocol.h (module 'internet'): ns3::Ptr<ns3::Socket> ns3::Ipv6L3Protocol::CreateRawSocket() [member function]
     cls.add_method('CreateRawSocket', 
                    'ns3::Ptr< ns3::Socket >', 
@@ -6739,6 +6359,11 @@
                    'void', 
                    [param('uint32_t', 'i'), param('bool', 'val')], 
                    is_virtual=True)
+    ## ipv6-l3-protocol.h (module 'internet'): ns3::Ipv6Address ns3::Ipv6L3Protocol::SourceAddressSelection(uint32_t interface, ns3::Ipv6Address dest) [member function]
+    cls.add_method('SourceAddressSelection', 
+                   'ns3::Ipv6Address', 
+                   [param('uint32_t', 'interface'), param('ns3::Ipv6Address', 'dest')], 
+                   is_virtual=True)
     ## ipv6-l3-protocol.h (module 'internet'): ns3::Ptr<ns3::NetDevice> ns3::Ipv6L3Protocol::GetNetDevice(uint32_t i) [member function]
     cls.add_method('GetNetDevice', 
                    'ns3::Ptr< ns3::NetDevice >', 
@@ -6767,6 +6392,11 @@
                    'void', 
                    [], 
                    is_virtual=True)
+    ## ipv6-l3-protocol.h (module 'internet'): void ns3::Ipv6L3Protocol::ReportDrop(ns3::Ipv6Header ipHeader, ns3::Ptr<ns3::Packet> p, ns3::Ipv6L3Protocol::DropReason dropReason) [member function]
+    cls.add_method('ReportDrop', 
+                   'void', 
+                   [param('ns3::Ipv6Header', 'ipHeader'), param('ns3::Ptr< ns3::Packet >', 'p'), param('ns3::Ipv6L3Protocol::DropReason', 'dropReason')], 
+                   is_virtual=True)
     ## ipv6-l3-protocol.h (module 'internet'): void ns3::Ipv6L3Protocol::DoDispose() [member function]
     cls.add_method('DoDispose', 
                    'void', 
@@ -7374,10 +7004,10 @@
                    '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')])
     return
 
 def register_Ns3TimeValue_methods(root_module, cls):
diff -Naur ns-3.19/src/csma-layout/examples/waf ns-3.20/src/csma-layout/examples/waf
--- ns-3.19/src/csma-layout/examples/waf	2014-06-17 10:34:00.283637858 -0700
+++ ns-3.20/src/csma-layout/examples/waf	1969-12-31 16:00:00.000000000 -0800
@@ -1 +0,0 @@
-exec "`dirname "$0"`"/../../waf "$@"
diff -Naur ns-3.19/src/csma-layout/waf ns-3.20/src/csma-layout/waf
--- ns-3.19/src/csma-layout/waf	2014-06-17 10:34:00.284637851 -0700
+++ ns-3.20/src/csma-layout/waf	1969-12-31 16:00:00.000000000 -0800
@@ -1 +0,0 @@
-exec "`dirname "$0"`"/../../waf "$@"
\ No newline at end of file
diff -Naur ns-3.19/src/dsdv/bindings/modulegen__gcc_ILP32.py ns-3.20/src/dsdv/bindings/modulegen__gcc_ILP32.py
--- ns-3.19/src/dsdv/bindings/modulegen__gcc_ILP32.py	2014-06-17 10:34:00.308637665 -0700
+++ ns-3.20/src/dsdv/bindings/modulegen__gcc_ILP32.py	2014-06-17 10:33:13.639997922 -0700
@@ -100,12 +100,6 @@
     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-interface-address.h (module 'internet'): ns3::Ipv6InterfaceAddress [class]
-    module.add_class('Ipv6InterfaceAddress', import_from_module='ns.internet')
-    ## ipv6-interface-address.h (module 'internet'): ns3::Ipv6InterfaceAddress::State_e [enumeration]
-    module.add_enum('State_e', ['TENTATIVE', 'DEPRECATED', 'PREFERRED', 'PERMANENT', 'HOMEADDRESS', 'TENTATIVE_OPTIMISTIC', 'INVALID'], outer_class=root_module['ns3::Ipv6InterfaceAddress'], import_from_module='ns.internet')
-    ## ipv6-interface-address.h (module 'internet'): ns3::Ipv6InterfaceAddress::Scope_e [enumeration]
-    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')
     ## node-container.h (module 'network'): ns3::NodeContainer [class]
@@ -142,6 +136,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')
     ## timer.h (module 'core'): ns3::Timer [class]
     module.add_class('Timer', import_from_module='ns.core')
     ## timer.h (module 'core'): ns3::Timer::DestroyPolicy [enumeration]
@@ -162,6 +158,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'])
     ## dsdv-helper.h (module 'dsdv'): ns3::DsdvHelper [class]
@@ -174,10 +172,6 @@
     module.add_enum('DscpType', ['DscpDefault', 'DSCP_CS1', 'DSCP_AF11', 'DSCP_AF12', 'DSCP_AF13', 'DSCP_CS2', 'DSCP_AF21', 'DSCP_AF22', 'DSCP_AF23', 'DSCP_CS3', 'DSCP_AF31', 'DSCP_AF32', 'DSCP_AF33', 'DSCP_CS4', 'DSCP_AF41', 'DSCP_AF42', 'DSCP_AF43', 'DSCP_CS5', 'DSCP_EF', 'DSCP_CS6', 'DSCP_CS7'], outer_class=root_module['ns3::Ipv4Header'], import_from_module='ns.internet')
     ## ipv4-header.h (module 'internet'): ns3::Ipv4Header::EcnType [enumeration]
     module.add_enum('EcnType', ['ECN_NotECT', 'ECN_ECT1', 'ECN_ECT0', 'ECN_CE'], outer_class=root_module['ns3::Ipv4Header'], import_from_module='ns.internet')
-    ## ipv6-header.h (module 'internet'): ns3::Ipv6Header [class]
-    module.add_class('Ipv6Header', import_from_module='ns.internet', parent=root_module['ns3::Header'])
-    ## ipv6-header.h (module 'internet'): ns3::Ipv6Header::NextHeader_e [enumeration]
-    module.add_enum('NextHeader_e', ['IPV6_EXT_HOP_BY_HOP', 'IPV6_IPV4', 'IPV6_TCP', 'IPV6_UDP', 'IPV6_IPV6', 'IPV6_EXT_ROUTING', 'IPV6_EXT_FRAGMENTATION', 'IPV6_EXT_CONFIDENTIALITY', 'IPV6_EXT_AUTHENTIFICATION', 'IPV6_ICMPV6', 'IPV6_EXT_END', 'IPV6_EXT_DESTINATION', 'IPV6_SCTP', 'IPV6_EXT_MOBILITY', 'IPV6_UDP_LITE'], outer_class=root_module['ns3::Ipv6Header'], import_from_module='ns.internet')
     ## 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]
@@ -276,10 +270,6 @@
     module.add_class('ExponentialRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
     ## random-variable-stream.h (module 'core'): ns3::GammaRandomVariable [class]
     module.add_class('GammaRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
-    ## ip-l4-protocol.h (module 'internet'): ns3::IpL4Protocol [class]
-    module.add_class('IpL4Protocol', import_from_module='ns.internet', parent=root_module['ns3::Object'])
-    ## ip-l4-protocol.h (module 'internet'): ns3::IpL4Protocol::RxStatus [enumeration]
-    module.add_enum('RxStatus', ['RX_OK', 'RX_CSUM_FAILED', 'RX_ENDPOINT_CLOSED', 'RX_ENDPOINT_UNREACH'], outer_class=root_module['ns3::IpL4Protocol'], import_from_module='ns.internet')
     ## ipv4.h (module 'internet'): ns3::Ipv4 [class]
     module.add_class('Ipv4', import_from_module='ns.internet', parent=root_module['ns3::Object'])
     ## ipv4-address.h (module 'network'): ns3::Ipv4AddressChecker [class]
@@ -306,8 +296,6 @@
     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-interface.h (module 'internet'): ns3::Ipv6Interface [class]
-    module.add_class('Ipv6Interface', import_from_module='ns.internet', parent=root_module['ns3::Object'])
     ## 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]
@@ -346,7 +334,7 @@
     module.add_class('AddressValue', import_from_module='ns.network', parent=root_module['ns3::AttributeValue'])
     ## ipv4-list-routing.h (module 'internet'): ns3::Ipv4ListRouting [class]
     module.add_class('Ipv4ListRouting', import_from_module='ns.internet', parent=root_module['ns3::Ipv4RoutingProtocol'])
-    module.add_container('std::map< unsigned int, unsigned int >', ('unsigned int', 'unsigned int'), container_type='map')
+    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
     
@@ -375,12 +363,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
     
@@ -417,7 +405,7 @@
     module.add_class('RoutingTable')
     ## dsdv-rtable.h (module 'dsdv'): ns3::dsdv::RoutingTableEntry [class]
     module.add_class('RoutingTableEntry')
-    module.add_container('std::map< ns3::Ipv4Address, ns3::dsdv::RoutingTableEntry >', ('ns3::Ipv4Address', 'ns3::dsdv::RoutingTableEntry'), container_type='map')
+    module.add_container('std::map< ns3::Ipv4Address, ns3::dsdv::RoutingTableEntry >', ('ns3::Ipv4Address', 'ns3::dsdv::RoutingTableEntry'), container_type=u'map')
 
 def register_methods(root_module):
     register_Ns3Address_methods(root_module, root_module['ns3::Address'])
@@ -447,7 +435,6 @@
     register_Ns3Ipv4Mask_methods(root_module, root_module['ns3::Ipv4Mask'])
     register_Ns3Ipv4RoutingHelper_methods(root_module, root_module['ns3::Ipv4RoutingHelper'])
     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_Ns3NodeContainer_methods(root_module, root_module['ns3::NodeContainer'])
     register_Ns3ObjectBase_methods(root_module, root_module['ns3::ObjectBase'])
@@ -464,6 +451,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_Ns3Timer_methods(root_module, root_module['ns3::Timer'])
     register_Ns3TimerImpl_methods(root_module, root_module['ns3::TimerImpl'])
     register_Ns3TypeId_methods(root_module, root_module['ns3::TypeId'])
@@ -475,7 +463,6 @@
     register_Ns3DsdvHelper_methods(root_module, root_module['ns3::DsdvHelper'])
     register_Ns3Header_methods(root_module, root_module['ns3::Header'])
     register_Ns3Ipv4Header_methods(root_module, root_module['ns3::Ipv4Header'])
-    register_Ns3Ipv6Header_methods(root_module, root_module['ns3::Ipv6Header'])
     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'])
@@ -521,7 +508,6 @@
     register_Ns3EventImpl_methods(root_module, root_module['ns3::EventImpl'])
     register_Ns3ExponentialRandomVariable_methods(root_module, root_module['ns3::ExponentialRandomVariable'])
     register_Ns3GammaRandomVariable_methods(root_module, root_module['ns3::GammaRandomVariable'])
-    register_Ns3IpL4Protocol_methods(root_module, root_module['ns3::IpL4Protocol'])
     register_Ns3Ipv4_methods(root_module, root_module['ns3::Ipv4'])
     register_Ns3Ipv4AddressChecker_methods(root_module, root_module['ns3::Ipv4AddressChecker'])
     register_Ns3Ipv4AddressValue_methods(root_module, root_module['ns3::Ipv4AddressValue'])
@@ -534,7 +520,6 @@
     register_Ns3Ipv4RoutingProtocol_methods(root_module, root_module['ns3::Ipv4RoutingProtocol'])
     register_Ns3Ipv6AddressChecker_methods(root_module, root_module['ns3::Ipv6AddressChecker'])
     register_Ns3Ipv6AddressValue_methods(root_module, root_module['ns3::Ipv6AddressValue'])
-    register_Ns3Ipv6Interface_methods(root_module, root_module['ns3::Ipv6Interface'])
     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'])
@@ -811,6 +796,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', 
@@ -823,6 +812,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', 
@@ -1721,61 +1714,6 @@
                    [param('uint8_t *', 'address')])
     return
 
-def register_Ns3Ipv6InterfaceAddress_methods(root_module, cls):
-    cls.add_binary_comparison_operator('!=')
-    cls.add_output_stream_operator()
-    cls.add_binary_comparison_operator('==')
-    ## ipv6-interface-address.h (module 'internet'): ns3::Ipv6InterfaceAddress::Ipv6InterfaceAddress() [constructor]
-    cls.add_constructor([])
-    ## ipv6-interface-address.h (module 'internet'): ns3::Ipv6InterfaceAddress::Ipv6InterfaceAddress(ns3::Ipv6Address address) [constructor]
-    cls.add_constructor([param('ns3::Ipv6Address', 'address')])
-    ## ipv6-interface-address.h (module 'internet'): ns3::Ipv6InterfaceAddress::Ipv6InterfaceAddress(ns3::Ipv6Address address, ns3::Ipv6Prefix prefix) [constructor]
-    cls.add_constructor([param('ns3::Ipv6Address', 'address'), param('ns3::Ipv6Prefix', 'prefix')])
-    ## ipv6-interface-address.h (module 'internet'): ns3::Ipv6InterfaceAddress::Ipv6InterfaceAddress(ns3::Ipv6InterfaceAddress const & o) [copy constructor]
-    cls.add_constructor([param('ns3::Ipv6InterfaceAddress const &', 'o')])
-    ## ipv6-interface-address.h (module 'internet'): ns3::Ipv6Address ns3::Ipv6InterfaceAddress::GetAddress() const [member function]
-    cls.add_method('GetAddress', 
-                   'ns3::Ipv6Address', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface-address.h (module 'internet'): uint32_t ns3::Ipv6InterfaceAddress::GetNsDadUid() const [member function]
-    cls.add_method('GetNsDadUid', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface-address.h (module 'internet'): ns3::Ipv6Prefix ns3::Ipv6InterfaceAddress::GetPrefix() const [member function]
-    cls.add_method('GetPrefix', 
-                   'ns3::Ipv6Prefix', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface-address.h (module 'internet'): ns3::Ipv6InterfaceAddress::Scope_e ns3::Ipv6InterfaceAddress::GetScope() const [member function]
-    cls.add_method('GetScope', 
-                   'ns3::Ipv6InterfaceAddress::Scope_e', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface-address.h (module 'internet'): ns3::Ipv6InterfaceAddress::State_e ns3::Ipv6InterfaceAddress::GetState() const [member function]
-    cls.add_method('GetState', 
-                   'ns3::Ipv6InterfaceAddress::State_e', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface-address.h (module 'internet'): void ns3::Ipv6InterfaceAddress::SetAddress(ns3::Ipv6Address address) [member function]
-    cls.add_method('SetAddress', 
-                   'void', 
-                   [param('ns3::Ipv6Address', 'address')])
-    ## ipv6-interface-address.h (module 'internet'): void ns3::Ipv6InterfaceAddress::SetNsDadUid(uint32_t uid) [member function]
-    cls.add_method('SetNsDadUid', 
-                   'void', 
-                   [param('uint32_t', 'uid')])
-    ## ipv6-interface-address.h (module 'internet'): void ns3::Ipv6InterfaceAddress::SetScope(ns3::Ipv6InterfaceAddress::Scope_e scope) [member function]
-    cls.add_method('SetScope', 
-                   'void', 
-                   [param('ns3::Ipv6InterfaceAddress::Scope_e', 'scope')])
-    ## ipv6-interface-address.h (module 'internet'): void ns3::Ipv6InterfaceAddress::SetState(ns3::Ipv6InterfaceAddress::State_e state) [member function]
-    cls.add_method('SetState', 
-                   'void', 
-                   [param('ns3::Ipv6InterfaceAddress::State_e', 'state')])
-    return
-
 def register_Ns3Ipv6Prefix_methods(root_module, cls):
     cls.add_binary_comparison_operator('!=')
     cls.add_output_stream_operator()
@@ -2385,6 +2323,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_Ns3Timer_methods(root_module, cls):
     ## timer.h (module 'core'): ns3::Timer::Timer(ns3::Timer const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::Timer const &', 'arg0')])
@@ -2666,62 +2612,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('==')
@@ -2730,6 +2632,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]
@@ -2770,6 +2674,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):
@@ -3020,106 +2926,6 @@
                    [param('uint8_t', 'ttl')])
     return
 
-def register_Ns3Ipv6Header_methods(root_module, cls):
-    ## ipv6-header.h (module 'internet'): ns3::Ipv6Header::Ipv6Header(ns3::Ipv6Header const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::Ipv6Header const &', 'arg0')])
-    ## ipv6-header.h (module 'internet'): ns3::Ipv6Header::Ipv6Header() [constructor]
-    cls.add_constructor([])
-    ## ipv6-header.h (module 'internet'): uint32_t ns3::Ipv6Header::Deserialize(ns3::Buffer::Iterator start) [member function]
-    cls.add_method('Deserialize', 
-                   'uint32_t', 
-                   [param('ns3::Buffer::Iterator', 'start')], 
-                   is_virtual=True)
-    ## ipv6-header.h (module 'internet'): ns3::Ipv6Address ns3::Ipv6Header::GetDestinationAddress() const [member function]
-    cls.add_method('GetDestinationAddress', 
-                   'ns3::Ipv6Address', 
-                   [], 
-                   is_const=True)
-    ## ipv6-header.h (module 'internet'): uint32_t ns3::Ipv6Header::GetFlowLabel() const [member function]
-    cls.add_method('GetFlowLabel', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    ## ipv6-header.h (module 'internet'): uint8_t ns3::Ipv6Header::GetHopLimit() const [member function]
-    cls.add_method('GetHopLimit', 
-                   'uint8_t', 
-                   [], 
-                   is_const=True)
-    ## ipv6-header.h (module 'internet'): ns3::TypeId ns3::Ipv6Header::GetInstanceTypeId() const [member function]
-    cls.add_method('GetInstanceTypeId', 
-                   'ns3::TypeId', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## ipv6-header.h (module 'internet'): uint8_t ns3::Ipv6Header::GetNextHeader() const [member function]
-    cls.add_method('GetNextHeader', 
-                   'uint8_t', 
-                   [], 
-                   is_const=True)
-    ## ipv6-header.h (module 'internet'): uint16_t ns3::Ipv6Header::GetPayloadLength() const [member function]
-    cls.add_method('GetPayloadLength', 
-                   'uint16_t', 
-                   [], 
-                   is_const=True)
-    ## ipv6-header.h (module 'internet'): uint32_t ns3::Ipv6Header::GetSerializedSize() const [member function]
-    cls.add_method('GetSerializedSize', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## ipv6-header.h (module 'internet'): ns3::Ipv6Address ns3::Ipv6Header::GetSourceAddress() const [member function]
-    cls.add_method('GetSourceAddress', 
-                   'ns3::Ipv6Address', 
-                   [], 
-                   is_const=True)
-    ## ipv6-header.h (module 'internet'): uint8_t ns3::Ipv6Header::GetTrafficClass() const [member function]
-    cls.add_method('GetTrafficClass', 
-                   'uint8_t', 
-                   [], 
-                   is_const=True)
-    ## ipv6-header.h (module 'internet'): static ns3::TypeId ns3::Ipv6Header::GetTypeId() [member function]
-    cls.add_method('GetTypeId', 
-                   'ns3::TypeId', 
-                   [], 
-                   is_static=True)
-    ## ipv6-header.h (module 'internet'): void ns3::Ipv6Header::Print(std::ostream & os) const [member function]
-    cls.add_method('Print', 
-                   'void', 
-                   [param('std::ostream &', 'os')], 
-                   is_const=True, is_virtual=True)
-    ## ipv6-header.h (module 'internet'): void ns3::Ipv6Header::Serialize(ns3::Buffer::Iterator start) const [member function]
-    cls.add_method('Serialize', 
-                   'void', 
-                   [param('ns3::Buffer::Iterator', 'start')], 
-                   is_const=True, is_virtual=True)
-    ## ipv6-header.h (module 'internet'): void ns3::Ipv6Header::SetDestinationAddress(ns3::Ipv6Address dst) [member function]
-    cls.add_method('SetDestinationAddress', 
-                   'void', 
-                   [param('ns3::Ipv6Address', 'dst')])
-    ## ipv6-header.h (module 'internet'): void ns3::Ipv6Header::SetFlowLabel(uint32_t flow) [member function]
-    cls.add_method('SetFlowLabel', 
-                   'void', 
-                   [param('uint32_t', 'flow')])
-    ## ipv6-header.h (module 'internet'): void ns3::Ipv6Header::SetHopLimit(uint8_t limit) [member function]
-    cls.add_method('SetHopLimit', 
-                   'void', 
-                   [param('uint8_t', 'limit')])
-    ## ipv6-header.h (module 'internet'): void ns3::Ipv6Header::SetNextHeader(uint8_t next) [member function]
-    cls.add_method('SetNextHeader', 
-                   'void', 
-                   [param('uint8_t', 'next')])
-    ## ipv6-header.h (module 'internet'): void ns3::Ipv6Header::SetPayloadLength(uint16_t len) [member function]
-    cls.add_method('SetPayloadLength', 
-                   'void', 
-                   [param('uint16_t', 'len')])
-    ## ipv6-header.h (module 'internet'): void ns3::Ipv6Header::SetSourceAddress(ns3::Ipv6Address src) [member function]
-    cls.add_method('SetSourceAddress', 
-                   'void', 
-                   [param('ns3::Ipv6Address', 'src')])
-    ## ipv6-header.h (module 'internet'): void ns3::Ipv6Header::SetTrafficClass(uint8_t traffic) [member function]
-    cls.add_method('SetTrafficClass', 
-                   'void', 
-                   [param('uint8_t', 'traffic')])
-    return
-
 def register_Ns3Object_methods(root_module, cls):
     ## object.h (module 'core'): ns3::Object::Object() [constructor]
     cls.add_constructor([])
@@ -4025,13 +3831,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('==')
@@ -4058,6 +3866,11 @@
     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', 
@@ -4859,63 +4672,6 @@
                    is_virtual=True)
     return
 
-def register_Ns3IpL4Protocol_methods(root_module, cls):
-    ## ip-l4-protocol.h (module 'internet'): ns3::IpL4Protocol::IpL4Protocol() [constructor]
-    cls.add_constructor([])
-    ## ip-l4-protocol.h (module 'internet'): ns3::IpL4Protocol::IpL4Protocol(ns3::IpL4Protocol const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::IpL4Protocol const &', 'arg0')])
-    ## ip-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::IpL4Protocol::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 >', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## ip-l4-protocol.h (module 'internet'): 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> ns3::IpL4Protocol::GetDownTarget6() const [member function]
-    cls.add_method('GetDownTarget6', 
-                   '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 >', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## ip-l4-protocol.h (module 'internet'): int ns3::IpL4Protocol::GetProtocolNumber() const [member function]
-    cls.add_method('GetProtocolNumber', 
-                   'int', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## ip-l4-protocol.h (module 'internet'): static ns3::TypeId ns3::IpL4Protocol::GetTypeId() [member function]
-    cls.add_method('GetTypeId', 
-                   'ns3::TypeId', 
-                   [], 
-                   is_static=True)
-    ## ip-l4-protocol.h (module 'internet'): ns3::IpL4Protocol::RxStatus ns3::IpL4Protocol::Receive(ns3::Ptr<ns3::Packet> p, ns3::Ipv4Header const & header, 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')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## ip-l4-protocol.h (module 'internet'): ns3::IpL4Protocol::RxStatus ns3::IpL4Protocol::Receive(ns3::Ptr<ns3::Packet> p, ns3::Ipv6Header const & header, 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')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## ip-l4-protocol.h (module 'internet'): void ns3::IpL4Protocol::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', 
-                   'void', 
-                   [param('ns3::Ipv4Address', 'icmpSource'), param('uint8_t', 'icmpTtl'), param('uint8_t', 'icmpType'), param('uint8_t', 'icmpCode'), param('uint32_t', 'icmpInfo'), param('ns3::Ipv4Address', 'payloadSource'), param('ns3::Ipv4Address', 'payloadDestination'), param('uint8_t const *', 'payload')], 
-                   is_virtual=True)
-    ## ip-l4-protocol.h (module 'internet'): void ns3::IpL4Protocol::ReceiveIcmp(ns3::Ipv6Address icmpSource, uint8_t icmpTtl, uint8_t icmpType, uint8_t icmpCode, uint32_t icmpInfo, ns3::Ipv6Address payloadSource, ns3::Ipv6Address payloadDestination, uint8_t const * payload) [member function]
-    cls.add_method('ReceiveIcmp', 
-                   'void', 
-                   [param('ns3::Ipv6Address', 'icmpSource'), param('uint8_t', 'icmpTtl'), param('uint8_t', 'icmpType'), param('uint8_t', 'icmpCode'), param('uint32_t', 'icmpInfo'), param('ns3::Ipv6Address', 'payloadSource'), param('ns3::Ipv6Address', 'payloadDestination'), param('uint8_t const *', 'payload')], 
-                   is_virtual=True)
-    ## ip-l4-protocol.h (module 'internet'): void ns3::IpL4Protocol::SetDownTarget(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> cb) [member function]
-    cls.add_method('SetDownTarget', 
-                   'void', 
-                   [param('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 >', 'cb')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## ip-l4-protocol.h (module 'internet'): void ns3::IpL4Protocol::SetDownTarget6(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) [member function]
-    cls.add_method('SetDownTarget6', 
-                   '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_pure_virtual=True, is_virtual=True)
-    return
-
 def register_Ns3Ipv4_methods(root_module, cls):
     ## ipv4.h (module 'internet'): ns3::Ipv4::Ipv4(ns3::Ipv4 const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::Ipv4 const &', 'arg0')])
@@ -5339,6 +5095,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', 
@@ -5672,151 +5433,6 @@
                    [param('ns3::Ipv6Address const &', 'value')])
     return
 
-def register_Ns3Ipv6Interface_methods(root_module, cls):
-    ## ipv6-interface.h (module 'internet'): ns3::Ipv6Interface::Ipv6Interface(ns3::Ipv6Interface const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::Ipv6Interface const &', 'arg0')])
-    ## ipv6-interface.h (module 'internet'): ns3::Ipv6Interface::Ipv6Interface() [constructor]
-    cls.add_constructor([])
-    ## ipv6-interface.h (module 'internet'): bool ns3::Ipv6Interface::AddAddress(ns3::Ipv6InterfaceAddress iface) [member function]
-    cls.add_method('AddAddress', 
-                   'bool', 
-                   [param('ns3::Ipv6InterfaceAddress', 'iface')])
-    ## ipv6-interface.h (module 'internet'): ns3::Ipv6InterfaceAddress ns3::Ipv6Interface::GetAddress(uint32_t index) const [member function]
-    cls.add_method('GetAddress', 
-                   'ns3::Ipv6InterfaceAddress', 
-                   [param('uint32_t', 'index')], 
-                   is_const=True)
-    ## ipv6-interface.h (module 'internet'): ns3::Ipv6InterfaceAddress ns3::Ipv6Interface::GetAddressMatchingDestination(ns3::Ipv6Address dst) [member function]
-    cls.add_method('GetAddressMatchingDestination', 
-                   'ns3::Ipv6InterfaceAddress', 
-                   [param('ns3::Ipv6Address', 'dst')])
-    ## ipv6-interface.h (module 'internet'): uint16_t ns3::Ipv6Interface::GetBaseReachableTime() const [member function]
-    cls.add_method('GetBaseReachableTime', 
-                   'uint16_t', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface.h (module 'internet'): uint8_t ns3::Ipv6Interface::GetCurHopLimit() const [member function]
-    cls.add_method('GetCurHopLimit', 
-                   'uint8_t', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface.h (module 'internet'): ns3::Ptr<ns3::NetDevice> ns3::Ipv6Interface::GetDevice() const [member function]
-    cls.add_method('GetDevice', 
-                   'ns3::Ptr< ns3::NetDevice >', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## ipv6-interface.h (module 'internet'): ns3::Ipv6InterfaceAddress ns3::Ipv6Interface::GetLinkLocalAddress() const [member function]
-    cls.add_method('GetLinkLocalAddress', 
-                   'ns3::Ipv6InterfaceAddress', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface.h (module 'internet'): uint16_t ns3::Ipv6Interface::GetMetric() const [member function]
-    cls.add_method('GetMetric', 
-                   'uint16_t', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface.h (module 'internet'): uint32_t ns3::Ipv6Interface::GetNAddresses() const [member function]
-    cls.add_method('GetNAddresses', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface.h (module 'internet'): uint16_t ns3::Ipv6Interface::GetReachableTime() const [member function]
-    cls.add_method('GetReachableTime', 
-                   'uint16_t', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface.h (module 'internet'): uint16_t ns3::Ipv6Interface::GetRetransTimer() const [member function]
-    cls.add_method('GetRetransTimer', 
-                   'uint16_t', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface.h (module 'internet'): static ns3::TypeId ns3::Ipv6Interface::GetTypeId() [member function]
-    cls.add_method('GetTypeId', 
-                   'ns3::TypeId', 
-                   [], 
-                   is_static=True)
-    ## ipv6-interface.h (module 'internet'): bool ns3::Ipv6Interface::IsDown() const [member function]
-    cls.add_method('IsDown', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface.h (module 'internet'): bool ns3::Ipv6Interface::IsForwarding() const [member function]
-    cls.add_method('IsForwarding', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface.h (module 'internet'): bool ns3::Ipv6Interface::IsUp() const [member function]
-    cls.add_method('IsUp', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface.h (module 'internet'): ns3::Ipv6InterfaceAddress ns3::Ipv6Interface::RemoveAddress(uint32_t index) [member function]
-    cls.add_method('RemoveAddress', 
-                   'ns3::Ipv6InterfaceAddress', 
-                   [param('uint32_t', 'index')])
-    ## ipv6-interface.h (module 'internet'): ns3::Ipv6InterfaceAddress ns3::Ipv6Interface::RemoveAddress(ns3::Ipv6Address address) [member function]
-    cls.add_method('RemoveAddress', 
-                   'ns3::Ipv6InterfaceAddress', 
-                   [param('ns3::Ipv6Address', 'address')])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::Send(ns3::Ptr<ns3::Packet> p, ns3::Ipv6Address dest) [member function]
-    cls.add_method('Send', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::Packet >', 'p'), param('ns3::Ipv6Address', 'dest')])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetBaseReachableTime(uint16_t baseReachableTime) [member function]
-    cls.add_method('SetBaseReachableTime', 
-                   'void', 
-                   [param('uint16_t', 'baseReachableTime')])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetCurHopLimit(uint8_t curHopLimit) [member function]
-    cls.add_method('SetCurHopLimit', 
-                   'void', 
-                   [param('uint8_t', 'curHopLimit')])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetDevice(ns3::Ptr<ns3::NetDevice> device) [member function]
-    cls.add_method('SetDevice', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::NetDevice >', 'device')])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetDown() [member function]
-    cls.add_method('SetDown', 
-                   'void', 
-                   [])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetForwarding(bool forward) [member function]
-    cls.add_method('SetForwarding', 
-                   'void', 
-                   [param('bool', 'forward')])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetMetric(uint16_t metric) [member function]
-    cls.add_method('SetMetric', 
-                   'void', 
-                   [param('uint16_t', 'metric')])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetNode(ns3::Ptr<ns3::Node> node) [member function]
-    cls.add_method('SetNode', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::Node >', 'node')])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetNsDadUid(ns3::Ipv6Address address, uint32_t uid) [member function]
-    cls.add_method('SetNsDadUid', 
-                   'void', 
-                   [param('ns3::Ipv6Address', 'address'), param('uint32_t', 'uid')])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetReachableTime(uint16_t reachableTime) [member function]
-    cls.add_method('SetReachableTime', 
-                   'void', 
-                   [param('uint16_t', 'reachableTime')])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetRetransTimer(uint16_t retransTimer) [member function]
-    cls.add_method('SetRetransTimer', 
-                   'void', 
-                   [param('uint16_t', 'retransTimer')])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetState(ns3::Ipv6Address address, ns3::Ipv6InterfaceAddress::State_e state) [member function]
-    cls.add_method('SetState', 
-                   'void', 
-                   [param('ns3::Ipv6Address', 'address'), param('ns3::Ipv6InterfaceAddress::State_e', 'state')])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetUp() [member function]
-    cls.add_method('SetUp', 
-                   'void', 
-                   [])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::DoDispose() [member function]
-    cls.add_method('DoDispose', 
-                   'void', 
-                   [], 
-                   visibility='protected', is_virtual=True)
-    return
-
 def register_Ns3Ipv6PrefixChecker_methods(root_module, cls):
     ## ipv6-address.h (module 'network'): ns3::Ipv6PrefixChecker::Ipv6PrefixChecker() [constructor]
     cls.add_constructor([])
@@ -6431,10 +6047,10 @@
                    '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')])
     return
 
 def register_Ns3ParetoRandomVariable_methods(root_module, cls):
diff -Naur ns-3.19/src/dsdv/bindings/modulegen__gcc_LP64.py ns-3.20/src/dsdv/bindings/modulegen__gcc_LP64.py
--- ns-3.19/src/dsdv/bindings/modulegen__gcc_LP64.py	2014-06-17 10:34:00.312637634 -0700
+++ ns-3.20/src/dsdv/bindings/modulegen__gcc_LP64.py	2014-06-17 10:33:13.644997883 -0700
@@ -100,12 +100,6 @@
     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-interface-address.h (module 'internet'): ns3::Ipv6InterfaceAddress [class]
-    module.add_class('Ipv6InterfaceAddress', import_from_module='ns.internet')
-    ## ipv6-interface-address.h (module 'internet'): ns3::Ipv6InterfaceAddress::State_e [enumeration]
-    module.add_enum('State_e', ['TENTATIVE', 'DEPRECATED', 'PREFERRED', 'PERMANENT', 'HOMEADDRESS', 'TENTATIVE_OPTIMISTIC', 'INVALID'], outer_class=root_module['ns3::Ipv6InterfaceAddress'], import_from_module='ns.internet')
-    ## ipv6-interface-address.h (module 'internet'): ns3::Ipv6InterfaceAddress::Scope_e [enumeration]
-    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')
     ## node-container.h (module 'network'): ns3::NodeContainer [class]
@@ -142,6 +136,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')
     ## timer.h (module 'core'): ns3::Timer [class]
     module.add_class('Timer', import_from_module='ns.core')
     ## timer.h (module 'core'): ns3::Timer::DestroyPolicy [enumeration]
@@ -162,6 +158,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'])
     ## dsdv-helper.h (module 'dsdv'): ns3::DsdvHelper [class]
@@ -174,10 +172,6 @@
     module.add_enum('DscpType', ['DscpDefault', 'DSCP_CS1', 'DSCP_AF11', 'DSCP_AF12', 'DSCP_AF13', 'DSCP_CS2', 'DSCP_AF21', 'DSCP_AF22', 'DSCP_AF23', 'DSCP_CS3', 'DSCP_AF31', 'DSCP_AF32', 'DSCP_AF33', 'DSCP_CS4', 'DSCP_AF41', 'DSCP_AF42', 'DSCP_AF43', 'DSCP_CS5', 'DSCP_EF', 'DSCP_CS6', 'DSCP_CS7'], outer_class=root_module['ns3::Ipv4Header'], import_from_module='ns.internet')
     ## ipv4-header.h (module 'internet'): ns3::Ipv4Header::EcnType [enumeration]
     module.add_enum('EcnType', ['ECN_NotECT', 'ECN_ECT1', 'ECN_ECT0', 'ECN_CE'], outer_class=root_module['ns3::Ipv4Header'], import_from_module='ns.internet')
-    ## ipv6-header.h (module 'internet'): ns3::Ipv6Header [class]
-    module.add_class('Ipv6Header', import_from_module='ns.internet', parent=root_module['ns3::Header'])
-    ## ipv6-header.h (module 'internet'): ns3::Ipv6Header::NextHeader_e [enumeration]
-    module.add_enum('NextHeader_e', ['IPV6_EXT_HOP_BY_HOP', 'IPV6_IPV4', 'IPV6_TCP', 'IPV6_UDP', 'IPV6_IPV6', 'IPV6_EXT_ROUTING', 'IPV6_EXT_FRAGMENTATION', 'IPV6_EXT_CONFIDENTIALITY', 'IPV6_EXT_AUTHENTIFICATION', 'IPV6_ICMPV6', 'IPV6_EXT_END', 'IPV6_EXT_DESTINATION', 'IPV6_SCTP', 'IPV6_EXT_MOBILITY', 'IPV6_UDP_LITE'], outer_class=root_module['ns3::Ipv6Header'], import_from_module='ns.internet')
     ## 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]
@@ -276,10 +270,6 @@
     module.add_class('ExponentialRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
     ## random-variable-stream.h (module 'core'): ns3::GammaRandomVariable [class]
     module.add_class('GammaRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
-    ## ip-l4-protocol.h (module 'internet'): ns3::IpL4Protocol [class]
-    module.add_class('IpL4Protocol', import_from_module='ns.internet', parent=root_module['ns3::Object'])
-    ## ip-l4-protocol.h (module 'internet'): ns3::IpL4Protocol::RxStatus [enumeration]
-    module.add_enum('RxStatus', ['RX_OK', 'RX_CSUM_FAILED', 'RX_ENDPOINT_CLOSED', 'RX_ENDPOINT_UNREACH'], outer_class=root_module['ns3::IpL4Protocol'], import_from_module='ns.internet')
     ## ipv4.h (module 'internet'): ns3::Ipv4 [class]
     module.add_class('Ipv4', import_from_module='ns.internet', parent=root_module['ns3::Object'])
     ## ipv4-address.h (module 'network'): ns3::Ipv4AddressChecker [class]
@@ -306,8 +296,6 @@
     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-interface.h (module 'internet'): ns3::Ipv6Interface [class]
-    module.add_class('Ipv6Interface', import_from_module='ns.internet', parent=root_module['ns3::Object'])
     ## 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]
@@ -346,7 +334,7 @@
     module.add_class('AddressValue', import_from_module='ns.network', parent=root_module['ns3::AttributeValue'])
     ## ipv4-list-routing.h (module 'internet'): ns3::Ipv4ListRouting [class]
     module.add_class('Ipv4ListRouting', import_from_module='ns.internet', parent=root_module['ns3::Ipv4RoutingProtocol'])
-    module.add_container('std::map< unsigned int, unsigned int >', ('unsigned int', 'unsigned int'), container_type='map')
+    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
     
@@ -375,12 +363,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
     
@@ -417,7 +405,7 @@
     module.add_class('RoutingTable')
     ## dsdv-rtable.h (module 'dsdv'): ns3::dsdv::RoutingTableEntry [class]
     module.add_class('RoutingTableEntry')
-    module.add_container('std::map< ns3::Ipv4Address, ns3::dsdv::RoutingTableEntry >', ('ns3::Ipv4Address', 'ns3::dsdv::RoutingTableEntry'), container_type='map')
+    module.add_container('std::map< ns3::Ipv4Address, ns3::dsdv::RoutingTableEntry >', ('ns3::Ipv4Address', 'ns3::dsdv::RoutingTableEntry'), container_type=u'map')
 
 def register_methods(root_module):
     register_Ns3Address_methods(root_module, root_module['ns3::Address'])
@@ -447,7 +435,6 @@
     register_Ns3Ipv4Mask_methods(root_module, root_module['ns3::Ipv4Mask'])
     register_Ns3Ipv4RoutingHelper_methods(root_module, root_module['ns3::Ipv4RoutingHelper'])
     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_Ns3NodeContainer_methods(root_module, root_module['ns3::NodeContainer'])
     register_Ns3ObjectBase_methods(root_module, root_module['ns3::ObjectBase'])
@@ -464,6 +451,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_Ns3Timer_methods(root_module, root_module['ns3::Timer'])
     register_Ns3TimerImpl_methods(root_module, root_module['ns3::TimerImpl'])
     register_Ns3TypeId_methods(root_module, root_module['ns3::TypeId'])
@@ -475,7 +463,6 @@
     register_Ns3DsdvHelper_methods(root_module, root_module['ns3::DsdvHelper'])
     register_Ns3Header_methods(root_module, root_module['ns3::Header'])
     register_Ns3Ipv4Header_methods(root_module, root_module['ns3::Ipv4Header'])
-    register_Ns3Ipv6Header_methods(root_module, root_module['ns3::Ipv6Header'])
     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'])
@@ -521,7 +508,6 @@
     register_Ns3EventImpl_methods(root_module, root_module['ns3::EventImpl'])
     register_Ns3ExponentialRandomVariable_methods(root_module, root_module['ns3::ExponentialRandomVariable'])
     register_Ns3GammaRandomVariable_methods(root_module, root_module['ns3::GammaRandomVariable'])
-    register_Ns3IpL4Protocol_methods(root_module, root_module['ns3::IpL4Protocol'])
     register_Ns3Ipv4_methods(root_module, root_module['ns3::Ipv4'])
     register_Ns3Ipv4AddressChecker_methods(root_module, root_module['ns3::Ipv4AddressChecker'])
     register_Ns3Ipv4AddressValue_methods(root_module, root_module['ns3::Ipv4AddressValue'])
@@ -534,7 +520,6 @@
     register_Ns3Ipv4RoutingProtocol_methods(root_module, root_module['ns3::Ipv4RoutingProtocol'])
     register_Ns3Ipv6AddressChecker_methods(root_module, root_module['ns3::Ipv6AddressChecker'])
     register_Ns3Ipv6AddressValue_methods(root_module, root_module['ns3::Ipv6AddressValue'])
-    register_Ns3Ipv6Interface_methods(root_module, root_module['ns3::Ipv6Interface'])
     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'])
@@ -811,6 +796,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', 
@@ -823,6 +812,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', 
@@ -1721,61 +1714,6 @@
                    [param('uint8_t *', 'address')])
     return
 
-def register_Ns3Ipv6InterfaceAddress_methods(root_module, cls):
-    cls.add_binary_comparison_operator('!=')
-    cls.add_output_stream_operator()
-    cls.add_binary_comparison_operator('==')
-    ## ipv6-interface-address.h (module 'internet'): ns3::Ipv6InterfaceAddress::Ipv6InterfaceAddress() [constructor]
-    cls.add_constructor([])
-    ## ipv6-interface-address.h (module 'internet'): ns3::Ipv6InterfaceAddress::Ipv6InterfaceAddress(ns3::Ipv6Address address) [constructor]
-    cls.add_constructor([param('ns3::Ipv6Address', 'address')])
-    ## ipv6-interface-address.h (module 'internet'): ns3::Ipv6InterfaceAddress::Ipv6InterfaceAddress(ns3::Ipv6Address address, ns3::Ipv6Prefix prefix) [constructor]
-    cls.add_constructor([param('ns3::Ipv6Address', 'address'), param('ns3::Ipv6Prefix', 'prefix')])
-    ## ipv6-interface-address.h (module 'internet'): ns3::Ipv6InterfaceAddress::Ipv6InterfaceAddress(ns3::Ipv6InterfaceAddress const & o) [copy constructor]
-    cls.add_constructor([param('ns3::Ipv6InterfaceAddress const &', 'o')])
-    ## ipv6-interface-address.h (module 'internet'): ns3::Ipv6Address ns3::Ipv6InterfaceAddress::GetAddress() const [member function]
-    cls.add_method('GetAddress', 
-                   'ns3::Ipv6Address', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface-address.h (module 'internet'): uint32_t ns3::Ipv6InterfaceAddress::GetNsDadUid() const [member function]
-    cls.add_method('GetNsDadUid', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface-address.h (module 'internet'): ns3::Ipv6Prefix ns3::Ipv6InterfaceAddress::GetPrefix() const [member function]
-    cls.add_method('GetPrefix', 
-                   'ns3::Ipv6Prefix', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface-address.h (module 'internet'): ns3::Ipv6InterfaceAddress::Scope_e ns3::Ipv6InterfaceAddress::GetScope() const [member function]
-    cls.add_method('GetScope', 
-                   'ns3::Ipv6InterfaceAddress::Scope_e', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface-address.h (module 'internet'): ns3::Ipv6InterfaceAddress::State_e ns3::Ipv6InterfaceAddress::GetState() const [member function]
-    cls.add_method('GetState', 
-                   'ns3::Ipv6InterfaceAddress::State_e', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface-address.h (module 'internet'): void ns3::Ipv6InterfaceAddress::SetAddress(ns3::Ipv6Address address) [member function]
-    cls.add_method('SetAddress', 
-                   'void', 
-                   [param('ns3::Ipv6Address', 'address')])
-    ## ipv6-interface-address.h (module 'internet'): void ns3::Ipv6InterfaceAddress::SetNsDadUid(uint32_t uid) [member function]
-    cls.add_method('SetNsDadUid', 
-                   'void', 
-                   [param('uint32_t', 'uid')])
-    ## ipv6-interface-address.h (module 'internet'): void ns3::Ipv6InterfaceAddress::SetScope(ns3::Ipv6InterfaceAddress::Scope_e scope) [member function]
-    cls.add_method('SetScope', 
-                   'void', 
-                   [param('ns3::Ipv6InterfaceAddress::Scope_e', 'scope')])
-    ## ipv6-interface-address.h (module 'internet'): void ns3::Ipv6InterfaceAddress::SetState(ns3::Ipv6InterfaceAddress::State_e state) [member function]
-    cls.add_method('SetState', 
-                   'void', 
-                   [param('ns3::Ipv6InterfaceAddress::State_e', 'state')])
-    return
-
 def register_Ns3Ipv6Prefix_methods(root_module, cls):
     cls.add_binary_comparison_operator('!=')
     cls.add_output_stream_operator()
@@ -2385,6 +2323,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_Ns3Timer_methods(root_module, cls):
     ## timer.h (module 'core'): ns3::Timer::Timer(ns3::Timer const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::Timer const &', 'arg0')])
@@ -2666,62 +2612,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('==')
@@ -2730,6 +2632,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]
@@ -2770,6 +2674,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):
@@ -3020,106 +2926,6 @@
                    [param('uint8_t', 'ttl')])
     return
 
-def register_Ns3Ipv6Header_methods(root_module, cls):
-    ## ipv6-header.h (module 'internet'): ns3::Ipv6Header::Ipv6Header(ns3::Ipv6Header const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::Ipv6Header const &', 'arg0')])
-    ## ipv6-header.h (module 'internet'): ns3::Ipv6Header::Ipv6Header() [constructor]
-    cls.add_constructor([])
-    ## ipv6-header.h (module 'internet'): uint32_t ns3::Ipv6Header::Deserialize(ns3::Buffer::Iterator start) [member function]
-    cls.add_method('Deserialize', 
-                   'uint32_t', 
-                   [param('ns3::Buffer::Iterator', 'start')], 
-                   is_virtual=True)
-    ## ipv6-header.h (module 'internet'): ns3::Ipv6Address ns3::Ipv6Header::GetDestinationAddress() const [member function]
-    cls.add_method('GetDestinationAddress', 
-                   'ns3::Ipv6Address', 
-                   [], 
-                   is_const=True)
-    ## ipv6-header.h (module 'internet'): uint32_t ns3::Ipv6Header::GetFlowLabel() const [member function]
-    cls.add_method('GetFlowLabel', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    ## ipv6-header.h (module 'internet'): uint8_t ns3::Ipv6Header::GetHopLimit() const [member function]
-    cls.add_method('GetHopLimit', 
-                   'uint8_t', 
-                   [], 
-                   is_const=True)
-    ## ipv6-header.h (module 'internet'): ns3::TypeId ns3::Ipv6Header::GetInstanceTypeId() const [member function]
-    cls.add_method('GetInstanceTypeId', 
-                   'ns3::TypeId', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## ipv6-header.h (module 'internet'): uint8_t ns3::Ipv6Header::GetNextHeader() const [member function]
-    cls.add_method('GetNextHeader', 
-                   'uint8_t', 
-                   [], 
-                   is_const=True)
-    ## ipv6-header.h (module 'internet'): uint16_t ns3::Ipv6Header::GetPayloadLength() const [member function]
-    cls.add_method('GetPayloadLength', 
-                   'uint16_t', 
-                   [], 
-                   is_const=True)
-    ## ipv6-header.h (module 'internet'): uint32_t ns3::Ipv6Header::GetSerializedSize() const [member function]
-    cls.add_method('GetSerializedSize', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## ipv6-header.h (module 'internet'): ns3::Ipv6Address ns3::Ipv6Header::GetSourceAddress() const [member function]
-    cls.add_method('GetSourceAddress', 
-                   'ns3::Ipv6Address', 
-                   [], 
-                   is_const=True)
-    ## ipv6-header.h (module 'internet'): uint8_t ns3::Ipv6Header::GetTrafficClass() const [member function]
-    cls.add_method('GetTrafficClass', 
-                   'uint8_t', 
-                   [], 
-                   is_const=True)
-    ## ipv6-header.h (module 'internet'): static ns3::TypeId ns3::Ipv6Header::GetTypeId() [member function]
-    cls.add_method('GetTypeId', 
-                   'ns3::TypeId', 
-                   [], 
-                   is_static=True)
-    ## ipv6-header.h (module 'internet'): void ns3::Ipv6Header::Print(std::ostream & os) const [member function]
-    cls.add_method('Print', 
-                   'void', 
-                   [param('std::ostream &', 'os')], 
-                   is_const=True, is_virtual=True)
-    ## ipv6-header.h (module 'internet'): void ns3::Ipv6Header::Serialize(ns3::Buffer::Iterator start) const [member function]
-    cls.add_method('Serialize', 
-                   'void', 
-                   [param('ns3::Buffer::Iterator', 'start')], 
-                   is_const=True, is_virtual=True)
-    ## ipv6-header.h (module 'internet'): void ns3::Ipv6Header::SetDestinationAddress(ns3::Ipv6Address dst) [member function]
-    cls.add_method('SetDestinationAddress', 
-                   'void', 
-                   [param('ns3::Ipv6Address', 'dst')])
-    ## ipv6-header.h (module 'internet'): void ns3::Ipv6Header::SetFlowLabel(uint32_t flow) [member function]
-    cls.add_method('SetFlowLabel', 
-                   'void', 
-                   [param('uint32_t', 'flow')])
-    ## ipv6-header.h (module 'internet'): void ns3::Ipv6Header::SetHopLimit(uint8_t limit) [member function]
-    cls.add_method('SetHopLimit', 
-                   'void', 
-                   [param('uint8_t', 'limit')])
-    ## ipv6-header.h (module 'internet'): void ns3::Ipv6Header::SetNextHeader(uint8_t next) [member function]
-    cls.add_method('SetNextHeader', 
-                   'void', 
-                   [param('uint8_t', 'next')])
-    ## ipv6-header.h (module 'internet'): void ns3::Ipv6Header::SetPayloadLength(uint16_t len) [member function]
-    cls.add_method('SetPayloadLength', 
-                   'void', 
-                   [param('uint16_t', 'len')])
-    ## ipv6-header.h (module 'internet'): void ns3::Ipv6Header::SetSourceAddress(ns3::Ipv6Address src) [member function]
-    cls.add_method('SetSourceAddress', 
-                   'void', 
-                   [param('ns3::Ipv6Address', 'src')])
-    ## ipv6-header.h (module 'internet'): void ns3::Ipv6Header::SetTrafficClass(uint8_t traffic) [member function]
-    cls.add_method('SetTrafficClass', 
-                   'void', 
-                   [param('uint8_t', 'traffic')])
-    return
-
 def register_Ns3Object_methods(root_module, cls):
     ## object.h (module 'core'): ns3::Object::Object() [constructor]
     cls.add_constructor([])
@@ -4025,13 +3831,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('==')
@@ -4058,6 +3866,11 @@
     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', 
@@ -4859,63 +4672,6 @@
                    is_virtual=True)
     return
 
-def register_Ns3IpL4Protocol_methods(root_module, cls):
-    ## ip-l4-protocol.h (module 'internet'): ns3::IpL4Protocol::IpL4Protocol() [constructor]
-    cls.add_constructor([])
-    ## ip-l4-protocol.h (module 'internet'): ns3::IpL4Protocol::IpL4Protocol(ns3::IpL4Protocol const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::IpL4Protocol const &', 'arg0')])
-    ## ip-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::IpL4Protocol::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 >', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## ip-l4-protocol.h (module 'internet'): 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> ns3::IpL4Protocol::GetDownTarget6() const [member function]
-    cls.add_method('GetDownTarget6', 
-                   '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 >', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## ip-l4-protocol.h (module 'internet'): int ns3::IpL4Protocol::GetProtocolNumber() const [member function]
-    cls.add_method('GetProtocolNumber', 
-                   'int', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## ip-l4-protocol.h (module 'internet'): static ns3::TypeId ns3::IpL4Protocol::GetTypeId() [member function]
-    cls.add_method('GetTypeId', 
-                   'ns3::TypeId', 
-                   [], 
-                   is_static=True)
-    ## ip-l4-protocol.h (module 'internet'): ns3::IpL4Protocol::RxStatus ns3::IpL4Protocol::Receive(ns3::Ptr<ns3::Packet> p, ns3::Ipv4Header const & header, 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')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## ip-l4-protocol.h (module 'internet'): ns3::IpL4Protocol::RxStatus ns3::IpL4Protocol::Receive(ns3::Ptr<ns3::Packet> p, ns3::Ipv6Header const & header, 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')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## ip-l4-protocol.h (module 'internet'): void ns3::IpL4Protocol::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', 
-                   'void', 
-                   [param('ns3::Ipv4Address', 'icmpSource'), param('uint8_t', 'icmpTtl'), param('uint8_t', 'icmpType'), param('uint8_t', 'icmpCode'), param('uint32_t', 'icmpInfo'), param('ns3::Ipv4Address', 'payloadSource'), param('ns3::Ipv4Address', 'payloadDestination'), param('uint8_t const *', 'payload')], 
-                   is_virtual=True)
-    ## ip-l4-protocol.h (module 'internet'): void ns3::IpL4Protocol::ReceiveIcmp(ns3::Ipv6Address icmpSource, uint8_t icmpTtl, uint8_t icmpType, uint8_t icmpCode, uint32_t icmpInfo, ns3::Ipv6Address payloadSource, ns3::Ipv6Address payloadDestination, uint8_t const * payload) [member function]
-    cls.add_method('ReceiveIcmp', 
-                   'void', 
-                   [param('ns3::Ipv6Address', 'icmpSource'), param('uint8_t', 'icmpTtl'), param('uint8_t', 'icmpType'), param('uint8_t', 'icmpCode'), param('uint32_t', 'icmpInfo'), param('ns3::Ipv6Address', 'payloadSource'), param('ns3::Ipv6Address', 'payloadDestination'), param('uint8_t const *', 'payload')], 
-                   is_virtual=True)
-    ## ip-l4-protocol.h (module 'internet'): void ns3::IpL4Protocol::SetDownTarget(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> cb) [member function]
-    cls.add_method('SetDownTarget', 
-                   'void', 
-                   [param('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 >', 'cb')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## ip-l4-protocol.h (module 'internet'): void ns3::IpL4Protocol::SetDownTarget6(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) [member function]
-    cls.add_method('SetDownTarget6', 
-                   '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_pure_virtual=True, is_virtual=True)
-    return
-
 def register_Ns3Ipv4_methods(root_module, cls):
     ## ipv4.h (module 'internet'): ns3::Ipv4::Ipv4(ns3::Ipv4 const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::Ipv4 const &', 'arg0')])
@@ -5339,6 +5095,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', 
@@ -5672,151 +5433,6 @@
                    [param('ns3::Ipv6Address const &', 'value')])
     return
 
-def register_Ns3Ipv6Interface_methods(root_module, cls):
-    ## ipv6-interface.h (module 'internet'): ns3::Ipv6Interface::Ipv6Interface(ns3::Ipv6Interface const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::Ipv6Interface const &', 'arg0')])
-    ## ipv6-interface.h (module 'internet'): ns3::Ipv6Interface::Ipv6Interface() [constructor]
-    cls.add_constructor([])
-    ## ipv6-interface.h (module 'internet'): bool ns3::Ipv6Interface::AddAddress(ns3::Ipv6InterfaceAddress iface) [member function]
-    cls.add_method('AddAddress', 
-                   'bool', 
-                   [param('ns3::Ipv6InterfaceAddress', 'iface')])
-    ## ipv6-interface.h (module 'internet'): ns3::Ipv6InterfaceAddress ns3::Ipv6Interface::GetAddress(uint32_t index) const [member function]
-    cls.add_method('GetAddress', 
-                   'ns3::Ipv6InterfaceAddress', 
-                   [param('uint32_t', 'index')], 
-                   is_const=True)
-    ## ipv6-interface.h (module 'internet'): ns3::Ipv6InterfaceAddress ns3::Ipv6Interface::GetAddressMatchingDestination(ns3::Ipv6Address dst) [member function]
-    cls.add_method('GetAddressMatchingDestination', 
-                   'ns3::Ipv6InterfaceAddress', 
-                   [param('ns3::Ipv6Address', 'dst')])
-    ## ipv6-interface.h (module 'internet'): uint16_t ns3::Ipv6Interface::GetBaseReachableTime() const [member function]
-    cls.add_method('GetBaseReachableTime', 
-                   'uint16_t', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface.h (module 'internet'): uint8_t ns3::Ipv6Interface::GetCurHopLimit() const [member function]
-    cls.add_method('GetCurHopLimit', 
-                   'uint8_t', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface.h (module 'internet'): ns3::Ptr<ns3::NetDevice> ns3::Ipv6Interface::GetDevice() const [member function]
-    cls.add_method('GetDevice', 
-                   'ns3::Ptr< ns3::NetDevice >', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## ipv6-interface.h (module 'internet'): ns3::Ipv6InterfaceAddress ns3::Ipv6Interface::GetLinkLocalAddress() const [member function]
-    cls.add_method('GetLinkLocalAddress', 
-                   'ns3::Ipv6InterfaceAddress', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface.h (module 'internet'): uint16_t ns3::Ipv6Interface::GetMetric() const [member function]
-    cls.add_method('GetMetric', 
-                   'uint16_t', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface.h (module 'internet'): uint32_t ns3::Ipv6Interface::GetNAddresses() const [member function]
-    cls.add_method('GetNAddresses', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface.h (module 'internet'): uint16_t ns3::Ipv6Interface::GetReachableTime() const [member function]
-    cls.add_method('GetReachableTime', 
-                   'uint16_t', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface.h (module 'internet'): uint16_t ns3::Ipv6Interface::GetRetransTimer() const [member function]
-    cls.add_method('GetRetransTimer', 
-                   'uint16_t', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface.h (module 'internet'): static ns3::TypeId ns3::Ipv6Interface::GetTypeId() [member function]
-    cls.add_method('GetTypeId', 
-                   'ns3::TypeId', 
-                   [], 
-                   is_static=True)
-    ## ipv6-interface.h (module 'internet'): bool ns3::Ipv6Interface::IsDown() const [member function]
-    cls.add_method('IsDown', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface.h (module 'internet'): bool ns3::Ipv6Interface::IsForwarding() const [member function]
-    cls.add_method('IsForwarding', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface.h (module 'internet'): bool ns3::Ipv6Interface::IsUp() const [member function]
-    cls.add_method('IsUp', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface.h (module 'internet'): ns3::Ipv6InterfaceAddress ns3::Ipv6Interface::RemoveAddress(uint32_t index) [member function]
-    cls.add_method('RemoveAddress', 
-                   'ns3::Ipv6InterfaceAddress', 
-                   [param('uint32_t', 'index')])
-    ## ipv6-interface.h (module 'internet'): ns3::Ipv6InterfaceAddress ns3::Ipv6Interface::RemoveAddress(ns3::Ipv6Address address) [member function]
-    cls.add_method('RemoveAddress', 
-                   'ns3::Ipv6InterfaceAddress', 
-                   [param('ns3::Ipv6Address', 'address')])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::Send(ns3::Ptr<ns3::Packet> p, ns3::Ipv6Address dest) [member function]
-    cls.add_method('Send', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::Packet >', 'p'), param('ns3::Ipv6Address', 'dest')])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetBaseReachableTime(uint16_t baseReachableTime) [member function]
-    cls.add_method('SetBaseReachableTime', 
-                   'void', 
-                   [param('uint16_t', 'baseReachableTime')])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetCurHopLimit(uint8_t curHopLimit) [member function]
-    cls.add_method('SetCurHopLimit', 
-                   'void', 
-                   [param('uint8_t', 'curHopLimit')])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetDevice(ns3::Ptr<ns3::NetDevice> device) [member function]
-    cls.add_method('SetDevice', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::NetDevice >', 'device')])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetDown() [member function]
-    cls.add_method('SetDown', 
-                   'void', 
-                   [])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetForwarding(bool forward) [member function]
-    cls.add_method('SetForwarding', 
-                   'void', 
-                   [param('bool', 'forward')])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetMetric(uint16_t metric) [member function]
-    cls.add_method('SetMetric', 
-                   'void', 
-                   [param('uint16_t', 'metric')])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetNode(ns3::Ptr<ns3::Node> node) [member function]
-    cls.add_method('SetNode', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::Node >', 'node')])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetNsDadUid(ns3::Ipv6Address address, uint32_t uid) [member function]
-    cls.add_method('SetNsDadUid', 
-                   'void', 
-                   [param('ns3::Ipv6Address', 'address'), param('uint32_t', 'uid')])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetReachableTime(uint16_t reachableTime) [member function]
-    cls.add_method('SetReachableTime', 
-                   'void', 
-                   [param('uint16_t', 'reachableTime')])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetRetransTimer(uint16_t retransTimer) [member function]
-    cls.add_method('SetRetransTimer', 
-                   'void', 
-                   [param('uint16_t', 'retransTimer')])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetState(ns3::Ipv6Address address, ns3::Ipv6InterfaceAddress::State_e state) [member function]
-    cls.add_method('SetState', 
-                   'void', 
-                   [param('ns3::Ipv6Address', 'address'), param('ns3::Ipv6InterfaceAddress::State_e', 'state')])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetUp() [member function]
-    cls.add_method('SetUp', 
-                   'void', 
-                   [])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::DoDispose() [member function]
-    cls.add_method('DoDispose', 
-                   'void', 
-                   [], 
-                   visibility='protected', is_virtual=True)
-    return
-
 def register_Ns3Ipv6PrefixChecker_methods(root_module, cls):
     ## ipv6-address.h (module 'network'): ns3::Ipv6PrefixChecker::Ipv6PrefixChecker() [constructor]
     cls.add_constructor([])
@@ -6431,10 +6047,10 @@
                    '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')])
     return
 
 def register_Ns3ParetoRandomVariable_methods(root_module, cls):
diff -Naur ns-3.19/src/dsdv/model/dsdv-packet.cc ns-3.20/src/dsdv/model/dsdv-packet.cc
--- ns-3.19/src/dsdv/model/dsdv-packet.cc	2014-06-17 10:34:00.316637604 -0700
+++ ns-3.20/src/dsdv/model/dsdv-packet.cc	2014-06-17 10:33:13.647997860 -0700
@@ -34,8 +34,9 @@
 
 namespace ns3 {
 namespace dsdv {
-NS_OBJECT_ENSURE_REGISTERED (DsdvHeader)
-  ;
+
+NS_OBJECT_ENSURE_REGISTERED (DsdvHeader);
+    
 DsdvHeader::DsdvHeader (Ipv4Address dst, uint32_t hopCount, uint32_t dstSeqNo)
   : m_dst (dst),
     m_hopCount (hopCount),
diff -Naur ns-3.19/src/dsdv/model/dsdv-routing-protocol.cc ns-3.20/src/dsdv/model/dsdv-routing-protocol.cc
--- ns-3.19/src/dsdv/model/dsdv-routing-protocol.cc	2014-06-17 10:34:00.317637596 -0700
+++ ns-3.20/src/dsdv/model/dsdv-routing-protocol.cc	2014-06-17 10:33:13.649997845 -0700
@@ -44,8 +44,8 @@
 
 namespace ns3 {
 namespace dsdv {
-NS_OBJECT_ENSURE_REGISTERED (RoutingProtocol)
-  ;
+  
+NS_OBJECT_ENSURE_REGISTERED (RoutingProtocol);
 
 /// UDP Port for DSDV control traffic
 const uint32_t RoutingProtocol::DSDV_PORT = 269;
diff -Naur ns-3.19/src/dsdv/test/dsdv-testcase.cc ns-3.20/src/dsdv/test/dsdv-testcase.cc
--- ns-3.19/src/dsdv/test/dsdv-testcase.cc	2014-06-17 10:34:00.318637588 -0700
+++ ns-3.20/src/dsdv/test/dsdv-testcase.cc	2014-06-17 10:33:13.650997837 -0700
@@ -46,7 +46,8 @@
 #include "ns3/dsdv-packet.h"
 #include "ns3/dsdv-rtable.h"
 
-namespace ns3 {
+using namespace ns3;
+
 class DsdvHeaderTestCase : public TestCase
 {
 public:
@@ -192,4 +193,3 @@
     AddTestCase (new DsdvTableTestCase (), TestCase::QUICK);
   }
 } g_dsdvTestSuite;
-}
diff -Naur ns-3.19/src/dsr/bindings/modulegen__gcc_ILP32.py ns-3.20/src/dsr/bindings/modulegen__gcc_ILP32.py
--- ns-3.19/src/dsr/bindings/modulegen__gcc_ILP32.py	2014-06-17 10:34:00.327637518 -0700
+++ ns-3.20/src/dsr/bindings/modulegen__gcc_ILP32.py	2014-06-17 10:33:13.659997768 -0700
@@ -164,6 +164,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')
     ## timer.h (module 'core'): ns3::Timer [class]
     module.add_class('Timer', import_from_module='ns.core')
     ## timer.h (module 'core'): ns3::Timer::DestroyPolicy [enumeration]
@@ -200,6 +202,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]
@@ -448,25 +452,25 @@
     module.add_class('AddressValue', import_from_module='ns.network', parent=root_module['ns3::AttributeValue'])
     ## 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='vector')
-    module.add_container('ns3::WifiMcsList', 'unsigned char', container_type='vector')
-    module.add_container('std::list< ns3::Ptr< ns3::Packet > >', 'ns3::Ptr< ns3::Packet >', container_type='list')
-    module.add_container('std::map< unsigned int, unsigned int >', ('unsigned int', 'unsigned int'), container_type='map')
-    typehandlers.add_type_alias('__gnu_cxx::__normal_iterator< unsigned char const *, std::vector< unsigned char, std::allocator< unsigned char > > >', 'ns3::WifiMcsListIterator')
-    typehandlers.add_type_alias('__gnu_cxx::__normal_iterator< unsigned char const *, std::vector< unsigned char, std::allocator< unsigned char > > >*', 'ns3::WifiMcsListIterator*')
-    typehandlers.add_type_alias('__gnu_cxx::__normal_iterator< unsigned char const *, std::vector< unsigned char, std::allocator< unsigned char > > >&', 'ns3::WifiMcsListIterator&')
-    typehandlers.add_type_alias('std::vector< unsigned char, std::allocator< unsigned char > >', 'ns3::WifiMcsList')
-    typehandlers.add_type_alias('std::vector< unsigned char, std::allocator< unsigned char > >*', 'ns3::WifiMcsList*')
-    typehandlers.add_type_alias('std::vector< unsigned char, std::allocator< unsigned char > >&', 'ns3::WifiMcsList&')
-    typehandlers.add_type_alias('uint8_t', 'ns3::WifiInformationElementId')
-    typehandlers.add_type_alias('uint8_t*', 'ns3::WifiInformationElementId*')
-    typehandlers.add_type_alias('uint8_t&', 'ns3::WifiInformationElementId&')
-    typehandlers.add_type_alias('__gnu_cxx::__normal_iterator< ns3::WifiMode const *, std::vector< ns3::WifiMode, std::allocator< ns3::WifiMode > > >', 'ns3::WifiModeListIterator')
-    typehandlers.add_type_alias('__gnu_cxx::__normal_iterator< ns3::WifiMode const *, std::vector< ns3::WifiMode, std::allocator< ns3::WifiMode > > >*', 'ns3::WifiModeListIterator*')
-    typehandlers.add_type_alias('__gnu_cxx::__normal_iterator< ns3::WifiMode const *, std::vector< ns3::WifiMode, std::allocator< ns3::WifiMode > > >&', 'ns3::WifiModeListIterator&')
-    typehandlers.add_type_alias('std::vector< ns3::WifiMode, std::allocator< ns3::WifiMode > >', 'ns3::WifiModeList')
-    typehandlers.add_type_alias('std::vector< ns3::WifiMode, std::allocator< ns3::WifiMode > >*', 'ns3::WifiModeList*')
-    typehandlers.add_type_alias('std::vector< ns3::WifiMode, std::allocator< ns3::WifiMode > >&', 'ns3::WifiModeList&')
+    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'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&')
     
     ## Register a nested module for the namespace FatalImpl
     
@@ -501,12 +505,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('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('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(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&')
+    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&')
     
     ## Register a nested module for the namespace Function
     
@@ -635,16 +639,16 @@
     module.add_class('DsrOptionRreq', parent=root_module['ns3::dsr::DsrOptions'])
     ## dsr-options.h (module 'dsr'): ns3::dsr::DsrOptionSR [class]
     module.add_class('DsrOptionSR', parent=root_module['ns3::dsr::DsrOptions'])
-    module.add_container('std::vector< ns3::dsr::DsrNetworkQueueEntry >', 'ns3::dsr::DsrNetworkQueueEntry', container_type='vector')
-    module.add_container('std::vector< ns3::Ipv4Address >', 'ns3::Ipv4Address', container_type='vector')
-    module.add_container('std::vector< std::string >', 'std::string', container_type='vector')
-    module.add_container('std::vector< ns3::dsr::ErrorBuffEntry >', 'ns3::dsr::ErrorBuffEntry', container_type='vector')
-    module.add_container('std::vector< ns3::dsr::RouteCache::Neighbor >', 'ns3::dsr::RouteCache::Neighbor', container_type='vector')
-    module.add_container('std::vector< ns3::Ptr< ns3::ArpCache > >', 'ns3::Ptr< ns3::ArpCache >', container_type='vector')
-    module.add_container('std::list< std::vector< ns3::Ipv4Address > >', 'std::vector< ns3::Ipv4Address >', container_type='list')
-    module.add_container('std::list< ns3::dsr::RouteCacheEntry >', 'ns3::dsr::RouteCacheEntry', container_type='list')
-    module.add_container('std::map< ns3::Ipv4Address, ns3::dsr::RreqTableEntry >', ('ns3::Ipv4Address', 'ns3::dsr::RreqTableEntry'), container_type='map')
-    module.add_container('std::vector< ns3::dsr::SendBuffEntry >', 'ns3::dsr::SendBuffEntry', container_type='vector')
+    module.add_container('std::vector< ns3::dsr::DsrNetworkQueueEntry >', 'ns3::dsr::DsrNetworkQueueEntry', container_type=u'vector')
+    module.add_container('std::vector< ns3::Ipv4Address >', 'ns3::Ipv4Address', container_type=u'vector')
+    module.add_container('std::vector< std::string >', 'std::string', container_type=u'vector')
+    module.add_container('std::vector< ns3::dsr::ErrorBuffEntry >', 'ns3::dsr::ErrorBuffEntry', container_type=u'vector')
+    module.add_container('std::vector< ns3::dsr::RouteCache::Neighbor >', 'ns3::dsr::RouteCache::Neighbor', container_type=u'vector')
+    module.add_container('std::vector< ns3::Ptr< ns3::ArpCache > >', 'ns3::Ptr< ns3::ArpCache >', container_type=u'vector')
+    module.add_container('std::list< std::vector< ns3::Ipv4Address > >', 'std::vector< ns3::Ipv4Address >', container_type=u'list')
+    module.add_container('std::list< ns3::dsr::RouteCacheEntry >', 'ns3::dsr::RouteCacheEntry', container_type=u'list')
+    module.add_container('std::map< ns3::Ipv4Address, ns3::dsr::RreqTableEntry >', ('ns3::Ipv4Address', 'ns3::dsr::RreqTableEntry'), container_type=u'map')
+    module.add_container('std::vector< ns3::dsr::SendBuffEntry >', 'ns3::dsr::SendBuffEntry', container_type=u'vector')
 
 def register_types_ns3_internal(module):
     root_module = module.get_root()
@@ -699,6 +703,7 @@
     register_Ns3SystemWallClockMs_methods(root_module, root_module['ns3::SystemWallClockMs'])
     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_Ns3Timer_methods(root_module, root_module['ns3::Timer'])
     register_Ns3TimerImpl_methods(root_module, root_module['ns3::TimerImpl'])
     register_Ns3TypeId_methods(root_module, root_module['ns3::TypeId'])
@@ -1123,6 +1128,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', 
@@ -1135,6 +1144,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', 
@@ -2080,6 +2093,11 @@
                    'ns3::Ipv6InterfaceAddress::State_e', 
                    [], 
                    is_const=True)
+    ## ipv6-interface-address.h (module 'internet'): bool ns3::Ipv6InterfaceAddress::IsInSameSubnet(ns3::Ipv6Address b) const [member function]
+    cls.add_method('IsInSameSubnet', 
+                   'bool', 
+                   [param('ns3::Ipv6Address', 'b')], 
+                   is_const=True)
     ## ipv6-interface-address.h (module 'internet'): void ns3::Ipv6InterfaceAddress::SetAddress(ns3::Ipv6Address address) [member function]
     cls.add_method('SetAddress', 
                    'void', 
@@ -2809,6 +2827,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_Ns3Timer_methods(root_module, cls):
     ## timer.h (module 'core'): ns3::Timer::Timer(ns3::Timer const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::Timer const &', 'arg0')])
@@ -3328,61 +3354,17 @@
 def register_Ns3Int64x64_t_methods(root_module, cls):
     cls.add_binary_comparison_operator('<=')
     cls.add_binary_comparison_operator('!=')
-    cls.add_inplace_numeric_operator('+=', 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 &', '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_inplace_numeric_operator('+=', 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_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_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_output_stream_operator()
     cls.add_binary_comparison_operator('==')
     cls.add_binary_comparison_operator('>=')
@@ -3390,6 +3372,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]
@@ -3430,6 +3414,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):
@@ -4925,12 +4911,14 @@
 def register_Ns3Time_methods(root_module, cls):
     cls.add_binary_comparison_operator('<=')
     cls.add_binary_comparison_operator('!=')
-    cls.add_inplace_numeric_operator('+=', 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('ns3::Time const &', 'right'))
+    cls.add_inplace_numeric_operator('+=', 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_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_inplace_numeric_operator('-=', param('ns3::Time const &', '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('>=')
@@ -4956,6 +4944,11 @@
     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', 
@@ -6516,6 +6509,11 @@
                    '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', 
@@ -8462,6 +8460,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', 
@@ -9594,10 +9597,10 @@
                    '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')])
     return
 
 def register_Ns3ParetoRandomVariable_methods(root_module, cls):
@@ -10485,6 +10488,14 @@
     cls.add_method('Enqueue', 
                    'bool', 
                    [param('ns3::dsr::DsrNetworkQueueEntry &', 'entry')])
+    ## dsr-network-queue.h (module 'dsr'): bool ns3::dsr::DsrNetworkQueue::Find(ns3::Ipv4Address nextHop) [member function]
+    cls.add_method('Find', 
+                   'bool', 
+                   [param('ns3::Ipv4Address', 'nextHop')])
+    ## dsr-network-queue.h (module 'dsr'): bool ns3::dsr::DsrNetworkQueue::FindPacketWithNexthop(ns3::Ipv4Address nextHop, ns3::dsr::DsrNetworkQueueEntry & entry) [member function]
+    cls.add_method('FindPacketWithNexthop', 
+                   'bool', 
+                   [param('ns3::Ipv4Address', 'nextHop'), param('ns3::dsr::DsrNetworkQueueEntry &', 'entry')])
     ## dsr-network-queue.h (module 'dsr'): void ns3::dsr::DsrNetworkQueue::Flush() [member function]
     cls.add_method('Flush', 
                    'void', 
@@ -11373,6 +11384,10 @@
     cls.add_method('CancelNetworkPacketTimer', 
                    'void', 
                    [param('ns3::dsr::MaintainBuffEntry &', 'mb')])
+    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::CancelPacketAllTimer(ns3::dsr::MaintainBuffEntry & mb) [member function]
+    cls.add_method('CancelPacketAllTimer', 
+                   'void', 
+                   [param('ns3::dsr::MaintainBuffEntry &', 'mb')])
     ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::CancelPacketTimerNextHop(ns3::Ipv4Address nextHop, uint8_t protocol) [member function]
     cls.add_method('CancelPacketTimerNextHop', 
                    'void', 
@@ -11631,10 +11646,10 @@
     cls.add_method('SendRequest', 
                    'void', 
                    [param('ns3::Ptr< ns3::Packet >', 'packet'), param('ns3::Ipv4Address', 'source')])
-    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::SendUnreachError(ns3::Ipv4Address errorHop, ns3::Ipv4Address destination, ns3::Ipv4Address originalDst, uint8_t salvage, uint8_t protocol) [member function]
+    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::SendUnreachError(ns3::Ipv4Address unreachNode, ns3::Ipv4Address destination, ns3::Ipv4Address originalDst, uint8_t salvage, uint8_t protocol) [member function]
     cls.add_method('SendUnreachError', 
                    'void', 
-                   [param('ns3::Ipv4Address', 'errorHop'), param('ns3::Ipv4Address', 'destination'), param('ns3::Ipv4Address', 'originalDst'), param('uint8_t', 'salvage'), param('uint8_t', 'protocol')])
+                   [param('ns3::Ipv4Address', 'unreachNode'), param('ns3::Ipv4Address', 'destination'), param('ns3::Ipv4Address', 'originalDst'), param('uint8_t', 'salvage'), param('uint8_t', 'protocol')])
     ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::SetDownTarget(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> callback) [member function]
     cls.add_method('SetDownTarget', 
                    'void', 
diff -Naur ns-3.19/src/dsr/bindings/modulegen__gcc_LP64.py ns-3.20/src/dsr/bindings/modulegen__gcc_LP64.py
--- ns-3.19/src/dsr/bindings/modulegen__gcc_LP64.py	2014-06-17 10:34:00.335637457 -0700
+++ ns-3.20/src/dsr/bindings/modulegen__gcc_LP64.py	2014-06-17 10:33:13.666997713 -0700
@@ -164,6 +164,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')
     ## timer.h (module 'core'): ns3::Timer [class]
     module.add_class('Timer', import_from_module='ns.core')
     ## timer.h (module 'core'): ns3::Timer::DestroyPolicy [enumeration]
@@ -200,6 +202,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]
@@ -448,25 +452,25 @@
     module.add_class('AddressValue', import_from_module='ns.network', parent=root_module['ns3::AttributeValue'])
     ## 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='vector')
-    module.add_container('ns3::WifiMcsList', 'unsigned char', container_type='vector')
-    module.add_container('std::list< ns3::Ptr< ns3::Packet > >', 'ns3::Ptr< ns3::Packet >', container_type='list')
-    module.add_container('std::map< unsigned int, unsigned int >', ('unsigned int', 'unsigned int'), container_type='map')
-    typehandlers.add_type_alias('__gnu_cxx::__normal_iterator< unsigned char const *, std::vector< unsigned char, std::allocator< unsigned char > > >', 'ns3::WifiMcsListIterator')
-    typehandlers.add_type_alias('__gnu_cxx::__normal_iterator< unsigned char const *, std::vector< unsigned char, std::allocator< unsigned char > > >*', 'ns3::WifiMcsListIterator*')
-    typehandlers.add_type_alias('__gnu_cxx::__normal_iterator< unsigned char const *, std::vector< unsigned char, std::allocator< unsigned char > > >&', 'ns3::WifiMcsListIterator&')
-    typehandlers.add_type_alias('std::vector< unsigned char, std::allocator< unsigned char > >', 'ns3::WifiMcsList')
-    typehandlers.add_type_alias('std::vector< unsigned char, std::allocator< unsigned char > >*', 'ns3::WifiMcsList*')
-    typehandlers.add_type_alias('std::vector< unsigned char, std::allocator< unsigned char > >&', 'ns3::WifiMcsList&')
-    typehandlers.add_type_alias('uint8_t', 'ns3::WifiInformationElementId')
-    typehandlers.add_type_alias('uint8_t*', 'ns3::WifiInformationElementId*')
-    typehandlers.add_type_alias('uint8_t&', 'ns3::WifiInformationElementId&')
-    typehandlers.add_type_alias('__gnu_cxx::__normal_iterator< ns3::WifiMode const *, std::vector< ns3::WifiMode, std::allocator< ns3::WifiMode > > >', 'ns3::WifiModeListIterator')
-    typehandlers.add_type_alias('__gnu_cxx::__normal_iterator< ns3::WifiMode const *, std::vector< ns3::WifiMode, std::allocator< ns3::WifiMode > > >*', 'ns3::WifiModeListIterator*')
-    typehandlers.add_type_alias('__gnu_cxx::__normal_iterator< ns3::WifiMode const *, std::vector< ns3::WifiMode, std::allocator< ns3::WifiMode > > >&', 'ns3::WifiModeListIterator&')
-    typehandlers.add_type_alias('std::vector< ns3::WifiMode, std::allocator< ns3::WifiMode > >', 'ns3::WifiModeList')
-    typehandlers.add_type_alias('std::vector< ns3::WifiMode, std::allocator< ns3::WifiMode > >*', 'ns3::WifiModeList*')
-    typehandlers.add_type_alias('std::vector< ns3::WifiMode, std::allocator< ns3::WifiMode > >&', 'ns3::WifiModeList&')
+    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'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&')
     
     ## Register a nested module for the namespace FatalImpl
     
@@ -501,12 +505,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('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('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(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&')
+    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&')
     
     ## Register a nested module for the namespace Function
     
@@ -635,16 +639,16 @@
     module.add_class('DsrOptionRreq', parent=root_module['ns3::dsr::DsrOptions'])
     ## dsr-options.h (module 'dsr'): ns3::dsr::DsrOptionSR [class]
     module.add_class('DsrOptionSR', parent=root_module['ns3::dsr::DsrOptions'])
-    module.add_container('std::vector< ns3::dsr::DsrNetworkQueueEntry >', 'ns3::dsr::DsrNetworkQueueEntry', container_type='vector')
-    module.add_container('std::vector< ns3::Ipv4Address >', 'ns3::Ipv4Address', container_type='vector')
-    module.add_container('std::vector< std::string >', 'std::string', container_type='vector')
-    module.add_container('std::vector< ns3::dsr::ErrorBuffEntry >', 'ns3::dsr::ErrorBuffEntry', container_type='vector')
-    module.add_container('std::vector< ns3::dsr::RouteCache::Neighbor >', 'ns3::dsr::RouteCache::Neighbor', container_type='vector')
-    module.add_container('std::vector< ns3::Ptr< ns3::ArpCache > >', 'ns3::Ptr< ns3::ArpCache >', container_type='vector')
-    module.add_container('std::list< std::vector< ns3::Ipv4Address > >', 'std::vector< ns3::Ipv4Address >', container_type='list')
-    module.add_container('std::list< ns3::dsr::RouteCacheEntry >', 'ns3::dsr::RouteCacheEntry', container_type='list')
-    module.add_container('std::map< ns3::Ipv4Address, ns3::dsr::RreqTableEntry >', ('ns3::Ipv4Address', 'ns3::dsr::RreqTableEntry'), container_type='map')
-    module.add_container('std::vector< ns3::dsr::SendBuffEntry >', 'ns3::dsr::SendBuffEntry', container_type='vector')
+    module.add_container('std::vector< ns3::dsr::DsrNetworkQueueEntry >', 'ns3::dsr::DsrNetworkQueueEntry', container_type=u'vector')
+    module.add_container('std::vector< ns3::Ipv4Address >', 'ns3::Ipv4Address', container_type=u'vector')
+    module.add_container('std::vector< std::string >', 'std::string', container_type=u'vector')
+    module.add_container('std::vector< ns3::dsr::ErrorBuffEntry >', 'ns3::dsr::ErrorBuffEntry', container_type=u'vector')
+    module.add_container('std::vector< ns3::dsr::RouteCache::Neighbor >', 'ns3::dsr::RouteCache::Neighbor', container_type=u'vector')
+    module.add_container('std::vector< ns3::Ptr< ns3::ArpCache > >', 'ns3::Ptr< ns3::ArpCache >', container_type=u'vector')
+    module.add_container('std::list< std::vector< ns3::Ipv4Address > >', 'std::vector< ns3::Ipv4Address >', container_type=u'list')
+    module.add_container('std::list< ns3::dsr::RouteCacheEntry >', 'ns3::dsr::RouteCacheEntry', container_type=u'list')
+    module.add_container('std::map< ns3::Ipv4Address, ns3::dsr::RreqTableEntry >', ('ns3::Ipv4Address', 'ns3::dsr::RreqTableEntry'), container_type=u'map')
+    module.add_container('std::vector< ns3::dsr::SendBuffEntry >', 'ns3::dsr::SendBuffEntry', container_type=u'vector')
 
 def register_types_ns3_internal(module):
     root_module = module.get_root()
@@ -699,6 +703,7 @@
     register_Ns3SystemWallClockMs_methods(root_module, root_module['ns3::SystemWallClockMs'])
     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_Ns3Timer_methods(root_module, root_module['ns3::Timer'])
     register_Ns3TimerImpl_methods(root_module, root_module['ns3::TimerImpl'])
     register_Ns3TypeId_methods(root_module, root_module['ns3::TypeId'])
@@ -1123,6 +1128,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', 
@@ -1135,6 +1144,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', 
@@ -2080,6 +2093,11 @@
                    'ns3::Ipv6InterfaceAddress::State_e', 
                    [], 
                    is_const=True)
+    ## ipv6-interface-address.h (module 'internet'): bool ns3::Ipv6InterfaceAddress::IsInSameSubnet(ns3::Ipv6Address b) const [member function]
+    cls.add_method('IsInSameSubnet', 
+                   'bool', 
+                   [param('ns3::Ipv6Address', 'b')], 
+                   is_const=True)
     ## ipv6-interface-address.h (module 'internet'): void ns3::Ipv6InterfaceAddress::SetAddress(ns3::Ipv6Address address) [member function]
     cls.add_method('SetAddress', 
                    'void', 
@@ -2809,6 +2827,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_Ns3Timer_methods(root_module, cls):
     ## timer.h (module 'core'): ns3::Timer::Timer(ns3::Timer const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::Timer const &', 'arg0')])
@@ -3328,61 +3354,17 @@
 def register_Ns3Int64x64_t_methods(root_module, cls):
     cls.add_binary_comparison_operator('<=')
     cls.add_binary_comparison_operator('!=')
-    cls.add_inplace_numeric_operator('+=', 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 &', '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_inplace_numeric_operator('+=', 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_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_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_output_stream_operator()
     cls.add_binary_comparison_operator('==')
     cls.add_binary_comparison_operator('>=')
@@ -3390,6 +3372,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]
@@ -3430,6 +3414,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):
@@ -4925,12 +4911,14 @@
 def register_Ns3Time_methods(root_module, cls):
     cls.add_binary_comparison_operator('<=')
     cls.add_binary_comparison_operator('!=')
-    cls.add_inplace_numeric_operator('+=', 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('ns3::Time const &', 'right'))
+    cls.add_inplace_numeric_operator('+=', 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_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_inplace_numeric_operator('-=', param('ns3::Time const &', '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('>=')
@@ -4956,6 +4944,11 @@
     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', 
@@ -6516,6 +6509,11 @@
                    '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', 
@@ -8462,6 +8460,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', 
@@ -9594,10 +9597,10 @@
                    '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')])
     return
 
 def register_Ns3ParetoRandomVariable_methods(root_module, cls):
@@ -10485,6 +10488,14 @@
     cls.add_method('Enqueue', 
                    'bool', 
                    [param('ns3::dsr::DsrNetworkQueueEntry &', 'entry')])
+    ## dsr-network-queue.h (module 'dsr'): bool ns3::dsr::DsrNetworkQueue::Find(ns3::Ipv4Address nextHop) [member function]
+    cls.add_method('Find', 
+                   'bool', 
+                   [param('ns3::Ipv4Address', 'nextHop')])
+    ## dsr-network-queue.h (module 'dsr'): bool ns3::dsr::DsrNetworkQueue::FindPacketWithNexthop(ns3::Ipv4Address nextHop, ns3::dsr::DsrNetworkQueueEntry & entry) [member function]
+    cls.add_method('FindPacketWithNexthop', 
+                   'bool', 
+                   [param('ns3::Ipv4Address', 'nextHop'), param('ns3::dsr::DsrNetworkQueueEntry &', 'entry')])
     ## dsr-network-queue.h (module 'dsr'): void ns3::dsr::DsrNetworkQueue::Flush() [member function]
     cls.add_method('Flush', 
                    'void', 
@@ -11373,6 +11384,10 @@
     cls.add_method('CancelNetworkPacketTimer', 
                    'void', 
                    [param('ns3::dsr::MaintainBuffEntry &', 'mb')])
+    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::CancelPacketAllTimer(ns3::dsr::MaintainBuffEntry & mb) [member function]
+    cls.add_method('CancelPacketAllTimer', 
+                   'void', 
+                   [param('ns3::dsr::MaintainBuffEntry &', 'mb')])
     ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::CancelPacketTimerNextHop(ns3::Ipv4Address nextHop, uint8_t protocol) [member function]
     cls.add_method('CancelPacketTimerNextHop', 
                    'void', 
@@ -11631,10 +11646,10 @@
     cls.add_method('SendRequest', 
                    'void', 
                    [param('ns3::Ptr< ns3::Packet >', 'packet'), param('ns3::Ipv4Address', 'source')])
-    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::SendUnreachError(ns3::Ipv4Address errorHop, ns3::Ipv4Address destination, ns3::Ipv4Address originalDst, uint8_t salvage, uint8_t protocol) [member function]
+    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::SendUnreachError(ns3::Ipv4Address unreachNode, ns3::Ipv4Address destination, ns3::Ipv4Address originalDst, uint8_t salvage, uint8_t protocol) [member function]
     cls.add_method('SendUnreachError', 
                    'void', 
-                   [param('ns3::Ipv4Address', 'errorHop'), param('ns3::Ipv4Address', 'destination'), param('ns3::Ipv4Address', 'originalDst'), param('uint8_t', 'salvage'), param('uint8_t', 'protocol')])
+                   [param('ns3::Ipv4Address', 'unreachNode'), param('ns3::Ipv4Address', 'destination'), param('ns3::Ipv4Address', 'originalDst'), param('uint8_t', 'salvage'), param('uint8_t', 'protocol')])
     ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::SetDownTarget(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> callback) [member function]
     cls.add_method('SetDownTarget', 
                    'void', 
diff -Naur ns-3.19/src/dsr/doc/dsr.rst ns-3.20/src/dsr/doc/dsr.rst
--- ns-3.19/src/dsr/doc/dsr.rst	2014-06-17 10:34:00.336637449 -0700
+++ ns-3.20/src/dsr/doc/dsr.rst	2014-06-17 10:33:13.667997706 -0700
@@ -14,7 +14,8 @@
 ********************
  
 This model implements the base specification of the Dynamic Source Routing 
-(DSR) protocol. Implementation is based on :rfc:`4728`.
+(DSR) protocol. Implementation is based on :rfc:`4728`, with some extensions
+and modifications to the RFC specifications.
 
 DSR operates on a on-demand behavior. Therefore, our DSR model buffers all 
 packets while a route request packet (RREQ) is disseminated. We implement 
@@ -188,7 +189,16 @@
 * manet-routing-compare.cc has been used to compare DSR with three of other routing protocols.
 
 A paper was presented on these results at the Workshop on ns-3 in 2011.
-  
+
+Limitations
+***********
+
+The model is not fully compliant with :rfc:`4728`. As an example, Dsr fixed size header
+has been extended and it is four octects longer then the RFC specification.
+As a consequence, the DSR headers can not be correctly decoded by Wireshark.
+
+The model full compliance with the RFC is planned for the future.
+
 References
 **********
 
diff -Naur ns-3.19/src/dsr/model/dsr-errorbuff.cc ns-3.20/src/dsr/model/dsr-errorbuff.cc
--- ns-3.19/src/dsr/model/dsr-errorbuff.cc	2014-06-17 10:34:00.338637433 -0700
+++ ns-3.20/src/dsr/model/dsr-errorbuff.cc	2014-06-17 10:33:13.670997683 -0700
@@ -116,7 +116,7 @@
       if (i->GetDestination () == dst)
         {
           entry = *i;
-          m_errorBuffer.erase (i);
+          i = m_errorBuffer.erase (i);
           NS_LOG_DEBUG ("Packet size while dequeuing " << entry.GetPacket ()->GetSize ());
           return true;
         }
diff -Naur ns-3.19/src/dsr/model/dsr-fs-header.cc ns-3.20/src/dsr/model/dsr-fs-header.cc
--- ns-3.19/src/dsr/model/dsr-fs-header.cc	2014-06-17 10:34:00.339637426 -0700
+++ ns-3.20/src/dsr/model/dsr-fs-header.cc	2014-06-17 10:33:13.671997675 -0700
@@ -39,8 +39,7 @@
 
 NS_LOG_COMPONENT_DEFINE ("DsrFsHeader");
 
-NS_OBJECT_ENSURE_REGISTERED (DsrFsHeader)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (DsrFsHeader);
 
 TypeId DsrFsHeader::GetTypeId ()
 {
@@ -259,8 +258,7 @@
   return m_optionData;
 }
 
-NS_OBJECT_ENSURE_REGISTERED (DsrRoutingHeader)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (DsrRoutingHeader);
 
 TypeId DsrRoutingHeader::GetTypeId ()
 {
diff -Naur ns-3.19/src/dsr/model/dsr-gratuitous-reply-table.cc ns-3.20/src/dsr/model/dsr-gratuitous-reply-table.cc
--- ns-3.19/src/dsr/model/dsr-gratuitous-reply-table.cc	2014-06-17 10:34:00.340637418 -0700
+++ ns-3.20/src/dsr/model/dsr-gratuitous-reply-table.cc	2014-06-17 10:33:13.671997675 -0700
@@ -38,8 +38,7 @@
 namespace ns3 {
 namespace dsr {
 
-NS_OBJECT_ENSURE_REGISTERED (GraReply)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (GraReply);
 
 TypeId GraReply::GetTypeId ()
 {
diff -Naur ns-3.19/src/dsr/model/dsr-maintain-buff.cc ns-3.20/src/dsr/model/dsr-maintain-buff.cc
--- ns-3.19/src/dsr/model/dsr-maintain-buff.cc	2014-06-17 10:34:00.340637418 -0700
+++ ns-3.20/src/dsr/model/dsr-maintain-buff.cc	2014-06-17 10:33:13.672997667 -0700
@@ -97,7 +97,7 @@
       if (i->GetNextHop () == nextHop)
         {
           entry = *i;
-          m_maintainBuffer.erase (i);
+          i = m_maintainBuffer.erase (i);
           NS_LOG_DEBUG ("Packet size while dequeuing " << entry.GetPacket ()->GetSize ());
           return true;
         }
@@ -134,7 +134,7 @@
           && (i->GetSrc () == entry.GetSrc ()) && (i->GetDst () == entry.GetDst ())
           && (i->GetAckId () == entry.GetAckId ()) && (i->GetSegsLeft () == entry.GetSegsLeft ()))
         {
-          m_maintainBuffer.erase (i);   // Erase the same maintain buffer entry for the received packet
+          i = m_maintainBuffer.erase (i);   // Erase the same maintain buffer entry for the received packet
           return true;
         }
     }
@@ -155,7 +155,7 @@
           && (i->GetSrc () == entry.GetSrc ()) && (i->GetDst () == entry.GetDst ())
           && (i->GetAckId () == entry.GetAckId ()))
         {
-          m_maintainBuffer.erase (i);   // Erase the same maintain buffer entry for the received packet
+          i = m_maintainBuffer.erase (i);   // Erase the same maintain buffer entry for the received packet
           return true;
         }
     }
@@ -178,7 +178,7 @@
           && (i->GetSegsLeft () == entry.GetSegsLeft ()) && (i->GetAckId () == entry.GetAckId ())
           )
         {
-          m_maintainBuffer.erase (i);   // Erase the same maintain buffer entry for the promisc received packet
+          i = m_maintainBuffer.erase (i);   // Erase the same maintain buffer entry for the promisc received packet
           return true;
         }
     }
@@ -201,7 +201,7 @@
           && (i->GetNextHop () == entry.GetNextHop ())
           )
         {
-          m_maintainBuffer.erase (i);   // Erase the same maintain buffer entry for the promisc received packet
+          i = m_maintainBuffer.erase (i);   // Erase the same maintain buffer entry for the promisc received packet
           return true;
         }
     }
diff -Naur ns-3.19/src/dsr/model/dsr-maintain-buff.h ns-3.20/src/dsr/model/dsr-maintain-buff.h
--- ns-3.19/src/dsr/model/dsr-maintain-buff.h	2014-06-17 10:34:00.341637411 -0700
+++ ns-3.20/src/dsr/model/dsr-maintain-buff.h	2014-06-17 10:33:13.673997660 -0700
@@ -55,12 +55,18 @@
    * Compare maintain Buffer entries
    * \param o
    * \return true if equal
-   */
-  bool operator < (LinkKey const & o) const
+   */ 
+  bool operator < (const LinkKey & o) const
   {
-    return ((m_source < o.m_source) && (m_destination < o.m_destination)
-            && (m_ourAdd < o.m_nextHop) && (m_nextHop < o.m_nextHop)
-            );
+      if (m_source < o.m_source) return true;
+      if (o.m_source < m_source) return false;
+      if (m_destination < o.m_destination) return true;
+      if (o.m_destination < m_destination) return false;
+      if (m_ourAdd < o.m_ourAdd) return true;
+      if (o.m_ourAdd < m_ourAdd) return false;
+      if (m_nextHop < o.m_nextHop) return true;
+      if (o.m_nextHop < m_nextHop) return false;
+      return false;
   }
 };
 
@@ -77,11 +83,19 @@
    * \param o
    * \return true if equal
    */
-  bool operator < (NetworkKey const & o) const
+  bool operator < (const NetworkKey & o) const
   {
-    return ((m_ackId < o.m_ackId) && (m_ourAdd < o.m_ourAdd) && (m_nextHop < o.m_nextHop) && (m_source < o.m_source)
-            && (m_destination < o.m_destination)
-            );
+      if (m_ackId < o.m_ackId) return true;
+      if (o.m_ackId < m_ackId) return false;
+      if (m_source < o.m_source) return true;
+      if (o.m_source < m_source) return false;
+      if (m_destination < o.m_destination) return true;
+      if (o.m_destination < m_destination) return false;
+      if (m_ourAdd < o.m_ourAdd) return true;
+      if (o.m_ourAdd < m_ourAdd) return false;
+      if (m_nextHop < o.m_nextHop) return true;
+      if (o.m_nextHop < m_nextHop) return false;
+      return false;
   }
 };
 
@@ -97,11 +111,17 @@
    * \param o
    * \return true if equal
    */
-  bool operator < (PassiveKey const & o) const
+  bool operator < (const PassiveKey & o) const
   {
-    return ((m_ackId < o.m_ackId) && (m_source < o.m_source)
-            && (m_destination < o.m_destination) && (m_segsLeft < o.m_segsLeft)
-            );
+      if (m_ackId < o.m_ackId) return true;
+      if (o.m_ackId < m_ackId) return false;
+      if (m_source < o.m_source) return true;
+      if (o.m_source < m_source) return false;
+      if (m_destination < o.m_destination) return true;
+      if (o.m_destination < m_destination) return false;
+      if (m_segsLeft < o.m_segsLeft) return true;
+      if (o.m_segsLeft < m_segsLeft) return false;
+      return false;
   }
 };
 
diff -Naur ns-3.19/src/dsr/model/dsr-network-queue.cc ns-3.20/src/dsr/model/dsr-network-queue.cc
--- ns-3.19/src/dsr/model/dsr-network-queue.cc	2014-06-17 10:34:00.341637411 -0700
+++ ns-3.20/src/dsr/model/dsr-network-queue.cc	2014-06-17 10:33:13.673997660 -0700
@@ -43,8 +43,7 @@
 namespace ns3 {
 namespace dsr {
 
-NS_OBJECT_ENSURE_REGISTERED (DsrNetworkQueue)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (DsrNetworkQueue);
 
 TypeId
 DsrNetworkQueue::GetTypeId (void)
@@ -100,6 +99,36 @@
 }
 
 bool
+DsrNetworkQueue::FindPacketWithNexthop (Ipv4Address nextHop, DsrNetworkQueueEntry & entry)
+{
+  Cleanup ();
+  for (std::vector<DsrNetworkQueueEntry>::iterator i = m_dsrNetworkQueue.begin (); i != m_dsrNetworkQueue.end (); ++i)
+    {
+      if (i->GetNextHopAddress () == nextHop)
+        {
+          entry = *i;
+          i = m_dsrNetworkQueue.erase (i);
+          return true;
+        }
+    }
+  return false;
+}
+
+bool
+DsrNetworkQueue::Find (Ipv4Address nextHop)
+{
+  Cleanup ();
+  for (std::vector<DsrNetworkQueueEntry>::iterator i = m_dsrNetworkQueue.begin (); i != m_dsrNetworkQueue.end (); ++i)
+    {
+      if (i->GetNextHopAddress () == nextHop)
+        {
+          return true;
+        }
+    }
+  return false;
+}
+
+bool
 DsrNetworkQueue::Enqueue (DsrNetworkQueueEntry & entry)
 {
   NS_LOG_FUNCTION (this << m_size << m_maxSize);
diff -Naur ns-3.19/src/dsr/model/dsr-network-queue.h ns-3.20/src/dsr/model/dsr-network-queue.h
--- ns-3.19/src/dsr/model/dsr-network-queue.h	2014-06-17 10:34:00.341637411 -0700
+++ ns-3.20/src/dsr/model/dsr-network-queue.h	2014-06-17 10:33:13.673997660 -0700
@@ -151,6 +151,8 @@
   DsrNetworkQueue (uint32_t maxLen, Time maxDelay);
   ~DsrNetworkQueue ();
 
+  bool FindPacketWithNexthop (Ipv4Address nextHop, DsrNetworkQueueEntry & entry);
+  bool Find (Ipv4Address nextHop);
   /**
    * Push entry in queue, if there is no entry with the same
    * packet and destination address in queue.
diff -Naur ns-3.19/src/dsr/model/dsr-option-header.cc ns-3.20/src/dsr/model/dsr-option-header.cc
--- ns-3.19/src/dsr/model/dsr-option-header.cc	2014-06-17 10:34:00.342637403 -0700
+++ ns-3.20/src/dsr/model/dsr-option-header.cc	2014-06-17 10:33:13.674997652 -0700
@@ -42,8 +42,7 @@
 namespace dsr {
 NS_LOG_COMPONENT_DEFINE ("DsrOptionHeader");
 
-NS_OBJECT_ENSURE_REGISTERED (DsrOptionHeader)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (DsrOptionHeader);
 
 TypeId DsrOptionHeader::GetTypeId ()
 {
@@ -131,8 +130,7 @@
   return retVal;
 }
 
-NS_OBJECT_ENSURE_REGISTERED (DsrOptionPad1Header)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (DsrOptionPad1Header);
 
 TypeId DsrOptionPad1Header::GetTypeId ()
 {
@@ -183,8 +181,7 @@
   return GetSerializedSize ();
 }
 
-NS_OBJECT_ENSURE_REGISTERED (DsrOptionPadnHeader)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (DsrOptionPadnHeader);
 
 TypeId DsrOptionPadnHeader::GetTypeId ()
 {
@@ -244,8 +241,7 @@
   return GetSerializedSize ();
 }
 
-NS_OBJECT_ENSURE_REGISTERED (DsrOptionRreqHeader)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (DsrOptionRreqHeader);
 
 TypeId DsrOptionRreqHeader::GetTypeId ()
 {
@@ -392,8 +388,7 @@
   return retVal;
 }
 
-NS_OBJECT_ENSURE_REGISTERED (DsrOptionRrepHeader)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (DsrOptionRrepHeader);
 
 TypeId DsrOptionRrepHeader::GetTypeId ()
 {
@@ -514,8 +509,7 @@
   return retVal;
 }
 
-NS_OBJECT_ENSURE_REGISTERED (DsrOptionSRHeader)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (DsrOptionSRHeader);
 
 TypeId DsrOptionSRHeader::GetTypeId ()
 {
@@ -657,20 +651,13 @@
   return retVal;
 }
 
-NS_OBJECT_ENSURE_REGISTERED (DsrOptionRerrHeader)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (DsrOptionRerrHeader);
 
 TypeId DsrOptionRerrHeader::GetTypeId ()
 {
   static TypeId tid = TypeId ("ns3::dsr::DsrOptionRerrHeader")
     .AddConstructor<DsrOptionRerrHeader> ()
     .SetParent<DsrOptionHeader> ()
-    .AddAttribute ("ErrorType","Type of route errors",
-                   EnumValue (NODE_UNREACHABLE),
-                   MakeEnumAccessor (&DsrOptionRerrHeader::m_errorType),
-                   MakeEnumChecker (NODE_UNREACHABLE, "Node unreachable",
-                                    FLOW_STATE_NOT_SUPPORTED, "Flow state not supported",
-                                    OPTION_NOT_SUPPORTED, "Option not supported"))
   ;
   return tid;
 }
@@ -786,8 +773,7 @@
   return retVal;
 }
 
-NS_OBJECT_ENSURE_REGISTERED (DsrOptionRerrUnreachHeader)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (DsrOptionRerrUnreachHeader);
 
 TypeId DsrOptionRerrUnreachHeader::GetTypeId ()
 {
@@ -915,8 +901,7 @@
   return retVal;
 }
 
-NS_OBJECT_ENSURE_REGISTERED (DsrOptionRerrUnsupportHeader)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (DsrOptionRerrUnsupportHeader);
 
 TypeId DsrOptionRerrUnsupportHeader::GetTypeId ()
 {
@@ -1034,8 +1019,7 @@
   return retVal;
 }
 
-NS_OBJECT_ENSURE_REGISTERED (DsrOptionAckReqHeader)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (DsrOptionAckReqHeader);
 
 TypeId DsrOptionAckReqHeader::GetTypeId ()
 {
@@ -1110,8 +1094,7 @@
   return retVal;
 }
 
-NS_OBJECT_ENSURE_REGISTERED (DsrOptionAckHeader)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (DsrOptionAckHeader);
 
 TypeId DsrOptionAckHeader::GetTypeId ()
 {
diff -Naur ns-3.19/src/dsr/model/dsr-options.cc ns-3.20/src/dsr/model/dsr-options.cc
--- ns-3.19/src/dsr/model/dsr-options.cc	2014-06-17 10:34:00.344637387 -0700
+++ ns-3.20/src/dsr/model/dsr-options.cc	2014-06-17 10:33:13.676997636 -0700
@@ -65,8 +65,7 @@
 namespace ns3 {
 namespace dsr {
 
-NS_OBJECT_ENSURE_REGISTERED (DsrOptions)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (DsrOptions);
 
 TypeId DsrOptions::GetTypeId ()
 {
@@ -372,8 +371,7 @@
   return 0;
 }
 
-NS_OBJECT_ENSURE_REGISTERED (DsrOptionPad1)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (DsrOptionPad1);
 
 TypeId DsrOptionPad1::GetTypeId ()
 {
@@ -413,8 +411,7 @@
   return pad1Header.GetSerializedSize ();
 }
 
-NS_OBJECT_ENSURE_REGISTERED (DsrOptionPadn)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (DsrOptionPadn);
 
 TypeId DsrOptionPadn::GetTypeId ()
 {
@@ -454,8 +451,7 @@
   return padnHeader.GetSerializedSize ();
 }
 
-NS_OBJECT_ENSURE_REGISTERED (DsrOptionRreq)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (DsrOptionRreq);
 
 TypeId DsrOptionRreq::GetTypeId ()
 {
@@ -497,9 +493,9 @@
    * \ when the ip source address is equal to the address of our own, this is request packet originated
    * \ by the node itself, discard it
    */
-  if (srcAddress == ipv4Address)
+  if (source == ipv4Address)
     {
-      NS_LOG_DEBUG ("Discard the packet");
+      NS_LOG_DEBUG ("Discard the packet since it was originated from same source address");
       m_dropTrace (packet); // call the drop trace to show in the tracing
       return 0;
     }
@@ -603,6 +599,14 @@
     {
       // A node ignores all RREQs received from any node in its blacklist
       RouteCacheEntry toPrev;
+      bool isRouteInCache = dsr->LookupRoute (targetAddress,
+                                              toPrev);
+      RouteCacheEntry::IP_VECTOR ip = toPrev.GetVector (); // The route from our own route cache to dst
+      PrintVector (ip);
+      std::vector<Ipv4Address> saveRoute (nodeList);
+      PrintVector (saveRoute);
+      bool areThereDuplicates = IfDuplicates (ip,
+                                              saveRoute);
       /*
        *  When the reverse route is created or updated, the following actions on the route are also carried out:
        *  3. the next hop in the routing table becomes the node from which the  RREQ was received
@@ -622,7 +626,8 @@
             {
               NS_LOG_DEBUG ("These two nodes are neighbors");
               m_finalRoute.clear ();
-              m_finalRoute.push_back (srcAddress);     // push back the request originator's address
+              /// TODO has changed the srcAddress to source, should not matter either way, check later
+              m_finalRoute.push_back (source);     // push back the request originator's address
               m_finalRoute.push_back (ipv4Address);    // push back our own address
               nextHop = srcAddress;
             }
@@ -696,10 +701,14 @@
                   DsrOptionSRHeader sourceRoute;
                   NS_LOG_DEBUG ("The route length " << m_finalRoute.size ());
                   sourceRoute.SetNodesAddress (m_finalRoute);
-                  if (dsr->IsLinkCache ())
-                    {
-                      dsr->UseExtends (m_finalRoute);
-                    }
+
+                  /// TODO !!!!!!!!!!!!!!
+                  /// Think about this part, we just added the route,
+                  /// probability no need to increase stability now?????
+                  // if (dsr->IsLinkCache ())
+                  //   {
+                  //     dsr->UseExtends (m_finalRoute);
+                  //   }
                   sourceRoute.SetSegmentsLeft ((m_finalRoute.size () - 2));
                   // The salvage value here is 0
                   sourceRoute.SetSalvage (0);
@@ -737,18 +746,12 @@
       /*
        * (ii) or it has an active route to the destination, send reply based on request header and route cache,
        *      need to delay based on a random value from d = H * (h - 1 + r), which can avoid possible route
-       *      reply storm.
+       *      reply storm. Also, verify if two vectors do not contain duplicates (part of the route to the
+       *      destination from route cache and route collected so far). If so, do not use the route found
+       *      and forward the route request.
        */
-      else if (dsr->LookupRoute (targetAddress, toPrev))
+      else if (isRouteInCache && !areThereDuplicates)
         {
-          RouteCacheEntry::IP_VECTOR ip = toPrev.GetVector (); // The route from our own route cache to dst
-          PrintVector (ip);
-          std::vector<Ipv4Address> saveRoute (nodeList);
-          PrintVector (saveRoute);
-          // Verify if the two vector contains duplicates, if so, do not use
-          // the route found and forward the route request
-          if (!(IfDuplicates (ip, saveRoute)))
-            {
               m_finalRoute.clear ();            // Clear the final route vector
               /**
                * push back the intermediate node address from the source to this node
@@ -800,10 +803,10 @@
                       PrintVector (saveRoute);
 
                       sourceRoute.SetNodesAddress (saveRoute);
-                      if (dsr->IsLinkCache ())
-                        {
-                          dsr->UseExtends (saveRoute);
-                        }
+                      // if (dsr->IsLinkCache ())
+                      //   {
+                      //     dsr->UseExtends (saveRoute);
+                      //   }
                       sourceRoute.SetSegmentsLeft ((saveRoute.size () - 2));
                       uint8_t salvage = 0;
                       sourceRoute.SetSalvage (salvage);
@@ -839,7 +842,6 @@
                * Need to first pin down the next hop address before removing duplicates
                */
               Ipv4Address nextHop = ReverseSearchNextHop (ipv4Address, m_finalRoute);
-              NS_LOG_DEBUG ("The nextHop address " << nextHop);
               /*
                * First remove the duplicate ip address to automatically shorten the route, and then reversely
                * search the next hop address
@@ -870,11 +872,6 @@
               newPacket->AddHeader (dsrRoutingHeader);
               dsr->ScheduleCachedReply (newPacket, ipv4Address, nextHop, m_ipv4Route, hops);
               isPromisc = false;
-            }
-          else
-            {
-              NS_LOG_DEBUG ("There is duplicate ip addresses in the two route parts");
-            }
           return rreq.GetSerializedSize ();
         }
       /*
@@ -953,8 +950,7 @@
   //unreachable:  return rreq.GetSerializedSize ();
 }
 
-NS_OBJECT_ENSURE_REGISTERED (DsrOptionRrep)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (DsrOptionRrep);
 
 TypeId DsrOptionRrep::GetTypeId ()
 {
@@ -1154,8 +1150,7 @@
   return rrep.GetSerializedSize ();
 }
 
-NS_OBJECT_ENSURE_REGISTERED (DsrOptionSR)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (DsrOptionSR);
 
 TypeId DsrOptionSR::GetTypeId ()
 {
@@ -1313,7 +1308,8 @@
                     m_dropTrace (packet);
                     return 0;
                   }
-                if (numberAddress - segsLeft - 2 < 0) // The index is invalid
+                // -fstrict-overflow sensitive, see bug 1868
+                if (numberAddress - segsLeft < 2) // The index is invalid
                    {
                       NS_LOG_LOGIC ("Malformed header. Drop!");
                       m_dropTrace (packet);
@@ -1395,8 +1391,7 @@
   return sourceRoute.GetSerializedSize ();
 }
 
-NS_OBJECT_ENSURE_REGISTERED (DsrOptionRerr)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (DsrOptionRerr);
 
 TypeId DsrOptionRerr::GetTypeId ()
 {
@@ -1575,8 +1570,7 @@
   return serializedSize;
 }
 
-NS_OBJECT_ENSURE_REGISTERED (DsrOptionAckReq)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (DsrOptionAckReq);
 
 TypeId DsrOptionAckReq::GetTypeId ()
 {
@@ -1631,8 +1625,7 @@
   return ackReq.GetSerializedSize ();
 }
 
-NS_OBJECT_ENSURE_REGISTERED (DsrOptionAck)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (DsrOptionAck);
 
 TypeId DsrOptionAck::GetTypeId ()
 {
diff -Naur ns-3.19/src/dsr/model/dsr-passive-buff.cc ns-3.20/src/dsr/model/dsr-passive-buff.cc
--- ns-3.19/src/dsr/model/dsr-passive-buff.cc	2014-06-17 10:34:00.345637379 -0700
+++ ns-3.20/src/dsr/model/dsr-passive-buff.cc	2014-06-17 10:33:13.677997629 -0700
@@ -41,8 +41,7 @@
 namespace ns3 {
 namespace dsr {
 
-NS_OBJECT_ENSURE_REGISTERED (PassiveBuffer)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (PassiveBuffer);
 
 TypeId PassiveBuffer::GetTypeId ()
 {
@@ -117,7 +116,7 @@
           && (i->GetDestination () == entry.GetDestination ()) && (i->GetIdentification () == entry.GetIdentification ()) && (i->GetFragmentOffset () == entry.GetFragmentOffset ())
           && (i->GetSegsLeft () == entry.GetSegsLeft () + 1))
         {
-          m_passiveBuffer.erase (i);   // Erase the same maintain buffer entry for the received packet
+          i = m_passiveBuffer.erase (i);   // Erase the same maintain buffer entry for the received packet
           return true;
         }
     }
@@ -136,7 +135,7 @@
       if (i->GetDestination () == dst)
         {
           entry = *i;
-          m_passiveBuffer.erase (i);
+          i = m_passiveBuffer.erase (i);
           NS_LOG_DEBUG ("Packet size while dequeuing " << entry.GetPacket ()->GetSize ());
           return true;
         }
diff -Naur ns-3.19/src/dsr/model/dsr-rcache.cc ns-3.20/src/dsr/model/dsr-rcache.cc
--- ns-3.19/src/dsr/model/dsr-rcache.cc	2014-06-17 10:34:00.346637372 -0700
+++ ns-3.20/src/dsr/model/dsr-rcache.cc	2014-06-17 10:33:13.678997621 -0700
@@ -131,8 +131,7 @@
      << "\t";
 }
 
-NS_OBJECT_ENSURE_REGISTERED (RouteCache)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (RouteCache);
 
 TypeId RouteCache::GetTypeId ()
 {
@@ -696,7 +695,7 @@
       else
         {
           // Check if the expire time for the new route has expired or not
-          if (rt.GetExpireTime () > 0)
+          if (rt.GetExpireTime () > Time (0))
             {
               rtVector.push_back (rt);
               // This sort function will sort the route cache entries based on the size of route in each of the
diff -Naur ns-3.19/src/dsr/model/dsr-routing.cc ns-3.20/src/dsr/model/dsr-routing.cc
--- ns-3.19/src/dsr/model/dsr-routing.cc	2014-06-17 10:34:00.349637349 -0700
+++ ns-3.20/src/dsr/model/dsr-routing.cc	2014-06-17 10:33:13.682997590 -0700
@@ -52,6 +52,7 @@
 #include "ns3/node-list.h"
 #include "ns3/double.h"
 #include "ns3/pointer.h"
+#include "ns3/timer.h"
 #include "ns3/object-vector.h"
 #include "ns3/ipv4-address.h"
 #include "ns3/ipv4-header.h"
@@ -79,8 +80,7 @@
 namespace ns3 {
 namespace dsr {
 
-NS_OBJECT_ENSURE_REGISTERED (DsrRouting)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (DsrRouting);
 
 /* see http://www.iana.org/assignments/protocol-numbers */
 const uint8_t DsrRouting::PROT_NUMBER = 48;
@@ -276,7 +276,7 @@
                    MakeUintegerAccessor (&DsrRouting::m_numPriorityQueues),
                    MakeUintegerChecker<uint32_t> ())
     .AddAttribute ("LinkAcknowledgment","Enable Link layer acknowledgment mechanism",
-                   BooleanValue (false),
+                   BooleanValue (true),
                    MakeBooleanAccessor (&DsrRouting::m_linkAck),
                    MakeBooleanChecker ())
     .AddTraceSource ("Tx", "Send DSR packet.",
@@ -422,7 +422,8 @@
               routeCache->SetUseExtends (m_useExtends);
               routeCache->ScheduleTimer ();
               // The call back to handle link error and send error message to appropriate nodes
-              routeCache->SetCallback (MakeCallback (&DsrRouting::SendRerrWhenBreaksLinkToNextHop, this));
+              /// TODO whether this SendRerrWhenBreaksLinkToNextHop is used or not
+              // routeCache->SetCallback (MakeCallback (&DsrRouting::SendRerrWhenBreaksLinkToNextHop, this));
               SetRouteCache (routeCache);
               // Set the main address as the current ip address
               m_mainAddress = addr;
@@ -478,14 +479,14 @@
   /// \todo this is a hard-coded check, need to find a better way to work on this
   if (newP->GetSize () == 4)
     {
-      NS_LOG_WARN ("WifiMacTrailer left, skip this packet");
+      // NS_LOG_WARN ("WifiMacTrailer left, skip this packet");
       return;
     }
 
   LlcSnapHeader llc;
   if(!newP->PeekHeader (llc))
   {
-    NS_LOG_WARN ("llc snap header not present");
+    // NS_LOG_WARN ("llc snap header not present");
     NS_ASSERT (newP->GetSize() < 64);
     return;
   }
@@ -499,7 +500,7 @@
   ArpHeader arp;
   if(newP->PeekHeader (arp))
   {
-    NS_LOG_WARN ("arp header present, skip this packet");
+    // NS_LOG_WARN ("arp header present, skip this packet");
     NS_ASSERT (newP->GetSize() < 64);
     return;
   }
@@ -536,6 +537,8 @@
       newEntry.SetNextHop (ourAddress);
       /// Get the previous node's maintenance buffer and passive ack
       Ptr<Node> node = GetNodeWithAddress (previousHop);
+      NS_LOG_DEBUG ("The previous node " << previousHop);
+      
       Ptr<dsr::DsrRouting> dsr = node->GetObject<dsr::DsrRouting> ();
       dsr->CancelLinkPacketTimer (newEntry);
     }
@@ -842,151 +845,6 @@
     }
 }
 
-void DsrRouting::SendRerrWhenBreaksLinkToNextHop (Ipv4Address nextHop, uint8_t protocol)
-{
-  NS_LOG_FUNCTION (this << nextHop << (uint32_t)protocol);
-  MaintainBuffEntry entry;
-  // Find the packet in send buffer
-  if (m_maintainBuffer.Find (nextHop))
-    {
-      NS_LOG_DEBUG ("Trying to dequeue");
-
-      if (m_maintainBuffer.Dequeue (nextHop, entry))
-        {
-          NS_LOG_DEBUG ("creating new packet");
-          /*
-           * Copy the packet and save a copy to the send buffer.
-           * if only queue the original packet to the buffer,
-           * when dequeue the packet, it turns to be empty.
-           */
-          Ptr<Packet> dequeP = ConstCast<Packet> (entry.GetPacket ());
-          Ptr<Packet> newPacket = dequeP->Copy ();
-          Ptr<Packet> p = dequeP->Copy ();
-
-          Ipv4Address source = entry.GetSrc ();
-          Ipv4Address destination = entry.GetDst ();
-
-          DsrRoutingHeader dsrRoutingHeader;
-          p->RemoveHeader (dsrRoutingHeader);
-          Ptr<Packet> cleanP = p->Copy ();
-          uint8_t offset = dsrRoutingHeader.GetDsrOptionsOffset ();
-          newPacket->RemoveAtStart (offset);
-
-          // Get the number of routers' address field
-          uint8_t buf[2];
-          newPacket->CopyData (buf, sizeof(buf));
-          uint8_t numberAddress = (buf[1] - 2) / 4;
-
-          DsrOptionSRHeader sourceRoute;
-          sourceRoute.SetNumberAddress (numberAddress);
-          newPacket->RemoveHeader (sourceRoute);
-          uint8_t salvage = sourceRoute.GetSalvage ();
-
-          DsrOptionAckReqHeader ackReq;
-          newPacket->RemoveHeader (ackReq);
-          /*
-           * Get the node list address
-           */
-          std::vector<Ipv4Address> nodeList = sourceRoute.GetNodesAddress ();
-          Ipv4Address address1 = nodeList[1];
-          Ipv4Address nextHop = SearchNextHop (m_mainAddress, nodeList);
-          NS_LOG_DEBUG ("The next hop address" << nextHop);
-          if (nextHop == "0.0.0.0")
-            {
-              PacketNewRoute (cleanP, m_mainAddress, destination, protocol);
-              return;
-            }
-          RouteCacheEntry salvageRoute;
-          bool findRoute = m_routeCache->LookupRoute (destination, salvageRoute);
-          // Check the salvage value in header, if salvage is needed, we should find alternative route
-          if (findRoute && (salvage < m_maxSalvageCount))
-            {
-              // Need to salvage the packet instead of discard it
-              std::vector<Ipv4Address> nodeList = salvageRoute.GetVector ();
-              DsrOptionSRHeader newSR;
-              newSR.SetNodesAddress (nodeList);
-              newSR.SetSegmentsLeft ((nodeList.size () - 2));
-              newSR.SetSalvage (salvage + 1);
-              /// When found a route and use it, UseExtends to the link cache
-              if (m_routeCache->IsLinkCache ())
-                {
-                  m_routeCache->UseExtends (nodeList);
-                }
-              NetworkKey networkKey;
-              networkKey.m_ackId = entry.GetAckId ();
-              networkKey.m_ourAdd = entry.GetOurAdd ();
-              networkKey.m_nextHop = entry.GetNextHop ();
-              networkKey.m_source = entry.GetSrc ();
-              networkKey.m_destination = entry.GetDst ();
-
-              PassiveKey passiveKey;
-              passiveKey.m_ackId = 0;
-              passiveKey.m_source = entry.GetSrc ();
-              passiveKey.m_destination = entry.GetDst ();
-              passiveKey.m_segsLeft = entry.GetSegsLeft ();
-
-              LinkKey linkKey;
-              linkKey.m_source = entry.GetSrc ();
-              linkKey.m_destination = entry.GetDst ();
-              linkKey.m_ourAdd = entry.GetOurAdd ();
-              linkKey.m_nextHop = entry.GetNextHop ();
-
-              m_addressForwardCnt[networkKey] = 0;
-              m_passiveCnt[passiveKey] = 0;
-              m_linkCnt[linkKey] = 0;
-
-              if (m_linkAck)
-                {
-                  ScheduleLinkPacketRetry (entry, protocol);
-                }
-              else
-                {
-                  NS_LOG_LOGIC ("Not using link acknowledgment");
-                  if (nextHop != destination)
-                    {
-                      SchedulePassivePacketRetry (entry, protocol);
-                    }
-                  else
-                    {
-                      // This is the first network retry
-                      ScheduleNetworkPacketRetry (entry, true, protocol);
-                    }
-                }
-            }
-          else
-            {
-              /*
-               * This code block create a packet and attach a route error option to it
-               */
-              m_routeCache->DeleteAllRoutesIncludeLink (source, nextHop, m_mainAddress);
-              /*
-               * If the salvage is not 0, use the first address in the route as the error dst in error header
-               * otherwise use the source of packet as the error destination
-               */
-              Ipv4Address errorDst;
-              if (salvage)
-                {
-                  errorDst = address1;
-                }
-              else
-                {
-                  errorDst = source;
-                }
-              SendUnreachError (nextHop, errorDst, destination, salvage, protocol);
-              /*
-               * here we cancel the packet retransmission time for all the packets have next hop address
-               * as nextHop
-               */
-            }
-          if (m_maintainBuffer.GetSize () != 0 && m_maintainBuffer.Find (nextHop))
-            {
-              Simulator::Schedule (MilliSeconds (m_uniformRandomVariable->GetInteger (0,100)),
-                                   &DsrRouting::SendRerrWhenBreaksLinkToNextHop,this,nextHop,protocol);
-            }
-        }
-    }
-}
-
 void DsrRouting::SendBuffTimerExpire ()
 {
   if (m_sendBuffTimer.IsRunning ())
@@ -1093,19 +951,19 @@
                   Ptr<dsr::DsrNetworkQueue> dsrNetworkQueue = i->second;
                   NS_LOG_LOGIC ("Will be inserting into priority queue number: " << priority);
 
-                  m_downTarget (newPacket, m_mainAddress, nextHop, GetProtocolNumber (), m_ipv4Route);
+                  //m_downTarget (newPacket, m_mainAddress, nextHop, GetProtocolNumber (), m_ipv4Route);
 
                   /// \todo New DsrNetworkQueueEntry
-//                  DsrNetworkQueueEntry newEntry (newPacket, m_mainAddress, nextHop, Simulator::Now (), m_ipv4Route);
-//
-//                  if (dsrNetworkQueue->Enqueue (newEntry))
-//                    {
-//                      Scheduler (priority);
-//                    }
-//                  else
-//                    {
-//                      NS_LOG_INFO ("Packet dropped as dsr network queue is full");
-//                    }
+                 DsrNetworkQueueEntry newEntry (newPacket, m_mainAddress, nextHop, Simulator::Now (), m_ipv4Route);
+
+                 if (dsrNetworkQueue->Enqueue (newEntry))
+                   {
+                     Scheduler (priority);
+                   }
+                 else
+                   {
+                     NS_LOG_INFO ("Packet dropped as dsr network queue is full");
+                   }
                 }
             }
           else
@@ -1389,9 +1247,9 @@
 }
 
 void
-DsrRouting::SendUnreachError (Ipv4Address errorHop, Ipv4Address destination, Ipv4Address originalDst, uint8_t salvage, uint8_t protocol)
+DsrRouting::SendUnreachError (Ipv4Address unreachNode, Ipv4Address destination, Ipv4Address originalDst, uint8_t salvage, uint8_t protocol)
 {
-  NS_LOG_FUNCTION (this << errorHop << destination << originalDst << (uint32_t)salvage << (uint32_t)protocol);
+  NS_LOG_FUNCTION (this << unreachNode << destination << originalDst << (uint32_t)salvage << (uint32_t)protocol);
   DsrRoutingHeader dsrRoutingHeader;
   dsrRoutingHeader.SetNextHeader (protocol);
   dsrRoutingHeader.SetMessageType (1);
@@ -1401,42 +1259,52 @@
   DsrOptionRerrUnreachHeader rerrUnreachHeader;
   rerrUnreachHeader.SetErrorType (1);
   rerrUnreachHeader.SetErrorSrc (m_mainAddress);
-  rerrUnreachHeader.SetUnreachNode (errorHop);
+  rerrUnreachHeader.SetUnreachNode (unreachNode);
   rerrUnreachHeader.SetErrorDst (destination);
   rerrUnreachHeader.SetOriginalDst (originalDst);
   rerrUnreachHeader.SetSalvage (salvage);                       // Set the value about whether to salvage a packet or not
   uint8_t rerrLength = rerrUnreachHeader.GetLength ();
 
+
   RouteCacheEntry toDst;
   bool findRoute = m_routeCache->LookupRoute (destination, toDst);
   // Queue the packet if there is no route pre-existing
   Ptr<Packet> newPacket = Create<Packet> ();
   if (!findRoute)
     {
-      NS_LOG_INFO (Simulator::Now ().GetSeconds ()
-                   << "s " << m_mainAddress << " there is no route for this packet, queue the packet");
-
-      dsrRoutingHeader.SetPayloadLength (rerrLength + 2);
-      dsrRoutingHeader.AddDsrOption (rerrUnreachHeader);
-      newPacket->AddHeader (dsrRoutingHeader);
-      Ptr<Packet> p = newPacket->Copy ();
-      // Save the error packet in the error buffer
-      ErrorBuffEntry newEntry (p, destination, m_mainAddress, errorHop, m_sendBufferTimeout, protocol);
-      bool result = m_errorBuffer.Enqueue (newEntry);                    // Enqueue the packet in send buffer
-      if (result)
-        {
-          NS_LOG_INFO (Simulator::Now ().GetSeconds ()
-                       << "s Add packet PID: " << p->GetUid () << " to queue. Packet: " << *p);
-          NS_LOG_LOGIC ("Send RREQ to" << destination);
-          if ((m_addressReqTimer.find (destination) == m_addressReqTimer.end ()) && (m_nonPropReqTimer.find (destination) == m_nonPropReqTimer.end ()))
-            {
-              NS_LOG_DEBUG ("When there is no existing route request for " << destination << ", initialize one");
-              /*
-               * Call the send request function, it will update the request table entry and ttl there
-               */
-              SendInitialRequest (m_mainAddress, destination, protocol);
-            }
-        }
+      if (destination == m_mainAddress)
+      {
+        NS_LOG_INFO ("We are the error source, send request to original dst " << originalDst);
+        // Send error request message if we are the source node
+        SendErrorRequest (rerrUnreachHeader, protocol);
+      }
+      else 
+      {
+        NS_LOG_INFO (Simulator::Now ().GetSeconds ()
+                     << "s " << m_mainAddress << " there is no route for this packet, queue the packet");
+
+        dsrRoutingHeader.SetPayloadLength (rerrLength + 2);
+        dsrRoutingHeader.AddDsrOption (rerrUnreachHeader);
+        newPacket->AddHeader (dsrRoutingHeader);
+        Ptr<Packet> p = newPacket->Copy ();
+        // Save the error packet in the error buffer
+        ErrorBuffEntry newEntry (p, destination, m_mainAddress, unreachNode, m_sendBufferTimeout, protocol);
+        bool result = m_errorBuffer.Enqueue (newEntry);                    // Enqueue the packet in send buffer
+        if (result)
+          {
+            NS_LOG_INFO (Simulator::Now ().GetSeconds ()
+                         << "s Add packet PID: " << p->GetUid () << " to queue. Packet: " << *p);
+            NS_LOG_LOGIC ("Send RREQ to" << destination);
+            if ((m_addressReqTimer.find (destination) == m_addressReqTimer.end ()) && (m_nonPropReqTimer.find (destination) == m_nonPropReqTimer.end ()))
+              {
+                NS_LOG_DEBUG ("When there is no existing route request for " << destination << ", initialize one");
+                /*
+                 * Call the send request function, it will update the request table entry and ttl there
+                 */
+                SendInitialRequest (m_mainAddress, destination, protocol);
+              }
+          }
+      }
     }
   else
     {
@@ -1474,19 +1342,19 @@
       Ptr<dsr::DsrNetworkQueue> dsrNetworkQueue = i->second;
       NS_LOG_DEBUG ("Will be inserting into priority queue " << dsrNetworkQueue << " number: " << priority);
 
-      m_downTarget (newPacket, m_mainAddress, nextHop, GetProtocolNumber (), m_ipv4Route);
+      //m_downTarget (newPacket, m_mainAddress, nextHop, GetProtocolNumber (), m_ipv4Route);
 
       /// \todo New DsrNetworkQueueEntry
-//      DsrNetworkQueueEntry newEntry (newPacket, m_mainAddress, nextHop, Simulator::Now (), m_ipv4Route);
-//
-//      if (dsrNetworkQueue->Enqueue (newEntry))
-//        {
-//          Scheduler (priority);
-//        }
-//      else
-//        {
-//          NS_LOG_INFO ("Packet dropped as dsr network queue is full");
-//        }
+     DsrNetworkQueueEntry newEntry (newPacket, m_mainAddress, nextHop, Simulator::Now (), m_ipv4Route);
+
+     if (dsrNetworkQueue->Enqueue (newEntry))
+       {
+         Scheduler (priority);
+       }
+     else
+       {
+         NS_LOG_INFO ("Packet dropped as dsr network queue is full");
+       }
     }
 }
 
@@ -1519,19 +1387,19 @@
   Ptr<dsr::DsrNetworkQueue> dsrNetworkQueue = i->second;
   NS_LOG_DEBUG ("Will be inserting into priority queue " << dsrNetworkQueue << " number: " << priority);
 
-  m_downTarget (packet, m_mainAddress, nextHop, GetProtocolNumber (), route);
+  //m_downTarget (packet, m_mainAddress, nextHop, GetProtocolNumber (), route);
 
   /// \todo New DsrNetworkQueueEntry
-//  DsrNetworkQueueEntry newEntry (packet, m_mainAddress, nextHop, Simulator::Now (), route);
-//
-//  if (dsrNetworkQueue->Enqueue (newEntry))
-//    {
-//      Scheduler (priority);
-//    }
-//  else
-//    {
-//      NS_LOG_INFO ("Packet dropped as dsr network queue is full");
-//    }
+ DsrNetworkQueueEntry newEntry (packet, m_mainAddress, nextHop, Simulator::Now (), route);
+
+ if (dsrNetworkQueue->Enqueue (newEntry))
+   {
+     Scheduler (priority);
+   }
+ else
+   {
+     NS_LOG_INFO ("Packet dropped as dsr network queue is full");
+   }
 }
 
 void
@@ -1731,19 +1599,19 @@
   Ptr<dsr::DsrNetworkQueue> dsrNetworkQueue = i->second;
   NS_LOG_INFO ("Will be inserting into priority queue number: " << priority);
 
-  m_downTarget (packet, source, nextHop, GetProtocolNumber (), m_ipv4Route);
+  //m_downTarget (packet, source, nextHop, GetProtocolNumber (), m_ipv4Route);
 
   /// \todo New DsrNetworkQueueEntry 
-//  DsrNetworkQueueEntry newEntry (packet, source, nextHop, Simulator::Now (), m_ipv4Route);
-//
-//  if (dsrNetworkQueue->Enqueue (newEntry))
-//    {
-//      Scheduler (priority);
-//    }
-//  else
-//    {
-//      NS_LOG_INFO ("Packet dropped as dsr network queue is full");
-//    }
+ DsrNetworkQueueEntry newEntry (packet, source, nextHop, Simulator::Now (), m_ipv4Route);
+
+ if (dsrNetworkQueue->Enqueue (newEntry))
+   {
+     Scheduler (priority);
+   }
+ else
+   {
+     NS_LOG_INFO ("Packet dropped as dsr network queue is full");
+   }
 }
 
 void
@@ -1879,6 +1747,12 @@
   if (m_sendBuffer.Find (destination))
     {
       NS_LOG_DEBUG ("destination over here " << destination);
+
+      /// When found a route and use it, UseExtends to the link cache
+      if (m_routeCache->IsLinkCache ())
+        {
+          m_routeCache->UseExtends (nodeList);
+        }
       SendBuffEntry entry;
       if (m_sendBuffer.Dequeue (destination, entry))
         {
@@ -2037,19 +1911,19 @@
                   Ptr<dsr::DsrNetworkQueue> dsrNetworkQueue = i->second;
                   NS_LOG_DEBUG ("Will be inserting into priority queue " << dsrNetworkQueue << " number: " << priority);
 
-                  m_downTarget (newPacket, m_mainAddress, nextHop, GetProtocolNumber (), m_ipv4Route);
+                  //m_downTarget (newPacket, m_mainAddress, nextHop, GetProtocolNumber (), m_ipv4Route);
 
                   /// \todo New DsrNetworkQueueEntry
-//                  DsrNetworkQueueEntry newEntry (newPacket, m_mainAddress, nextHop, Simulator::Now (), m_ipv4Route);
-//
-//                  if (dsrNetworkQueue->Enqueue (newEntry))
-//                    {
-//                      Scheduler (priority);
-//                    }
-//                  else
-//                    {
-//                      NS_LOG_INFO ("Packet dropped as dsr network queue is full");
-//                    }
+                 DsrNetworkQueueEntry newEntry (newPacket, m_mainAddress, nextHop, Simulator::Now (), m_ipv4Route);
+
+                 if (dsrNetworkQueue->Enqueue (newEntry))
+                   {
+                     Scheduler (priority);
+                   }
+                 else
+                   {
+                     NS_LOG_INFO ("Packet dropped as dsr network queue is full");
+                   }
                 }
             }
 
@@ -2138,6 +2012,32 @@
 }
 
 void
+DsrRouting::CallCancelPacketTimer (uint16_t ackId, Ipv4Header const& ipv4Header, Ipv4Address realSrc, Ipv4Address realDst)
+{
+  NS_LOG_FUNCTION (this << (uint32_t)ackId << ipv4Header << realSrc << realDst);
+  Ipv4Address sender = ipv4Header.GetDestination ();
+  Ipv4Address receiver = ipv4Header.GetSource ();
+  /*
+   * Create a packet to fill maintenance buffer, not used to compare with maintainance entry
+   * The reason is ack header doesn't have the original packet copy
+   */
+  Ptr<Packet> mainP = Create<Packet> ();
+  MaintainBuffEntry newEntry (/*Packet=*/ mainP, /*ourAddress=*/ sender, /*nextHop=*/ receiver,
+                                          /*source=*/ realSrc, /*destination=*/ realDst, /*ackId=*/ ackId,
+                                          /*SegsLeft=*/ 0, /*expire time=*/ Simulator::Now ());
+  CancelNetworkPacketTimer (newEntry);  // Only need to cancel network packet timer
+}
+
+void 
+DsrRouting::CancelPacketAllTimer (MaintainBuffEntry & mb)
+{
+  NS_LOG_FUNCTION (this);
+  CancelLinkPacketTimer (mb);
+  CancelNetworkPacketTimer (mb);
+  CancelPassivePacketTimer (mb);
+}
+
+void
 DsrRouting::CancelLinkPacketTimer (MaintainBuffEntry & mb)
 {
   NS_LOG_FUNCTION (this);
@@ -2149,15 +2049,15 @@
   /*
    * Here we have found the entry for send retries, so we get the value and increase it by one
    */
+  /// TODO need to think about this part
   m_linkCnt[linkKey] = 0;
   m_linkCnt.erase (linkKey);
 
-  NS_LOG_INFO ("ourAdd " << mb.GetOurAdd () << " nextHop " << mb.GetNextHop ()
-               << " source " << mb.GetSrc () << " destination " << mb.GetDst ()
-               );
-  // Find the link acknowledgment timer
+  // TODO if find the linkkey, we need to remove it
+
+  // Find the network acknowledgment timer
   std::map<LinkKey, Timer>::const_iterator i =
-      m_linkAckTimer.find (linkKey);
+    m_linkAckTimer.find (linkKey);
   if (i == m_linkAckTimer.end ())
     {
       NS_LOG_INFO ("did not find the link timer");
@@ -2177,6 +2077,7 @@
         }
       m_linkAckTimer.erase (linkKey);
     }
+
   // Erase the maintenance entry
   // yet this does not check the segments left value here
   NS_LOG_DEBUG ("The link buffer size " << m_maintainBuffer.GetSize());
@@ -2187,23 +2088,6 @@
 }
 
 void
-DsrRouting::CallCancelPacketTimer (uint16_t ackId, Ipv4Header const& ipv4Header, Ipv4Address realSrc, Ipv4Address realDst)
-{
-  NS_LOG_FUNCTION (this << (uint32_t)ackId << ipv4Header << realSrc << realDst);
-  Ipv4Address sender = ipv4Header.GetDestination ();
-  Ipv4Address receiver = ipv4Header.GetSource ();
-  /*
-   * Create a packet to fill maintenance buffer, not used to compare with maintainance entry
-   * The reason is ack header doesn't have the original packet copy
-   */
-  Ptr<Packet> mainP = Create<Packet> ();
-  MaintainBuffEntry newEntry (/*Packet=*/ mainP, /*ourAddress=*/ sender, /*nextHop=*/ receiver,
-                                          /*source=*/ realSrc, /*destination=*/ realDst, /*ackId=*/ ackId,
-                                          /*SegsLeft=*/ 0, /*expire time=*/ Simulator::Now ());
-  CancelNetworkPacketTimer (newEntry);
-}
-
-void
 DsrRouting::CancelNetworkPacketTimer (MaintainBuffEntry & mb)
 {
   NS_LOG_FUNCTION (this);
@@ -2293,16 +2177,61 @@
 DsrRouting::CancelPacketTimerNextHop (Ipv4Address nextHop, uint8_t protocol)
 {
   NS_LOG_FUNCTION (this << nextHop << (uint32_t)protocol);
+
   MaintainBuffEntry entry;
+  std::vector<Ipv4Address> previousErrorDst;
   if (m_maintainBuffer.Dequeue (nextHop, entry))
     {
-      Ptr<const Packet> packet = entry.GetPacket ()->Copy ();
       Ipv4Address source = entry.GetSrc ();
       Ipv4Address destination = entry.GetDst ();
+
+      Ptr<Packet> dsrP = entry.GetPacket ()->Copy ();
+      Ptr<Packet> p = dsrP->Copy ();
+      Ptr<Packet> packet = dsrP->Copy ();
+      DsrRoutingHeader dsrRoutingHeader;
+      dsrP->RemoveHeader (dsrRoutingHeader);          // Remove the dsr header in whole
+      uint32_t offset = dsrRoutingHeader.GetDsrOptionsOffset ();
+      p->RemoveAtStart (offset);
+
+      // Get the number of routers' address field
+      uint8_t buf[2];
+      p->CopyData (buf, sizeof(buf));
+      uint8_t numberAddress = (buf[1] - 2) / 4;
+      NS_LOG_DEBUG ("The number of addresses " << (uint32_t)numberAddress);
+      DsrOptionSRHeader sourceRoute;
+      sourceRoute.SetNumberAddress (numberAddress);
+      p->RemoveHeader (sourceRoute);
+      std::vector<Ipv4Address> nodeList = sourceRoute.GetNodesAddress ();
+      uint8_t salvage = sourceRoute.GetSalvage ();
+      Ipv4Address address1 = nodeList[1];
+      PrintVector (nodeList);
+
+      /*
+       * If the salvage is not 0, use the first address in the route as the error dst in error header
+       * otherwise use the source of packet as the error destination
+       */
+      Ipv4Address errorDst;
+      if (salvage)
+        {
+          errorDst = address1;
+        }
+      else
+        {
+          errorDst = source;
+        }
+      /// TODO if the errorDst is not seen before
+      if (std::find(previousErrorDst.begin(), previousErrorDst.end(), destination)==previousErrorDst.end())
+      {
+        NS_LOG_DEBUG ("have not seen this dst before " << errorDst << " in " << previousErrorDst.size());
+        SendUnreachError (nextHop, errorDst, destination, salvage, protocol);
+        previousErrorDst.push_back(errorDst);
+      }
+
       /*
        * Cancel the packet timer and then salvage the data packet
        */
-      CancelNetworkPacketTimer (entry);
+
+      CancelPacketAllTimer (entry);
       SalvagePacket (packet, source, destination, protocol);
 
       if (m_maintainBuffer.GetSize () && m_maintainBuffer.Find (nextHop))
@@ -2316,6 +2245,7 @@
     {
       NS_LOG_INFO ("Maintenance buffer entry not found");
     }
+    /// TODO need to think about whether we need the network queue entry or not
 }
 
 void
@@ -2389,19 +2319,19 @@
       Ptr<dsr::DsrNetworkQueue> dsrNetworkQueue = i->second;
       NS_LOG_DEBUG ("Will be inserting into priority queue " << dsrNetworkQueue << " number: " << priority);
 
-      m_downTarget (p, m_mainAddress, nextHop, GetProtocolNumber (), m_ipv4Route);
+      //m_downTarget (p, m_mainAddress, nextHop, GetProtocolNumber (), m_ipv4Route);
 
       /// \todo New DsrNetworkQueueEntry
-//      DsrNetworkQueueEntry newEntry (p, m_mainAddress, nextHop, Simulator::Now (), m_ipv4Route);
-//
-//      if (dsrNetworkQueue->Enqueue (newEntry))
-//        {
-//          Scheduler (priority);
-//        }
-//      else
-//        {
-//          NS_LOG_INFO ("Packet dropped as dsr network queue is full");
-//        }
+     DsrNetworkQueueEntry newEntry (p, m_mainAddress, nextHop, Simulator::Now (), m_ipv4Route);
+
+     if (dsrNetworkQueue->Enqueue (newEntry))
+       {
+         Scheduler (priority);
+       }
+     else
+       {
+         NS_LOG_INFO ("Packet dropped as dsr network queue is full");
+       }
 
       /*
        * Mark the next hop address in blacklist
@@ -2590,7 +2520,6 @@
 {
   NS_LOG_FUNCTION (this << (uint32_t)protocol);
   Ipv4Address nextHop = mb.GetNextHop ();
-  Ipv4Address source = mb.GetSrc ();
   Ptr<const Packet> packet = mb.GetPacket ();
   SetRoute (nextHop, m_mainAddress);
   Ptr<Packet> p = packet->Copy ();
@@ -2619,46 +2548,14 @@
     }
   else
     {
-      NS_LOG_DEBUG ("We may need to send error messages now");
-      Ptr<Packet> dsrP = mb.GetPacket ()->Copy ();
-      // The packet retries time has exceed the max maintenance retransmission times
-      DsrRoutingHeader dsrRoutingHeader;
-      dsrP->RemoveHeader (dsrRoutingHeader);          // Remove the dsr header in whole
-      uint32_t offset = dsrRoutingHeader.GetDsrOptionsOffset ();
-      p->RemoveAtStart (offset);
-
-      // Get the number of routers' address field
-      uint8_t buf[2];
-      p->CopyData (buf, sizeof(buf));
-      uint8_t numberAddress = (buf[1] - 2) / 4;
-      NS_LOG_DEBUG ("The number of addresses " << (uint32_t)numberAddress);
-      DsrOptionSRHeader sourceRoute;
-      sourceRoute.SetNumberAddress (numberAddress);
-      p->RemoveHeader (sourceRoute);
-      std::vector<Ipv4Address> nodeList = sourceRoute.GetNodesAddress ();
-      uint8_t salvage = sourceRoute.GetSalvage ();
-      Ipv4Address address1 = nodeList[1];
-      PrintVector (nodeList);
+      NS_LOG_INFO ("We need to send error messages now");
 
       // Delete all the routes including the links
       m_routeCache->DeleteAllRoutesIncludeLink (m_mainAddress, nextHop, m_mainAddress);
       /*
-       * If the salvage is not 0, use the first address in the route as the error dst in error header
-       * otherwise use the source of packet as the error destination
-       */
-      Ipv4Address errorDst;
-      if (salvage)
-        {
-          errorDst = address1;
-        }
-      else
-        {
-          errorDst = source;
-        }
-      SendUnreachError (nextHop, errorDst, mb.GetDst (), salvage, protocol);
-      /*
        * here we cancel the packet retransmission time for all the packets have next hop address as nextHop
        * Also salvage the packet for the all the packet destined for the nextHop address
+       * this is also responsible for send unreachable error back to source
        */
       CancelPacketTimerNextHop (nextHop, protocol);
     }
@@ -2734,44 +2631,9 @@
 
   if (m_sendRetries >= m_maxMaintRexmt)
     {
-      Ptr<Packet> dsrP = mb.GetPacket ()->Copy ();
-      // The packet retries time has exceed the max maintenance retransmission times
-      NS_LOG_LOGIC ("Packet transmissions to " << nextHop << " has been attempted SendRetries times for " << networkKey.m_ackId);
-      DsrRoutingHeader dsrRoutingHeader;
-      dsrP->RemoveHeader (dsrRoutingHeader);          // Remove the dsr header in whole
-      uint32_t offset = dsrRoutingHeader.GetDsrOptionsOffset ();
-      p->RemoveAtStart (offset);
-
-      // Get the number of routers' address field
-      uint8_t buf[2];
-      p->CopyData (buf, sizeof(buf));
-      uint8_t numberAddress = (buf[1] - 2) / 4;
-      NS_LOG_DEBUG ("The number of addresses " << (uint32_t)numberAddress);
-      DsrOptionSRHeader sourceRoute;
-      sourceRoute.SetNumberAddress (numberAddress);
-      p->RemoveHeader (sourceRoute);
-      std::vector<Ipv4Address> nodeList = sourceRoute.GetNodesAddress ();
-      uint8_t salvage = sourceRoute.GetSalvage ();
-      Ipv4Address address1 = nodeList[1];
-      PrintVector (nodeList);
-
       // Delete all the routes including the links
       m_routeCache->DeleteAllRoutesIncludeLink (m_mainAddress, nextHop, m_mainAddress);
       /*
-       * If the salvage is not 0, use the first address in the route as the error dst in error header
-       * otherwise use the source of packet as the error destination
-       */
-      Ipv4Address errorDst;
-      if (salvage)
-        {
-          errorDst = address1;
-        }
-      else
-        {
-          errorDst = source;
-        }
-      SendUnreachError (nextHop, errorDst, dst, salvage, protocol);
-      /*
        * here we cancel the packet retransmission time for all the packets have next hop address as nextHop
        * Also salvage the packet for the all the packet destined for the nextHop address
        */
@@ -3226,18 +3088,18 @@
   Ptr<dsr::DsrNetworkQueue> dsrNetworkQueue = i->second;
   NS_LOG_LOGIC ("Inserting into priority queue number: " << priority);
 
-  m_downTarget (packet, source, m_broadcast, GetProtocolNumber (), 0);
+  //m_downTarget (packet, source, m_broadcast, GetProtocolNumber (), 0);
 
   /// \todo New DsrNetworkQueueEntry
-//  DsrNetworkQueueEntry newEntry (packet, source, m_broadcast, Simulator::Now (), 0);
-//  if (dsrNetworkQueue->Enqueue (newEntry))
-//    {
-//      Scheduler (priority);
-//    }
-//  else
-//    {
-//      NS_LOG_INFO ("Packet dropped as dsr network queue is full");
-//    }
+ DsrNetworkQueueEntry newEntry (packet, source, m_broadcast, Simulator::Now (), 0);
+ if (dsrNetworkQueue->Enqueue (newEntry))
+   {
+     Scheduler (priority);
+   }
+ else
+   {
+     NS_LOG_INFO ("Packet dropped as dsr network queue is full");
+   }
 }
 
 void
@@ -3332,18 +3194,18 @@
   Ptr<dsr::DsrNetworkQueue> dsrNetworkQueue = i->second;
   NS_LOG_INFO ("Inserting into priority queue number: " << priority);
 
-  m_downTarget (packet, source, nextHop, GetProtocolNumber (), route);
+  //m_downTarget (packet, source, nextHop, GetProtocolNumber (), route);
 
   /// \todo New DsrNetworkQueueEntry
-//  DsrNetworkQueueEntry newEntry (packet, source, nextHop, Simulator::Now (), route);
-//  if (dsrNetworkQueue->Enqueue (newEntry))
-//    {
-//      Scheduler (priority);
-//    }
-//  else
-//    {
-//      NS_LOG_INFO ("Packet dropped as dsr network queue is full");
-//    }
+ DsrNetworkQueueEntry newEntry (packet, source, nextHop, Simulator::Now (), route);
+ if (dsrNetworkQueue->Enqueue (newEntry))
+   {
+     Scheduler (priority);
+   }
+ else
+   {
+     NS_LOG_INFO ("Packet dropped as dsr network queue is full");
+   }
 }
 
 void
@@ -3409,18 +3271,18 @@
 
   NS_LOG_LOGIC ("Will be inserting into priority queue " << dsrNetworkQueue << " number: " << priority);
 
-  m_downTarget (packet, m_mainAddress, destination, GetProtocolNumber (), route);
+  //m_downTarget (packet, m_mainAddress, destination, GetProtocolNumber (), route);
 
   /// \todo New DsrNetworkQueueEntry
-//  DsrNetworkQueueEntry newEntry (packet, m_mainAddress, destination, Simulator::Now (), route);
-//  if (dsrNetworkQueue->Enqueue (newEntry))
-//    {
-//      Scheduler (priority);
-//    }
-//  else
-//    {
-//      NS_LOG_INFO ("Packet dropped as dsr network queue is full");
-//    }
+ DsrNetworkQueueEntry newEntry (packet, m_mainAddress, destination, Simulator::Now (), route);
+ if (dsrNetworkQueue->Enqueue (newEntry))
+   {
+     Scheduler (priority);
+   }
+ else
+   {
+     NS_LOG_INFO ("Packet dropped as dsr network queue is full");
+   }
 }
 
 enum IpL4Protocol::RxStatus
diff -Naur ns-3.19/src/dsr/model/dsr-routing.h ns-3.20/src/dsr/model/dsr-routing.h
--- ns-3.19/src/dsr/model/dsr-routing.h	2014-06-17 10:34:00.350637341 -0700
+++ ns-3.20/src/dsr/model/dsr-routing.h	2014-06-17 10:33:13.682997590 -0700
@@ -254,8 +254,7 @@
   /**
    * \brief This function is responsible for sending error packets in case of break link to next hop
    */
-  void SendUnreachError (Ipv4Address errorHop, Ipv4Address destination, Ipv4Address originalDst, uint8_t salvage, uint8_t protocol);
-  /**
+  void SendUnreachError (Ipv4Address unreachNode, Ipv4Address destination, Ipv4Address originalDst, uint8_t salvage, uint8_t protocol);  /**
    * \brief This function is responsible for forwarding error packets along the route
    */
   void ForwardErrPacket (DsrOptionRerrUnreachHeader &rerr,
@@ -304,6 +303,11 @@
    */
   bool PassiveEntryCheck (Ptr<Packet> packet, Ipv4Address source, Ipv4Address destination, uint8_t segsLeft,
                           uint16_t fragmentOffset, uint16_t identification, bool saveEntry);
+
+  /**
+  * \brief Cancel all the packet timers
+  */
+  void CancelPacketAllTimer (MaintainBuffEntry & mb);
   /**
    * \brief Cancel the passive timer
    */
@@ -752,6 +756,8 @@
 
   GraReply m_graReply;                                  ///< The gratuitous route reply.
 
+  DsrNetworkQueue m_networkQueue;                       ///< The network queue.
+
   std::vector<Ipv4Address> m_clearList;                 ///< The node that is clear to send packet to
 
   std::vector<Ipv4Address> m_addresses;                 ///< The bind ipv4 addresses with next hop, src, destination address in sequence
diff -Naur ns-3.19/src/dsr/model/dsr-rreq-table.cc ns-3.20/src/dsr/model/dsr-rreq-table.cc
--- ns-3.19/src/dsr/model/dsr-rreq-table.cc	2014-06-17 10:34:00.351637333 -0700
+++ ns-3.20/src/dsr/model/dsr-rreq-table.cc	2014-06-17 10:33:13.683997582 -0700
@@ -39,8 +39,7 @@
 namespace ns3 {
 namespace dsr {
 
-NS_OBJECT_ENSURE_REGISTERED (RreqTable)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (RreqTable);
 
 TypeId RreqTable::GetTypeId ()
 {
diff -Naur ns-3.19/src/dsr/model/dsr-rsendbuff.cc ns-3.20/src/dsr/model/dsr-rsendbuff.cc
--- ns-3.19/src/dsr/model/dsr-rsendbuff.cc	2014-06-17 10:34:00.352637325 -0700
+++ ns-3.20/src/dsr/model/dsr-rsendbuff.cc	2014-06-17 10:33:13.684997575 -0700
@@ -111,7 +111,7 @@
       if (i->GetDestination () == dst)
         {
           entry = *i;
-          m_sendBuffer.erase (i);
+          i = m_sendBuffer.erase (i);
           NS_LOG_DEBUG ("Packet size while dequeuing " << entry.GetPacket ()->GetSize ());
           return true;
         }
diff -Naur ns-3.19/src/dsr/test/dsr-test-suite.cc ns-3.20/src/dsr/test/dsr-test-suite.cc
--- ns-3.19/src/dsr/test/dsr-test-suite.cc	2014-06-17 10:34:00.353637318 -0700
+++ ns-3.20/src/dsr/test/dsr-test-suite.cc	2014-06-17 10:33:13.685997567 -0700
@@ -49,8 +49,8 @@
 #include "ns3/dsr-main-helper.h"
 #include "ns3/dsr-helper.h"
 
-namespace ns3 {
-namespace dsr {
+using namespace ns3;
+using namespace dsr;
 
 // -----------------------------------------------------------------------------
 // / Unit test for DSR Fixed Size Header
@@ -519,5 +519,3 @@
     AddTestCase (new DsrSendBuffTest, TestCase::QUICK);
   }
 } g_dsrTestSuite;
-} // namespace dsr
-} // namespace ns3
diff -Naur ns-3.19/src/emu/bindings/modulegen__gcc_ILP32.py ns-3.20/src/emu/bindings/modulegen__gcc_ILP32.py
--- ns-3.19/src/emu/bindings/modulegen__gcc_ILP32.py	2014-06-17 10:34:00.356637295 -0700
+++ ns-3.20/src/emu/bindings/modulegen__gcc_ILP32.py	2014-06-17 10:33:13.689997536 -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'], 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_PRISM_HEADER', 'DLT_IEEE802_11_RADIO', 'DLT_IEEE802_15_4'], 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]
@@ -118,6 +118,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]
@@ -130,6 +132,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'])
     ## emu-helper.h (module 'emu'): ns3::EmuHelper [class]
@@ -268,12 +272,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
     
@@ -336,6 +340,7 @@
     register_Ns3SystemMutex_methods(root_module, root_module['ns3::SystemMutex'])
     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'])
@@ -766,6 +771,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', 
@@ -778,6 +787,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', 
@@ -2362,6 +2375,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('!=')
@@ -2559,62 +2580,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('==')
@@ -2623,6 +2600,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]
@@ -2663,6 +2642,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):
@@ -3060,13 +3041,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('==')
@@ -3093,6 +3076,11 @@
     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', 
@@ -4225,10 +4213,10 @@
                    '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')])
     return
 
 def register_Ns3TimeValue_methods(root_module, cls):
diff -Naur ns-3.19/src/emu/bindings/modulegen__gcc_LP64.py ns-3.20/src/emu/bindings/modulegen__gcc_LP64.py
--- ns-3.19/src/emu/bindings/modulegen__gcc_LP64.py	2014-06-17 10:34:00.359637271 -0700
+++ ns-3.20/src/emu/bindings/modulegen__gcc_LP64.py	2014-06-17 10:33:13.692997513 -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'], 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_PRISM_HEADER', 'DLT_IEEE802_11_RADIO', 'DLT_IEEE802_15_4'], 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]
@@ -118,6 +118,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]
@@ -130,6 +132,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'])
     ## emu-helper.h (module 'emu'): ns3::EmuHelper [class]
@@ -268,12 +272,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
     
@@ -336,6 +340,7 @@
     register_Ns3SystemMutex_methods(root_module, root_module['ns3::SystemMutex'])
     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'])
@@ -766,6 +771,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', 
@@ -778,6 +787,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', 
@@ -2362,6 +2375,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('!=')
@@ -2559,62 +2580,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('==')
@@ -2623,6 +2600,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]
@@ -2663,6 +2642,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):
@@ -3060,13 +3041,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('==')
@@ -3093,6 +3076,11 @@
     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', 
@@ -4225,10 +4213,10 @@
                    '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')])
     return
 
 def register_Ns3TimeValue_methods(root_module, cls):
diff -Naur ns-3.19/src/emu/examples/waf ns-3.20/src/emu/examples/waf
--- ns-3.19/src/emu/examples/waf	2014-06-17 10:34:00.376637141 -0700
+++ ns-3.20/src/emu/examples/waf	1969-12-31 16:00:00.000000000 -0800
@@ -1 +0,0 @@
-exec "`dirname "$0"`"/../../waf "$@"
diff -Naur ns-3.19/src/emu/model/emu-net-device.cc ns-3.20/src/emu/model/emu-net-device.cc
--- ns-3.19/src/emu/model/emu-net-device.cc	2014-06-17 10:34:00.378637125 -0700
+++ ns-3.20/src/emu/model/emu-net-device.cc	2014-06-17 10:33:13.696997482 -0700
@@ -55,8 +55,7 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (EmuNetDevice)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (EmuNetDevice);
 
 #define EMU_MAGIC 65867
 
diff -Naur ns-3.19/src/emu/waf ns-3.20/src/emu/waf
--- ns-3.19/src/emu/waf	2014-06-17 10:34:00.380637109 -0700
+++ ns-3.20/src/emu/waf	1969-12-31 16:00:00.000000000 -0800
@@ -1 +0,0 @@
-exec "`dirname "$0"`"/../../../waf "$@"
diff -Naur ns-3.19/src/energy/bindings/modulegen__gcc_ILP32.py ns-3.20/src/energy/bindings/modulegen__gcc_ILP32.py
--- ns-3.19/src/energy/bindings/modulegen__gcc_ILP32.py	2014-06-17 10:34:00.384637079 -0700
+++ ns-3.20/src/energy/bindings/modulegen__gcc_ILP32.py	2014-06-17 10:33:13.702997436 -0700
@@ -110,6 +110,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')
     ## traced-value.h (module 'core'): ns3::TracedValue<double> [class]
     module.add_class('TracedValue', import_from_module='ns.core', template_parameters=['double'])
     ## type-id.h (module 'core'): ns3::TypeId [class]
@@ -136,6 +138,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')
     ## 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]
@@ -272,19 +276,19 @@
     module.add_class('AddressValue', import_from_module='ns.network', parent=root_module['ns3::AttributeValue'])
     ## 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='vector')
-    typehandlers.add_type_alias('std::vector< unsigned char, std::allocator< unsigned char > >', 'ns3::WifiMcsList')
-    typehandlers.add_type_alias('std::vector< unsigned char, std::allocator< unsigned char > >*', 'ns3::WifiMcsList*')
-    typehandlers.add_type_alias('std::vector< unsigned char, std::allocator< unsigned char > >&', 'ns3::WifiMcsList&')
-    typehandlers.add_type_alias('std::vector< ns3::WifiMode, std::allocator< ns3::WifiMode > >', 'ns3::WifiModeList')
-    typehandlers.add_type_alias('std::vector< ns3::WifiMode, std::allocator< ns3::WifiMode > >*', 'ns3::WifiModeList*')
-    typehandlers.add_type_alias('std::vector< ns3::WifiMode, std::allocator< ns3::WifiMode > >&', 'ns3::WifiModeList&')
-    typehandlers.add_type_alias('__gnu_cxx::__normal_iterator< ns3::WifiMode const *, std::vector< ns3::WifiMode, std::allocator< ns3::WifiMode > > >', 'ns3::WifiModeListIterator')
-    typehandlers.add_type_alias('__gnu_cxx::__normal_iterator< ns3::WifiMode const *, std::vector< ns3::WifiMode, std::allocator< ns3::WifiMode > > >*', 'ns3::WifiModeListIterator*')
-    typehandlers.add_type_alias('__gnu_cxx::__normal_iterator< ns3::WifiMode const *, std::vector< ns3::WifiMode, std::allocator< ns3::WifiMode > > >&', 'ns3::WifiModeListIterator&')
-    typehandlers.add_type_alias('__gnu_cxx::__normal_iterator< unsigned char const *, std::vector< unsigned char, std::allocator< unsigned char > > >', 'ns3::WifiMcsListIterator')
-    typehandlers.add_type_alias('__gnu_cxx::__normal_iterator< unsigned char const *, std::vector< unsigned char, std::allocator< unsigned char > > >*', 'ns3::WifiMcsListIterator*')
-    typehandlers.add_type_alias('__gnu_cxx::__normal_iterator< unsigned char const *, std::vector< unsigned char, std::allocator< unsigned char > > >&', 'ns3::WifiMcsListIterator&')
+    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
     
@@ -313,12 +317,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
     
@@ -379,6 +383,7 @@
     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'])
@@ -706,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', 
@@ -718,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', 
@@ -2087,6 +2100,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_Ns3TracedValue__Double_methods(root_module, cls):
     ## traced-value.h (module 'core'): ns3::TracedValue<double>::TracedValue() [constructor]
     cls.add_constructor([])
@@ -2556,62 +2577,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('==')
@@ -2620,6 +2597,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]
@@ -2660,6 +2639,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_Ns3BasicEnergySourceHelper_methods(root_module, cls):
@@ -2909,13 +2890,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('==')
@@ -2942,6 +2925,11 @@
     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', 
@@ -3713,6 +3701,11 @@
                    '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', 
@@ -5121,10 +5114,10 @@
                    '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')])
     return
 
 def register_Ns3RvBatteryModel_methods(root_module, cls):
diff -Naur ns-3.19/src/energy/bindings/modulegen__gcc_LP64.py ns-3.20/src/energy/bindings/modulegen__gcc_LP64.py
--- ns-3.19/src/energy/bindings/modulegen__gcc_LP64.py	2014-06-17 10:34:00.387637055 -0700
+++ ns-3.20/src/energy/bindings/modulegen__gcc_LP64.py	2014-06-17 10:33:13.705997412 -0700
@@ -110,6 +110,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')
     ## traced-value.h (module 'core'): ns3::TracedValue<double> [class]
     module.add_class('TracedValue', import_from_module='ns.core', template_parameters=['double'])
     ## type-id.h (module 'core'): ns3::TypeId [class]
@@ -136,6 +138,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')
     ## 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]
@@ -272,19 +276,19 @@
     module.add_class('AddressValue', import_from_module='ns.network', parent=root_module['ns3::AttributeValue'])
     ## 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='vector')
-    typehandlers.add_type_alias('std::vector< unsigned char, std::allocator< unsigned char > >', 'ns3::WifiMcsList')
-    typehandlers.add_type_alias('std::vector< unsigned char, std::allocator< unsigned char > >*', 'ns3::WifiMcsList*')
-    typehandlers.add_type_alias('std::vector< unsigned char, std::allocator< unsigned char > >&', 'ns3::WifiMcsList&')
-    typehandlers.add_type_alias('std::vector< ns3::WifiMode, std::allocator< ns3::WifiMode > >', 'ns3::WifiModeList')
-    typehandlers.add_type_alias('std::vector< ns3::WifiMode, std::allocator< ns3::WifiMode > >*', 'ns3::WifiModeList*')
-    typehandlers.add_type_alias('std::vector< ns3::WifiMode, std::allocator< ns3::WifiMode > >&', 'ns3::WifiModeList&')
-    typehandlers.add_type_alias('__gnu_cxx::__normal_iterator< ns3::WifiMode const *, std::vector< ns3::WifiMode, std::allocator< ns3::WifiMode > > >', 'ns3::WifiModeListIterator')
-    typehandlers.add_type_alias('__gnu_cxx::__normal_iterator< ns3::WifiMode const *, std::vector< ns3::WifiMode, std::allocator< ns3::WifiMode > > >*', 'ns3::WifiModeListIterator*')
-    typehandlers.add_type_alias('__gnu_cxx::__normal_iterator< ns3::WifiMode const *, std::vector< ns3::WifiMode, std::allocator< ns3::WifiMode > > >&', 'ns3::WifiModeListIterator&')
-    typehandlers.add_type_alias('__gnu_cxx::__normal_iterator< unsigned char const *, std::vector< unsigned char, std::allocator< unsigned char > > >', 'ns3::WifiMcsListIterator')
-    typehandlers.add_type_alias('__gnu_cxx::__normal_iterator< unsigned char const *, std::vector< unsigned char, std::allocator< unsigned char > > >*', 'ns3::WifiMcsListIterator*')
-    typehandlers.add_type_alias('__gnu_cxx::__normal_iterator< unsigned char const *, std::vector< unsigned char, std::allocator< unsigned char > > >&', 'ns3::WifiMcsListIterator&')
+    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
     
@@ -313,12 +317,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
     
@@ -379,6 +383,7 @@
     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'])
@@ -706,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', 
@@ -718,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', 
@@ -2087,6 +2100,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_Ns3TracedValue__Double_methods(root_module, cls):
     ## traced-value.h (module 'core'): ns3::TracedValue<double>::TracedValue() [constructor]
     cls.add_constructor([])
@@ -2556,62 +2577,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('==')
@@ -2620,6 +2597,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]
@@ -2660,6 +2639,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_Ns3BasicEnergySourceHelper_methods(root_module, cls):
@@ -2909,13 +2890,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('==')
@@ -2942,6 +2925,11 @@
     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', 
@@ -3713,6 +3701,11 @@
                    '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', 
@@ -5121,10 +5114,10 @@
                    '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')])
     return
 
 def register_Ns3RvBatteryModel_methods(root_module, cls):
diff -Naur ns-3.19/src/energy/helper/basic-energy-source-helper.cc ns-3.20/src/energy/helper/basic-energy-source-helper.cc
--- ns-3.19/src/energy/helper/basic-energy-source-helper.cc	2014-06-17 10:34:00.389637040 -0700
+++ ns-3.20/src/energy/helper/basic-energy-source-helper.cc	2014-06-17 10:33:13.707997397 -0700
@@ -42,13 +42,7 @@
 BasicEnergySourceHelper::DoInstall (Ptr<Node> node) const
 {
   NS_ASSERT (node != NULL);
-  // check if energy source already exists
-  Ptr<EnergySource> source = node->GetObject<EnergySource> ();
-  if (source != NULL)
-    {
-      NS_FATAL_ERROR ("Energy source already installed!");
-    }
-  source = m_basicEnergySource.Create<EnergySource> ();
+  Ptr<EnergySource> source = m_basicEnergySource.Create<EnergySource> ();
   NS_ASSERT (source != NULL);
   source->SetNode (node);
   return source;
diff -Naur ns-3.19/src/energy/helper/energy-model-helper.h ns-3.20/src/energy/helper/energy-model-helper.h
--- ns-3.19/src/energy/helper/energy-model-helper.h	2014-06-17 10:34:00.390637032 -0700
+++ ns-3.20/src/energy/helper/energy-model-helper.h	2014-06-17 10:33:13.708997389 -0700
@@ -38,8 +38,8 @@
  * \ingroup energy
  * \brief Creates EnergySource objects.
  *
- * This class creates and installs an energy source onto network nodes. Only a
- * single source can exist on a network node.
+ * This class creates and installs an energy source onto network nodes.
+ * Multiple sources can exist on a network node.
  *
  */
 class EnergySourceHelper
diff -Naur ns-3.19/src/energy/helper/rv-battery-model-helper.cc ns-3.20/src/energy/helper/rv-battery-model-helper.cc
--- ns-3.19/src/energy/helper/rv-battery-model-helper.cc	2014-06-17 10:34:00.391637024 -0700
+++ ns-3.20/src/energy/helper/rv-battery-model-helper.cc	2014-06-17 10:33:13.709997382 -0700
@@ -42,13 +42,7 @@
 RvBatteryModelHelper::DoInstall (Ptr<Node> node) const
 {
   NS_ASSERT (node != NULL);
-  // check if energy source already exists
-  Ptr<EnergySource> source = node->GetObject<EnergySource> ();
-  if (source != NULL)
-    {
-      NS_FATAL_ERROR ("Energy source already installed!");
-    }
-  source = m_rvBatteryModel.Create<EnergySource> ();
+  Ptr<EnergySource> source = m_rvBatteryModel.Create<EnergySource> ();
   NS_ASSERT (source != NULL);
   source->SetNode (node);
   return source;
diff -Naur ns-3.19/src/energy/model/basic-energy-source.cc ns-3.20/src/energy/model/basic-energy-source.cc
--- ns-3.19/src/energy/model/basic-energy-source.cc	2014-06-17 10:34:00.392637016 -0700
+++ ns-3.20/src/energy/model/basic-energy-source.cc	2014-06-17 10:33:13.710997374 -0700
@@ -29,8 +29,7 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (BasicEnergySource)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (BasicEnergySource);
 
 TypeId
 BasicEnergySource::GetTypeId (void)
diff -Naur ns-3.19/src/energy/model/device-energy-model.cc ns-3.20/src/energy/model/device-energy-model.cc
--- ns-3.19/src/energy/model/device-energy-model.cc	2014-06-17 10:34:00.393637009 -0700
+++ ns-3.20/src/energy/model/device-energy-model.cc	2014-06-17 10:33:13.711997366 -0700
@@ -25,8 +25,7 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (DeviceEnergyModel)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (DeviceEnergyModel);
 
 TypeId
 DeviceEnergyModel::GetTypeId (void)
diff -Naur ns-3.19/src/energy/model/energy-source.cc ns-3.20/src/energy/model/energy-source.cc
--- ns-3.19/src/energy/model/energy-source.cc	2014-06-17 10:34:00.394637001 -0700
+++ ns-3.20/src/energy/model/energy-source.cc	2014-06-17 10:33:13.712997359 -0700
@@ -25,8 +25,7 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (EnergySource)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (EnergySource);
 
 TypeId
 EnergySource::GetTypeId (void)
diff -Naur ns-3.19/src/energy/model/li-ion-energy-source.cc ns-3.20/src/energy/model/li-ion-energy-source.cc
--- ns-3.19/src/energy/model/li-ion-energy-source.cc	2014-06-17 10:34:00.395636994 -0700
+++ ns-3.20/src/energy/model/li-ion-energy-source.cc	2014-06-17 10:33:13.713997351 -0700
@@ -31,8 +31,7 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (LiIonEnergySource)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (LiIonEnergySource);
 
 TypeId
 LiIonEnergySource::GetTypeId (void)
diff -Naur ns-3.19/src/energy/model/rv-battery-model.cc ns-3.20/src/energy/model/rv-battery-model.cc
--- ns-3.19/src/energy/model/rv-battery-model.cc	2014-06-17 10:34:00.396636986 -0700
+++ ns-3.20/src/energy/model/rv-battery-model.cc	2014-06-17 10:33:13.713997351 -0700
@@ -30,8 +30,7 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (RvBatteryModel)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (RvBatteryModel);
 
 TypeId
 RvBatteryModel::GetTypeId (void)
diff -Naur ns-3.19/src/energy/model/simple-device-energy-model.cc ns-3.20/src/energy/model/simple-device-energy-model.cc
--- ns-3.19/src/energy/model/simple-device-energy-model.cc	2014-06-17 10:34:00.396636986 -0700
+++ ns-3.20/src/energy/model/simple-device-energy-model.cc	2014-06-17 10:33:13.714997343 -0700
@@ -28,8 +28,7 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (SimpleDeviceEnergyModel)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (SimpleDeviceEnergyModel);
 
 TypeId
 SimpleDeviceEnergyModel::GetTypeId (void)
diff -Naur ns-3.19/src/energy/model/wifi-radio-energy-model.cc ns-3.20/src/energy/model/wifi-radio-energy-model.cc
--- ns-3.19/src/energy/model/wifi-radio-energy-model.cc	2014-06-17 10:34:00.397636978 -0700
+++ ns-3.20/src/energy/model/wifi-radio-energy-model.cc	2014-06-17 10:33:13.715997336 -0700
@@ -29,8 +29,7 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (WifiRadioEnergyModel)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (WifiRadioEnergyModel);
 
 TypeId
 WifiRadioEnergyModel::GetTypeId (void)
diff -Naur ns-3.19/src/energy/test/li-ion-energy-source-test.cc ns-3.20/src/energy/test/li-ion-energy-source-test.cc
--- ns-3.19/src/energy/test/li-ion-energy-source-test.cc	2014-06-17 10:34:00.398636970 -0700
+++ ns-3.20/src/energy/test/li-ion-energy-source-test.cc	2014-06-17 10:33:13.716997328 -0700
@@ -25,10 +25,9 @@
 #include "ns3/node.h"
 #include "ns3/simulator.h"
 
-namespace ns3 {
+using namespace ns3;
 
-NS_LOG_COMPONENT_DEFINE ("LiIonEnergySourceTestSuite")
-  ;
+NS_LOG_COMPONENT_DEFINE ("LiIonEnergySourceTestSuite");
 
 class LiIonEnergyTestCase : public TestCase
 {
@@ -93,5 +92,3 @@
 
 // create an instance of the test suite
 static LiIonEnergySourceTestSuite g_liIonEnergySourceTestSuite;
-
-} // namespace ns3
diff -Naur ns-3.19/src/fd-net-device/bindings/modulegen_customizations.py ns-3.20/src/fd-net-device/bindings/modulegen_customizations.py
--- ns-3.19/src/fd-net-device/bindings/modulegen_customizations.py	2014-06-17 10:34:00.406636909 -0700
+++ ns-3.20/src/fd-net-device/bindings/modulegen_customizations.py	2014-06-17 10:33:13.724997266 -0700
@@ -5,7 +5,7 @@
 
     if 'EmuFdNetDevice' not in enabled_features:
         if 'ns3::EmuFdNetDeviceHelper'in root_module:
-	    root_module.classes.remove(root_module['ns3::EmuFdNetDeviceHelper'])
+            root_module.classes.remove(root_module['ns3::EmuFdNetDeviceHelper'])
 
     if 'TapFdNetDevice' not in enabled_features:
         if 'ns3::TapFdNetDeviceHelper'in root_module:
diff -Naur ns-3.19/src/fd-net-device/bindings/modulegen__gcc_ILP32.py ns-3.20/src/fd-net-device/bindings/modulegen__gcc_ILP32.py
--- ns-3.19/src/fd-net-device/bindings/modulegen__gcc_ILP32.py	2014-06-17 10:34:00.402636940 -0700
+++ ns-3.20/src/fd-net-device/bindings/modulegen__gcc_ILP32.py	2014-06-17 10:33:13.720997297 -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'], 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_PRISM_HEADER', 'DLT_IEEE802_11_RADIO', 'DLT_IEEE802_15_4'], 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]
@@ -120,6 +120,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]
@@ -132,6 +134,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'])
     ## fd-net-device-helper.h (module 'fd-net-device'): ns3::FdNetDeviceHelper [class]
@@ -280,12 +284,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
     
@@ -349,6 +353,7 @@
     register_Ns3SystemMutex_methods(root_module, root_module['ns3::SystemMutex'])
     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'])
@@ -784,6 +789,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', 
@@ -796,6 +805,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', 
@@ -2411,6 +2424,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('!=')
@@ -2608,62 +2629,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('==')
@@ -2672,6 +2649,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]
@@ -2712,6 +2691,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):
@@ -3122,13 +3103,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('==')
@@ -3155,6 +3138,11 @@
     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', 
@@ -4337,10 +4325,10 @@
                    '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')])
     return
 
 def register_Ns3TapFdNetDeviceHelper_methods(root_module, cls):
diff -Naur ns-3.19/src/fd-net-device/bindings/modulegen__gcc_LP64.py ns-3.20/src/fd-net-device/bindings/modulegen__gcc_LP64.py
--- ns-3.19/src/fd-net-device/bindings/modulegen__gcc_LP64.py	2014-06-17 10:34:00.405636916 -0700
+++ ns-3.20/src/fd-net-device/bindings/modulegen__gcc_LP64.py	2014-06-17 10:33:13.723997274 -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'], 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_PRISM_HEADER', 'DLT_IEEE802_11_RADIO', 'DLT_IEEE802_15_4'], 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]
@@ -120,6 +120,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]
@@ -132,6 +134,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'])
     ## fd-net-device-helper.h (module 'fd-net-device'): ns3::FdNetDeviceHelper [class]
@@ -280,12 +284,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
     
@@ -349,6 +353,7 @@
     register_Ns3SystemMutex_methods(root_module, root_module['ns3::SystemMutex'])
     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'])
@@ -784,6 +789,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', 
@@ -796,6 +805,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', 
@@ -2411,6 +2424,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('!=')
@@ -2608,62 +2629,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('==')
@@ -2672,6 +2649,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]
@@ -2712,6 +2691,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):
@@ -3122,13 +3103,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('==')
@@ -3155,6 +3138,11 @@
     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', 
@@ -4337,10 +4325,10 @@
                    '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')])
     return
 
 def register_Ns3TapFdNetDeviceHelper_methods(root_module, cls):
diff -Naur ns-3.19/src/fd-net-device/examples/fd-tap-ping.cc ns-3.20/src/fd-net-device/examples/fd-tap-ping.cc
--- ns-3.19/src/fd-net-device/examples/fd-tap-ping.cc	2014-06-17 10:34:00.408636893 -0700
+++ ns-3.20/src/fd-net-device/examples/fd-tap-ping.cc	2014-06-17 10:33:13.727997243 -0700
@@ -37,9 +37,9 @@
 //   |       1.2.3.4                 |     |
 //   +-------------------------------|-----+ 
 //                                   |
-//                                   |
-//                                   ------------ (Internet) -----                             
-//
+//                                   |                             +-------------+
+//                                   ------------ (Internet) ----- | Remote host |                            
+//                                                                 +-------------+
 //
 // To use this example:
 //  1) ns-3 will create the TAP device for you in the host machine.
@@ -47,15 +47,15 @@
 //     for the TAP device and the ns-3 FdNetDevice.
 //
 //  2) Take into consideration that this experiment requires the host to be able
-//     to forward the traffic generated by the simulation to the Internet.
+//     to forward traffic generated by the simulation to the Internet.
 //     So for Linux systems, make sure to configure:
 //     # echo 1 > /proc/sys/net/ipv4/ip_forward
 //
-//     Also enable natting so the traffic sent on the Internet are able to 
-//     reach back the TAP. 
+//     Also enable natting so the ICMP replys from the remote host can reach 
+//     back the TAP. 
 //     - TAP-network-address is the same as 'tapNetwork'
-//     - net-device-ip is be the IP address of the network device connected to the internet
-//     # iptables -t nat -A POSTROUTING -s <TAP-network-addres>/24 -j SNAT --to-source <net-device-ip>
+//     - TAP-network-mask is the same as 'tapMask'
+//     # iptables -t nat -A POSTROUTING -s <TAP-network-address>/<TAP-network-mask> -j MASQUERADE
 //
 //  3) Before running the example make sure that the tap creator binary has root suid.
 //     If the --enable-sudo option was used to configure ns-3 with waf, then the following
diff -Naur ns-3.19/src/fd-net-device/examples/waf ns-3.20/src/fd-net-device/examples/waf
--- ns-3.19/src/fd-net-device/examples/waf	2014-06-17 10:34:00.410636878 -0700
+++ ns-3.20/src/fd-net-device/examples/waf	1969-12-31 16:00:00.000000000 -0800
@@ -1 +0,0 @@
-exec "`dirname "$0"`"/../../waf "$@"
diff -Naur ns-3.19/src/fd-net-device/model/fd-net-device.cc ns-3.20/src/fd-net-device/model/fd-net-device.cc
--- ns-3.19/src/fd-net-device/model/fd-net-device.cc	2014-06-17 10:34:00.416636831 -0700
+++ ns-3.20/src/fd-net-device/model/fd-net-device.cc	2014-06-17 10:33:13.734997189 -0700
@@ -74,8 +74,7 @@
   return FdReader::Data (buf, len);
 }
 
-NS_OBJECT_ENSURE_REGISTERED (FdNetDevice)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (FdNetDevice);
 
 TypeId
 FdNetDevice::GetTypeId (void)
diff -Naur ns-3.19/src/fd-net-device/waf ns-3.20/src/fd-net-device/waf
--- ns-3.19/src/fd-net-device/waf	2014-06-17 10:34:00.417636824 -0700
+++ ns-3.20/src/fd-net-device/waf	1969-12-31 16:00:00.000000000 -0800
@@ -1 +0,0 @@
-exec "`dirname "$0"`"/../../../waf "$@"
diff -Naur ns-3.19/src/flow-monitor/bindings/modulegen__gcc_ILP32.py ns-3.20/src/flow-monitor/bindings/modulegen__gcc_ILP32.py
--- ns-3.19/src/flow-monitor/bindings/modulegen__gcc_ILP32.py	2014-06-17 10:34:00.422636785 -0700
+++ ns-3.20/src/flow-monitor/bindings/modulegen__gcc_ILP32.py	2014-06-17 10:33:13.739997150 -0700
@@ -60,34 +60,6 @@
     module.add_class('InetSocketAddress', import_from_module='ns.network')
     ## inet-socket-address.h (module 'network'): ns3::InetSocketAddress [class]
     root_module['ns3::InetSocketAddress'].implicitly_converts_to(root_module['ns3::Address'])
-    ## int-to-type.h (module 'core'): ns3::IntToType<0> [struct]
-    module.add_class('IntToType', import_from_module='ns.core', template_parameters=['0'])
-    ## int-to-type.h (module 'core'): ns3::IntToType<0>::v_e [enumeration]
-    module.add_enum('v_e', ['value'], outer_class=root_module['ns3::IntToType< 0 >'], import_from_module='ns.core')
-    ## int-to-type.h (module 'core'): ns3::IntToType<1> [struct]
-    module.add_class('IntToType', import_from_module='ns.core', template_parameters=['1'])
-    ## int-to-type.h (module 'core'): ns3::IntToType<1>::v_e [enumeration]
-    module.add_enum('v_e', ['value'], outer_class=root_module['ns3::IntToType< 1 >'], import_from_module='ns.core')
-    ## int-to-type.h (module 'core'): ns3::IntToType<2> [struct]
-    module.add_class('IntToType', import_from_module='ns.core', template_parameters=['2'])
-    ## int-to-type.h (module 'core'): ns3::IntToType<2>::v_e [enumeration]
-    module.add_enum('v_e', ['value'], outer_class=root_module['ns3::IntToType< 2 >'], import_from_module='ns.core')
-    ## int-to-type.h (module 'core'): ns3::IntToType<3> [struct]
-    module.add_class('IntToType', import_from_module='ns.core', template_parameters=['3'])
-    ## int-to-type.h (module 'core'): ns3::IntToType<3>::v_e [enumeration]
-    module.add_enum('v_e', ['value'], outer_class=root_module['ns3::IntToType< 3 >'], import_from_module='ns.core')
-    ## int-to-type.h (module 'core'): ns3::IntToType<4> [struct]
-    module.add_class('IntToType', import_from_module='ns.core', template_parameters=['4'])
-    ## int-to-type.h (module 'core'): ns3::IntToType<4>::v_e [enumeration]
-    module.add_enum('v_e', ['value'], outer_class=root_module['ns3::IntToType< 4 >'], import_from_module='ns.core')
-    ## int-to-type.h (module 'core'): ns3::IntToType<5> [struct]
-    module.add_class('IntToType', import_from_module='ns.core', template_parameters=['5'])
-    ## int-to-type.h (module 'core'): ns3::IntToType<5>::v_e [enumeration]
-    module.add_enum('v_e', ['value'], outer_class=root_module['ns3::IntToType< 5 >'], import_from_module='ns.core')
-    ## int-to-type.h (module 'core'): ns3::IntToType<6> [struct]
-    module.add_class('IntToType', import_from_module='ns.core', template_parameters=['6'])
-    ## int-to-type.h (module 'core'): ns3::IntToType<6>::v_e [enumeration]
-    module.add_enum('v_e', ['value'], outer_class=root_module['ns3::IntToType< 6 >'], 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]
@@ -144,14 +116,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')
-    ## timer.h (module 'core'): ns3::Timer [class]
-    module.add_class('Timer', import_from_module='ns.core')
-    ## timer.h (module 'core'): ns3::Timer::DestroyPolicy [enumeration]
-    module.add_enum('DestroyPolicy', ['CANCEL_ON_DESTROY', 'REMOVE_ON_DESTROY', 'CHECK_ON_DESTROY'], outer_class=root_module['ns3::Timer'], import_from_module='ns.core')
-    ## timer.h (module 'core'): ns3::Timer::State [enumeration]
-    module.add_enum('State', ['RUNNING', 'EXPIRED', 'SUSPENDED'], outer_class=root_module['ns3::Timer'], import_from_module='ns.core')
-    ## timer-impl.h (module 'core'): ns3::TimerImpl [class]
-    module.add_class('TimerImpl', allow_subclassing=True, import_from_module='ns.core')
+    ## 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]
@@ -164,6 +130,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]
@@ -262,10 +230,6 @@
     module.add_class('FlowProbe', parent=root_module['ns3::Object'])
     ## flow-probe.h (module 'flow-monitor'): ns3::FlowProbe::FlowStats [struct]
     module.add_class('FlowStats', outer_class=root_module['ns3::FlowProbe'])
-    ## ip-l4-protocol.h (module 'internet'): ns3::IpL4Protocol [class]
-    module.add_class('IpL4Protocol', import_from_module='ns.internet', parent=root_module['ns3::Object'])
-    ## ip-l4-protocol.h (module 'internet'): ns3::IpL4Protocol::RxStatus [enumeration]
-    module.add_enum('RxStatus', ['RX_OK', 'RX_CSUM_FAILED', 'RX_ENDPOINT_CLOSED', 'RX_ENDPOINT_UNREACH'], outer_class=root_module['ns3::IpL4Protocol'], import_from_module='ns.internet')
     ## ipv4.h (module 'internet'): ns3::Ipv4 [class]
     module.add_class('Ipv4', import_from_module='ns.internet', parent=root_module['ns3::Object'])
     ## ipv4-address.h (module 'network'): ns3::Ipv4AddressChecker [class]
@@ -294,12 +258,26 @@
     module.add_class('Ipv4Route', import_from_module='ns.internet', parent=root_module['ns3::SimpleRefCount< ns3::Ipv4Route, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4Route> >'])
     ## ipv4-routing-protocol.h (module 'internet'): ns3::Ipv4RoutingProtocol [class]
     module.add_class('Ipv4RoutingProtocol', import_from_module='ns.internet', parent=root_module['ns3::Object'])
+    ## ipv6.h (module 'internet'): ns3::Ipv6 [class]
+    module.add_class('Ipv6', import_from_module='ns.internet', parent=root_module['ns3::Object'])
     ## 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-interface.h (module 'internet'): ns3::Ipv6Interface [class]
-    module.add_class('Ipv6Interface', import_from_module='ns.internet', parent=root_module['ns3::Object'])
+    ## ipv6-flow-classifier.h (module 'flow-monitor'): ns3::Ipv6FlowClassifier [class]
+    module.add_class('Ipv6FlowClassifier', parent=root_module['ns3::FlowClassifier'])
+    ## ipv6-flow-classifier.h (module 'flow-monitor'): ns3::Ipv6FlowClassifier::FiveTuple [struct]
+    module.add_class('FiveTuple', outer_class=root_module['ns3::Ipv6FlowClassifier'])
+    ## ipv6-flow-probe.h (module 'flow-monitor'): ns3::Ipv6FlowProbe [class]
+    module.add_class('Ipv6FlowProbe', parent=root_module['ns3::FlowProbe'])
+    ## ipv6-flow-probe.h (module 'flow-monitor'): ns3::Ipv6FlowProbe::DropReason [enumeration]
+    module.add_enum('DropReason', ['DROP_NO_ROUTE', 'DROP_TTL_EXPIRE', 'DROP_BAD_CHECKSUM', 'DROP_QUEUE', 'DROP_INTERFACE_DOWN', 'DROP_ROUTE_ERROR', 'DROP_UNKNOWN_PROTOCOL', 'DROP_UNKNOWN_OPTION', 'DROP_MALFORMED_HEADER', 'DROP_FRAGMENT_TIMEOUT', 'DROP_INVALID_REASON'], outer_class=root_module['ns3::Ipv6FlowProbe'])
+    ## ipv6-l3-protocol.h (module 'internet'): ns3::Ipv6L3Protocol [class]
+    module.add_class('Ipv6L3Protocol', import_from_module='ns.internet', parent=root_module['ns3::Ipv6'])
+    ## ipv6-l3-protocol.h (module 'internet'): ns3::Ipv6L3Protocol::DropReason [enumeration]
+    module.add_enum('DropReason', ['DROP_TTL_EXPIRED', 'DROP_NO_ROUTE', 'DROP_INTERFACE_DOWN', 'DROP_ROUTE_ERROR', 'DROP_UNKNOWN_PROTOCOL', 'DROP_UNKNOWN_OPTION', 'DROP_MALFORMED_HEADER', 'DROP_FRAGMENT_TIMEOUT'], outer_class=root_module['ns3::Ipv6L3Protocol'], import_from_module='ns.internet')
+    ## ipv6-pmtu-cache.h (module 'internet'): ns3::Ipv6PmtuCache [class]
+    module.add_class('Ipv6PmtuCache', import_from_module='ns.internet', parent=root_module['ns3::Object'])
     ## 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]
@@ -330,18 +308,18 @@
     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< unsigned int >', 'unsigned int', container_type='vector')
-    module.add_container('std::vector< unsigned long long >', 'long long unsigned int', container_type='vector')
-    module.add_container('std::map< unsigned int, ns3::FlowMonitor::FlowStats >', ('unsigned int', 'ns3::FlowMonitor::FlowStats'), container_type='map')
-    module.add_container('std::vector< ns3::Ptr< ns3::FlowProbe > >', 'ns3::Ptr< ns3::FlowProbe >', container_type='vector')
-    module.add_container('std::map< unsigned int, ns3::FlowProbe::FlowStats >', ('unsigned int', 'ns3::FlowProbe::FlowStats'), container_type='map')
-    module.add_container('std::map< unsigned int, unsigned int >', ('unsigned int', 'unsigned int'), container_type='map')
-    typehandlers.add_type_alias('uint32_t', 'ns3::FlowPacketId')
-    typehandlers.add_type_alias('uint32_t*', 'ns3::FlowPacketId*')
-    typehandlers.add_type_alias('uint32_t&', 'ns3::FlowPacketId&')
-    typehandlers.add_type_alias('uint32_t', 'ns3::FlowId')
-    typehandlers.add_type_alias('uint32_t*', 'ns3::FlowId*')
-    typehandlers.add_type_alias('uint32_t&', 'ns3::FlowId&')
+    module.add_container('std::vector< unsigned int >', 'unsigned int', container_type=u'vector')
+    module.add_container('std::vector< unsigned long long >', 'long long unsigned int', container_type=u'vector')
+    module.add_container('std::map< unsigned int, ns3::FlowMonitor::FlowStats >', ('unsigned int', 'ns3::FlowMonitor::FlowStats'), container_type=u'map')
+    module.add_container('std::vector< ns3::Ptr< ns3::FlowProbe > >', 'ns3::Ptr< ns3::FlowProbe >', container_type=u'vector')
+    module.add_container('std::map< unsigned int, ns3::FlowProbe::FlowStats >', ('unsigned int', 'ns3::FlowProbe::FlowStats'), container_type=u'map')
+    module.add_container('std::map< unsigned int, unsigned int >', ('unsigned int', 'unsigned int'), container_type=u'map')
+    typehandlers.add_type_alias(u'uint32_t', u'ns3::FlowPacketId')
+    typehandlers.add_type_alias(u'uint32_t*', u'ns3::FlowPacketId*')
+    typehandlers.add_type_alias(u'uint32_t&', u'ns3::FlowPacketId&')
+    typehandlers.add_type_alias(u'uint32_t', u'ns3::FlowId')
+    typehandlers.add_type_alias(u'uint32_t*', u'ns3::FlowId*')
+    typehandlers.add_type_alias(u'uint32_t&', u'ns3::FlowId&')
     
     ## Register a nested module for the namespace FatalImpl
     
@@ -364,12 +342,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
     
@@ -407,13 +385,6 @@
     register_Ns3Histogram_methods(root_module, root_module['ns3::Histogram'])
     register_Ns3Inet6SocketAddress_methods(root_module, root_module['ns3::Inet6SocketAddress'])
     register_Ns3InetSocketAddress_methods(root_module, root_module['ns3::InetSocketAddress'])
-    register_Ns3IntToType__0_methods(root_module, root_module['ns3::IntToType< 0 >'])
-    register_Ns3IntToType__1_methods(root_module, root_module['ns3::IntToType< 1 >'])
-    register_Ns3IntToType__2_methods(root_module, root_module['ns3::IntToType< 2 >'])
-    register_Ns3IntToType__3_methods(root_module, root_module['ns3::IntToType< 3 >'])
-    register_Ns3IntToType__4_methods(root_module, root_module['ns3::IntToType< 4 >'])
-    register_Ns3IntToType__5_methods(root_module, root_module['ns3::IntToType< 5 >'])
-    register_Ns3IntToType__6_methods(root_module, root_module['ns3::IntToType< 6 >'])
     register_Ns3Ipv4Address_methods(root_module, root_module['ns3::Ipv4Address'])
     register_Ns3Ipv4InterfaceAddress_methods(root_module, root_module['ns3::Ipv4InterfaceAddress'])
     register_Ns3Ipv4Mask_methods(root_module, root_module['ns3::Ipv4Mask'])
@@ -435,8 +406,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_Ns3Timer_methods(root_module, root_module['ns3::Timer'])
-    register_Ns3TimerImpl_methods(root_module, root_module['ns3::TimerImpl'])
+    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'])
@@ -484,7 +454,6 @@
     register_Ns3FlowMonitorFlowStats_methods(root_module, root_module['ns3::FlowMonitor::FlowStats'])
     register_Ns3FlowProbe_methods(root_module, root_module['ns3::FlowProbe'])
     register_Ns3FlowProbeFlowStats_methods(root_module, root_module['ns3::FlowProbe::FlowStats'])
-    register_Ns3IpL4Protocol_methods(root_module, root_module['ns3::IpL4Protocol'])
     register_Ns3Ipv4_methods(root_module, root_module['ns3::Ipv4'])
     register_Ns3Ipv4AddressChecker_methods(root_module, root_module['ns3::Ipv4AddressChecker'])
     register_Ns3Ipv4AddressValue_methods(root_module, root_module['ns3::Ipv4AddressValue'])
@@ -497,9 +466,14 @@
     register_Ns3Ipv4MulticastRoute_methods(root_module, root_module['ns3::Ipv4MulticastRoute'])
     register_Ns3Ipv4Route_methods(root_module, root_module['ns3::Ipv4Route'])
     register_Ns3Ipv4RoutingProtocol_methods(root_module, root_module['ns3::Ipv4RoutingProtocol'])
+    register_Ns3Ipv6_methods(root_module, root_module['ns3::Ipv6'])
     register_Ns3Ipv6AddressChecker_methods(root_module, root_module['ns3::Ipv6AddressChecker'])
     register_Ns3Ipv6AddressValue_methods(root_module, root_module['ns3::Ipv6AddressValue'])
-    register_Ns3Ipv6Interface_methods(root_module, root_module['ns3::Ipv6Interface'])
+    register_Ns3Ipv6FlowClassifier_methods(root_module, root_module['ns3::Ipv6FlowClassifier'])
+    register_Ns3Ipv6FlowClassifierFiveTuple_methods(root_module, root_module['ns3::Ipv6FlowClassifier::FiveTuple'])
+    register_Ns3Ipv6FlowProbe_methods(root_module, root_module['ns3::Ipv6FlowProbe'])
+    register_Ns3Ipv6L3Protocol_methods(root_module, root_module['ns3::Ipv6L3Protocol'])
+    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_Ns3NetDevice_methods(root_module, root_module['ns3::NetDevice'])
@@ -766,6 +740,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', 
@@ -778,6 +756,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', 
@@ -1045,18 +1027,12 @@
     return
 
 def register_Ns3FlowMonitorHelper_methods(root_module, cls):
-    ## flow-monitor-helper.h (module 'flow-monitor'): ns3::FlowMonitorHelper::FlowMonitorHelper(ns3::FlowMonitorHelper const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::FlowMonitorHelper const &', 'arg0')])
     ## flow-monitor-helper.h (module 'flow-monitor'): ns3::FlowMonitorHelper::FlowMonitorHelper() [constructor]
     cls.add_constructor([])
-    ## flow-monitor-helper.h (module 'flow-monitor'): ns3::Ptr<ns3::FlowClassifier> ns3::FlowMonitorHelper::GetClassifier() [member function]
-    cls.add_method('GetClassifier', 
-                   'ns3::Ptr< ns3::FlowClassifier >', 
-                   [])
-    ## flow-monitor-helper.h (module 'flow-monitor'): ns3::Ptr<ns3::FlowMonitor> ns3::FlowMonitorHelper::GetMonitor() [member function]
-    cls.add_method('GetMonitor', 
-                   'ns3::Ptr< ns3::FlowMonitor >', 
-                   [])
+    ## flow-monitor-helper.h (module 'flow-monitor'): void ns3::FlowMonitorHelper::SetMonitorAttribute(std::string n1, ns3::AttributeValue const & v1) [member function]
+    cls.add_method('SetMonitorAttribute', 
+                   'void', 
+                   [param('std::string', 'n1'), param('ns3::AttributeValue const &', 'v1')])
     ## flow-monitor-helper.h (module 'flow-monitor'): ns3::Ptr<ns3::FlowMonitor> ns3::FlowMonitorHelper::Install(ns3::NodeContainer nodes) [member function]
     cls.add_method('Install', 
                    'ns3::Ptr< ns3::FlowMonitor >', 
@@ -1069,10 +1045,30 @@
     cls.add_method('InstallAll', 
                    'ns3::Ptr< ns3::FlowMonitor >', 
                    [])
-    ## flow-monitor-helper.h (module 'flow-monitor'): void ns3::FlowMonitorHelper::SetMonitorAttribute(std::string n1, ns3::AttributeValue const & v1) [member function]
-    cls.add_method('SetMonitorAttribute', 
+    ## flow-monitor-helper.h (module 'flow-monitor'): ns3::Ptr<ns3::FlowMonitor> ns3::FlowMonitorHelper::GetMonitor() [member function]
+    cls.add_method('GetMonitor', 
+                   'ns3::Ptr< ns3::FlowMonitor >', 
+                   [])
+    ## flow-monitor-helper.h (module 'flow-monitor'): ns3::Ptr<ns3::FlowClassifier> ns3::FlowMonitorHelper::GetClassifier() [member function]
+    cls.add_method('GetClassifier', 
+                   'ns3::Ptr< ns3::FlowClassifier >', 
+                   [])
+    ## flow-monitor-helper.h (module 'flow-monitor'): ns3::Ptr<ns3::FlowClassifier> ns3::FlowMonitorHelper::GetClassifier6() [member function]
+    cls.add_method('GetClassifier6', 
+                   'ns3::Ptr< ns3::FlowClassifier >', 
+                   [])
+    ## flow-monitor-helper.h (module 'flow-monitor'): void ns3::FlowMonitorHelper::SerializeToXmlStream(std::ostream & os, int indent, bool enableHistograms, bool enableProbes) [member function]
+    cls.add_method('SerializeToXmlStream', 
                    'void', 
-                   [param('std::string', 'n1'), param('ns3::AttributeValue const &', 'v1')])
+                   [param('std::ostream &', 'os'), param('int', 'indent'), param('bool', 'enableHistograms'), param('bool', 'enableProbes')])
+    ## flow-monitor-helper.h (module 'flow-monitor'): std::string ns3::FlowMonitorHelper::SerializeToXmlString(int indent, bool enableHistograms, bool enableProbes) [member function]
+    cls.add_method('SerializeToXmlString', 
+                   'std::string', 
+                   [param('int', 'indent'), param('bool', 'enableHistograms'), param('bool', 'enableProbes')])
+    ## flow-monitor-helper.h (module 'flow-monitor'): void ns3::FlowMonitorHelper::SerializeToXmlFile(std::string fileName, bool enableHistograms, bool enableProbes) [member function]
+    cls.add_method('SerializeToXmlFile', 
+                   'void', 
+                   [param('std::string', 'fileName'), param('bool', 'enableHistograms'), param('bool', 'enableProbes')])
     return
 
 def register_Ns3Hasher_methods(root_module, cls):
@@ -1234,55 +1230,6 @@
                    [param('uint16_t', 'port')])
     return
 
-def register_Ns3IntToType__0_methods(root_module, cls):
-    ## int-to-type.h (module 'core'): ns3::IntToType<0>::IntToType() [constructor]
-    cls.add_constructor([])
-    ## int-to-type.h (module 'core'): ns3::IntToType<0>::IntToType(ns3::IntToType<0> const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::IntToType< 0 > const &', 'arg0')])
-    return
-
-def register_Ns3IntToType__1_methods(root_module, cls):
-    ## int-to-type.h (module 'core'): ns3::IntToType<1>::IntToType() [constructor]
-    cls.add_constructor([])
-    ## int-to-type.h (module 'core'): ns3::IntToType<1>::IntToType(ns3::IntToType<1> const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::IntToType< 1 > const &', 'arg0')])
-    return
-
-def register_Ns3IntToType__2_methods(root_module, cls):
-    ## int-to-type.h (module 'core'): ns3::IntToType<2>::IntToType() [constructor]
-    cls.add_constructor([])
-    ## int-to-type.h (module 'core'): ns3::IntToType<2>::IntToType(ns3::IntToType<2> const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::IntToType< 2 > const &', 'arg0')])
-    return
-
-def register_Ns3IntToType__3_methods(root_module, cls):
-    ## int-to-type.h (module 'core'): ns3::IntToType<3>::IntToType() [constructor]
-    cls.add_constructor([])
-    ## int-to-type.h (module 'core'): ns3::IntToType<3>::IntToType(ns3::IntToType<3> const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::IntToType< 3 > const &', 'arg0')])
-    return
-
-def register_Ns3IntToType__4_methods(root_module, cls):
-    ## int-to-type.h (module 'core'): ns3::IntToType<4>::IntToType() [constructor]
-    cls.add_constructor([])
-    ## int-to-type.h (module 'core'): ns3::IntToType<4>::IntToType(ns3::IntToType<4> const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::IntToType< 4 > const &', 'arg0')])
-    return
-
-def register_Ns3IntToType__5_methods(root_module, cls):
-    ## int-to-type.h (module 'core'): ns3::IntToType<5>::IntToType() [constructor]
-    cls.add_constructor([])
-    ## int-to-type.h (module 'core'): ns3::IntToType<5>::IntToType(ns3::IntToType<5> const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::IntToType< 5 > const &', 'arg0')])
-    return
-
-def register_Ns3IntToType__6_methods(root_module, cls):
-    ## int-to-type.h (module 'core'): ns3::IntToType<6>::IntToType() [constructor]
-    cls.add_constructor([])
-    ## int-to-type.h (module 'core'): ns3::IntToType<6>::IntToType(ns3::IntToType<6> const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::IntToType< 6 > const &', 'arg0')])
-    return
-
 def register_Ns3Ipv4Address_methods(root_module, cls):
     cls.add_binary_comparison_operator('<')
     cls.add_binary_comparison_operator('!=')
@@ -1751,6 +1698,11 @@
                    'ns3::Ipv6InterfaceAddress::State_e', 
                    [], 
                    is_const=True)
+    ## ipv6-interface-address.h (module 'internet'): bool ns3::Ipv6InterfaceAddress::IsInSameSubnet(ns3::Ipv6Address b) const [member function]
+    cls.add_method('IsInSameSubnet', 
+                   'bool', 
+                   [param('ns3::Ipv6Address', 'b')], 
+                   is_const=True)
     ## ipv6-interface-address.h (module 'internet'): void ns3::Ipv6InterfaceAddress::SetAddress(ns3::Ipv6Address address) [member function]
     cls.add_method('SetAddress', 
                    'void', 
@@ -2378,88 +2330,12 @@
                    [param('uint8_t', 'v')])
     return
 
-def register_Ns3Timer_methods(root_module, cls):
-    ## timer.h (module 'core'): ns3::Timer::Timer(ns3::Timer const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::Timer const &', 'arg0')])
-    ## timer.h (module 'core'): ns3::Timer::Timer() [constructor]
-    cls.add_constructor([])
-    ## timer.h (module 'core'): ns3::Timer::Timer(ns3::Timer::DestroyPolicy destroyPolicy) [constructor]
-    cls.add_constructor([param('ns3::Timer::DestroyPolicy', 'destroyPolicy')])
-    ## timer.h (module 'core'): void ns3::Timer::Cancel() [member function]
-    cls.add_method('Cancel', 
-                   'void', 
-                   [])
-    ## timer.h (module 'core'): ns3::Time ns3::Timer::GetDelay() const [member function]
-    cls.add_method('GetDelay', 
-                   'ns3::Time', 
-                   [], 
-                   is_const=True)
-    ## timer.h (module 'core'): ns3::Time ns3::Timer::GetDelayLeft() const [member function]
-    cls.add_method('GetDelayLeft', 
-                   'ns3::Time', 
-                   [], 
-                   is_const=True)
-    ## timer.h (module 'core'): ns3::Timer::State ns3::Timer::GetState() const [member function]
-    cls.add_method('GetState', 
-                   'ns3::Timer::State', 
-                   [], 
-                   is_const=True)
-    ## timer.h (module 'core'): bool ns3::Timer::IsExpired() const [member function]
-    cls.add_method('IsExpired', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## timer.h (module 'core'): bool ns3::Timer::IsRunning() const [member function]
-    cls.add_method('IsRunning', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## timer.h (module 'core'): bool ns3::Timer::IsSuspended() const [member function]
-    cls.add_method('IsSuspended', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## timer.h (module 'core'): void ns3::Timer::Remove() [member function]
-    cls.add_method('Remove', 
-                   'void', 
-                   [])
-    ## timer.h (module 'core'): void ns3::Timer::Resume() [member function]
-    cls.add_method('Resume', 
-                   'void', 
-                   [])
-    ## timer.h (module 'core'): void ns3::Timer::Schedule() [member function]
-    cls.add_method('Schedule', 
-                   'void', 
-                   [])
-    ## timer.h (module 'core'): void ns3::Timer::Schedule(ns3::Time delay) [member function]
-    cls.add_method('Schedule', 
-                   'void', 
-                   [param('ns3::Time', 'delay')])
-    ## timer.h (module 'core'): void ns3::Timer::SetDelay(ns3::Time const & delay) [member function]
-    cls.add_method('SetDelay', 
-                   'void', 
-                   [param('ns3::Time const &', 'delay')])
-    ## timer.h (module 'core'): void ns3::Timer::Suspend() [member function]
-    cls.add_method('Suspend', 
-                   'void', 
-                   [])
-    return
-
-def register_Ns3TimerImpl_methods(root_module, cls):
-    ## timer-impl.h (module 'core'): ns3::TimerImpl::TimerImpl() [constructor]
-    cls.add_constructor([])
-    ## timer-impl.h (module 'core'): ns3::TimerImpl::TimerImpl(ns3::TimerImpl const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::TimerImpl const &', 'arg0')])
-    ## timer-impl.h (module 'core'): void ns3::TimerImpl::Invoke() [member function]
-    cls.add_method('Invoke', 
-                   'void', 
-                   [], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## timer-impl.h (module 'core'): ns3::EventId ns3::TimerImpl::Schedule(ns3::Time const & delay) [member function]
-    cls.add_method('Schedule', 
-                   'ns3::EventId', 
-                   [param('ns3::Time const &', 'delay')], 
-                   is_pure_virtual=True, is_virtual=True)
+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):
@@ -2659,62 +2535,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('==')
@@ -2723,6 +2555,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]
@@ -2763,6 +2597,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):
@@ -3926,13 +3762,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('==')
@@ -3959,6 +3797,11 @@
     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', 
@@ -4380,6 +4223,10 @@
     cls.add_constructor([param('ns3::FlowMonitor const &', 'arg0')])
     ## flow-monitor.h (module 'flow-monitor'): ns3::FlowMonitor::FlowMonitor() [constructor]
     cls.add_constructor([])
+    ## flow-monitor.h (module 'flow-monitor'): void ns3::FlowMonitor::AddFlowClassifier(ns3::Ptr<ns3::FlowClassifier> classifier) [member function]
+    cls.add_method('AddFlowClassifier', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::FlowClassifier >', 'classifier')])
     ## flow-monitor.h (module 'flow-monitor'): void ns3::FlowMonitor::AddProbe(ns3::Ptr<ns3::FlowProbe> probe) [member function]
     cls.add_method('AddProbe', 
                    'void', 
@@ -4440,10 +4287,6 @@
     cls.add_method('SerializeToXmlString', 
                    'std::string', 
                    [param('int', 'indent'), param('bool', 'enableHistograms'), param('bool', 'enableProbes')])
-    ## flow-monitor.h (module 'flow-monitor'): void ns3::FlowMonitor::SetFlowClassifier(ns3::Ptr<ns3::FlowClassifier> classifier) [member function]
-    cls.add_method('SetFlowClassifier', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::FlowClassifier >', 'classifier')])
     ## flow-monitor.h (module 'flow-monitor'): void ns3::FlowMonitor::Start(ns3::Time const & time) [member function]
     cls.add_method('Start', 
                    'void', 
@@ -4563,63 +4406,6 @@
     cls.add_instance_attribute('packetsDropped', 'std::vector< unsigned int >', is_const=False)
     return
 
-def register_Ns3IpL4Protocol_methods(root_module, cls):
-    ## ip-l4-protocol.h (module 'internet'): ns3::IpL4Protocol::IpL4Protocol() [constructor]
-    cls.add_constructor([])
-    ## ip-l4-protocol.h (module 'internet'): ns3::IpL4Protocol::IpL4Protocol(ns3::IpL4Protocol const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::IpL4Protocol const &', 'arg0')])
-    ## ip-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::IpL4Protocol::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 >', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## ip-l4-protocol.h (module 'internet'): 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> ns3::IpL4Protocol::GetDownTarget6() const [member function]
-    cls.add_method('GetDownTarget6', 
-                   '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 >', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## ip-l4-protocol.h (module 'internet'): int ns3::IpL4Protocol::GetProtocolNumber() const [member function]
-    cls.add_method('GetProtocolNumber', 
-                   'int', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## ip-l4-protocol.h (module 'internet'): static ns3::TypeId ns3::IpL4Protocol::GetTypeId() [member function]
-    cls.add_method('GetTypeId', 
-                   'ns3::TypeId', 
-                   [], 
-                   is_static=True)
-    ## ip-l4-protocol.h (module 'internet'): ns3::IpL4Protocol::RxStatus ns3::IpL4Protocol::Receive(ns3::Ptr<ns3::Packet> p, ns3::Ipv4Header const & header, 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')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## ip-l4-protocol.h (module 'internet'): ns3::IpL4Protocol::RxStatus ns3::IpL4Protocol::Receive(ns3::Ptr<ns3::Packet> p, ns3::Ipv6Header const & header, 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')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## ip-l4-protocol.h (module 'internet'): void ns3::IpL4Protocol::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', 
-                   'void', 
-                   [param('ns3::Ipv4Address', 'icmpSource'), param('uint8_t', 'icmpTtl'), param('uint8_t', 'icmpType'), param('uint8_t', 'icmpCode'), param('uint32_t', 'icmpInfo'), param('ns3::Ipv4Address', 'payloadSource'), param('ns3::Ipv4Address', 'payloadDestination'), param('uint8_t const *', 'payload')], 
-                   is_virtual=True)
-    ## ip-l4-protocol.h (module 'internet'): void ns3::IpL4Protocol::ReceiveIcmp(ns3::Ipv6Address icmpSource, uint8_t icmpTtl, uint8_t icmpType, uint8_t icmpCode, uint32_t icmpInfo, ns3::Ipv6Address payloadSource, ns3::Ipv6Address payloadDestination, uint8_t const * payload) [member function]
-    cls.add_method('ReceiveIcmp', 
-                   'void', 
-                   [param('ns3::Ipv6Address', 'icmpSource'), param('uint8_t', 'icmpTtl'), param('uint8_t', 'icmpType'), param('uint8_t', 'icmpCode'), param('uint32_t', 'icmpInfo'), param('ns3::Ipv6Address', 'payloadSource'), param('ns3::Ipv6Address', 'payloadDestination'), param('uint8_t const *', 'payload')], 
-                   is_virtual=True)
-    ## ip-l4-protocol.h (module 'internet'): void ns3::IpL4Protocol::SetDownTarget(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> cb) [member function]
-    cls.add_method('SetDownTarget', 
-                   'void', 
-                   [param('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 >', 'cb')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## ip-l4-protocol.h (module 'internet'): void ns3::IpL4Protocol::SetDownTarget6(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) [member function]
-    cls.add_method('SetDownTarget6', 
-                   '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_pure_virtual=True, is_virtual=True)
-    return
-
 def register_Ns3Ipv4_methods(root_module, cls):
     ## ipv4.h (module 'internet'): ns3::Ipv4::Ipv4(ns3::Ipv4 const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::Ipv4 const &', 'arg0')])
@@ -4990,6 +4776,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', 
@@ -5283,6 +5074,170 @@
                    is_pure_virtual=True, is_virtual=True)
     return
 
+def register_Ns3Ipv6_methods(root_module, cls):
+    ## ipv6.h (module 'internet'): ns3::Ipv6::Ipv6(ns3::Ipv6 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Ipv6 const &', 'arg0')])
+    ## ipv6.h (module 'internet'): ns3::Ipv6::Ipv6() [constructor]
+    cls.add_constructor([])
+    ## ipv6.h (module 'internet'): bool ns3::Ipv6::AddAddress(uint32_t interface, ns3::Ipv6InterfaceAddress address) [member function]
+    cls.add_method('AddAddress', 
+                   'bool', 
+                   [param('uint32_t', 'interface'), param('ns3::Ipv6InterfaceAddress', 'address')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## ipv6.h (module 'internet'): uint32_t ns3::Ipv6::AddInterface(ns3::Ptr<ns3::NetDevice> device) [member function]
+    cls.add_method('AddInterface', 
+                   'uint32_t', 
+                   [param('ns3::Ptr< ns3::NetDevice >', 'device')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## ipv6.h (module 'internet'): ns3::Ipv6InterfaceAddress ns3::Ipv6::GetAddress(uint32_t interface, uint32_t addressIndex) const [member function]
+    cls.add_method('GetAddress', 
+                   'ns3::Ipv6InterfaceAddress', 
+                   [param('uint32_t', 'interface'), param('uint32_t', 'addressIndex')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## ipv6.h (module 'internet'): int32_t ns3::Ipv6::GetInterfaceForAddress(ns3::Ipv6Address address) const [member function]
+    cls.add_method('GetInterfaceForAddress', 
+                   'int32_t', 
+                   [param('ns3::Ipv6Address', 'address')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## ipv6.h (module 'internet'): int32_t ns3::Ipv6::GetInterfaceForDevice(ns3::Ptr<const ns3::NetDevice> device) const [member function]
+    cls.add_method('GetInterfaceForDevice', 
+                   'int32_t', 
+                   [param('ns3::Ptr< ns3::NetDevice const >', 'device')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## ipv6.h (module 'internet'): int32_t ns3::Ipv6::GetInterfaceForPrefix(ns3::Ipv6Address address, ns3::Ipv6Prefix mask) const [member function]
+    cls.add_method('GetInterfaceForPrefix', 
+                   'int32_t', 
+                   [param('ns3::Ipv6Address', 'address'), param('ns3::Ipv6Prefix', 'mask')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## ipv6.h (module 'internet'): uint16_t ns3::Ipv6::GetMetric(uint32_t interface) const [member function]
+    cls.add_method('GetMetric', 
+                   'uint16_t', 
+                   [param('uint32_t', 'interface')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## ipv6.h (module 'internet'): uint16_t ns3::Ipv6::GetMtu(uint32_t interface) const [member function]
+    cls.add_method('GetMtu', 
+                   'uint16_t', 
+                   [param('uint32_t', 'interface')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## ipv6.h (module 'internet'): uint32_t ns3::Ipv6::GetNAddresses(uint32_t interface) const [member function]
+    cls.add_method('GetNAddresses', 
+                   'uint32_t', 
+                   [param('uint32_t', 'interface')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## ipv6.h (module 'internet'): uint32_t ns3::Ipv6::GetNInterfaces() const [member function]
+    cls.add_method('GetNInterfaces', 
+                   'uint32_t', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## ipv6.h (module 'internet'): ns3::Ptr<ns3::NetDevice> ns3::Ipv6::GetNetDevice(uint32_t interface) [member function]
+    cls.add_method('GetNetDevice', 
+                   'ns3::Ptr< ns3::NetDevice >', 
+                   [param('uint32_t', 'interface')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## ipv6.h (module 'internet'): ns3::Ptr<ns3::IpL4Protocol> ns3::Ipv6::GetProtocol(int protocolNumber) const [member function]
+    cls.add_method('GetProtocol', 
+                   'ns3::Ptr< ns3::IpL4Protocol >', 
+                   [param('int', 'protocolNumber')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## ipv6.h (module 'internet'): ns3::Ptr<ns3::Ipv6RoutingProtocol> ns3::Ipv6::GetRoutingProtocol() const [member function]
+    cls.add_method('GetRoutingProtocol', 
+                   'ns3::Ptr< ns3::Ipv6RoutingProtocol >', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## ipv6.h (module 'internet'): static ns3::TypeId ns3::Ipv6::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## ipv6.h (module 'internet'): bool ns3::Ipv6::IsForwarding(uint32_t interface) const [member function]
+    cls.add_method('IsForwarding', 
+                   'bool', 
+                   [param('uint32_t', 'interface')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## ipv6.h (module 'internet'): bool ns3::Ipv6::IsUp(uint32_t interface) const [member function]
+    cls.add_method('IsUp', 
+                   'bool', 
+                   [param('uint32_t', 'interface')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## ipv6.h (module 'internet'): void ns3::Ipv6::RegisterExtensions() [member function]
+    cls.add_method('RegisterExtensions', 
+                   'void', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## ipv6.h (module 'internet'): void ns3::Ipv6::RegisterOptions() [member function]
+    cls.add_method('RegisterOptions', 
+                   'void', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## ipv6.h (module 'internet'): bool ns3::Ipv6::RemoveAddress(uint32_t interface, uint32_t addressIndex) [member function]
+    cls.add_method('RemoveAddress', 
+                   'bool', 
+                   [param('uint32_t', 'interface'), param('uint32_t', 'addressIndex')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## ipv6.h (module 'internet'): bool ns3::Ipv6::RemoveAddress(uint32_t interface, ns3::Ipv6Address address) [member function]
+    cls.add_method('RemoveAddress', 
+                   'bool', 
+                   [param('uint32_t', 'interface'), param('ns3::Ipv6Address', 'address')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## ipv6.h (module 'internet'): void ns3::Ipv6::SetDown(uint32_t interface) [member function]
+    cls.add_method('SetDown', 
+                   'void', 
+                   [param('uint32_t', 'interface')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## ipv6.h (module 'internet'): void ns3::Ipv6::SetForwarding(uint32_t interface, bool val) [member function]
+    cls.add_method('SetForwarding', 
+                   'void', 
+                   [param('uint32_t', 'interface'), param('bool', 'val')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## ipv6.h (module 'internet'): void ns3::Ipv6::SetMetric(uint32_t interface, uint16_t metric) [member function]
+    cls.add_method('SetMetric', 
+                   'void', 
+                   [param('uint32_t', 'interface'), param('uint16_t', 'metric')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## ipv6.h (module 'internet'): void ns3::Ipv6::SetPmtu(ns3::Ipv6Address dst, uint32_t pmtu) [member function]
+    cls.add_method('SetPmtu', 
+                   'void', 
+                   [param('ns3::Ipv6Address', 'dst'), param('uint32_t', 'pmtu')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## ipv6.h (module 'internet'): void ns3::Ipv6::SetRoutingProtocol(ns3::Ptr<ns3::Ipv6RoutingProtocol> routingProtocol) [member function]
+    cls.add_method('SetRoutingProtocol', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Ipv6RoutingProtocol >', 'routingProtocol')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## ipv6.h (module 'internet'): void ns3::Ipv6::SetUp(uint32_t interface) [member function]
+    cls.add_method('SetUp', 
+                   'void', 
+                   [param('uint32_t', 'interface')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## ipv6.h (module 'internet'): ns3::Ipv6Address ns3::Ipv6::SourceAddressSelection(uint32_t interface, ns3::Ipv6Address dest) [member function]
+    cls.add_method('SourceAddressSelection', 
+                   'ns3::Ipv6Address', 
+                   [param('uint32_t', 'interface'), param('ns3::Ipv6Address', 'dest')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## ipv6.h (module 'internet'): ns3::Ipv6::IF_ANY [variable]
+    cls.add_static_attribute('IF_ANY', 'uint32_t const', is_const=True)
+    ## ipv6.h (module 'internet'): bool ns3::Ipv6::GetIpForward() const [member function]
+    cls.add_method('GetIpForward', 
+                   'bool', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, visibility='private', is_virtual=True)
+    ## ipv6.h (module 'internet'): bool ns3::Ipv6::GetMtuDiscover() const [member function]
+    cls.add_method('GetMtuDiscover', 
+                   'bool', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, visibility='private', is_virtual=True)
+    ## ipv6.h (module 'internet'): void ns3::Ipv6::SetIpForward(bool forward) [member function]
+    cls.add_method('SetIpForward', 
+                   'void', 
+                   [param('bool', 'forward')], 
+                   is_pure_virtual=True, visibility='private', is_virtual=True)
+    ## ipv6.h (module 'internet'): void ns3::Ipv6::SetMtuDiscover(bool mtuDiscover) [member function]
+    cls.add_method('SetMtuDiscover', 
+                   'void', 
+                   [param('bool', 'mtuDiscover')], 
+                   is_pure_virtual=True, visibility='private', is_virtual=True)
+    return
+
 def register_Ns3Ipv6AddressChecker_methods(root_module, cls):
     ## ipv6-address.h (module 'network'): ns3::Ipv6AddressChecker::Ipv6AddressChecker() [constructor]
     cls.add_constructor([])
@@ -5323,149 +5278,327 @@
                    [param('ns3::Ipv6Address const &', 'value')])
     return
 
-def register_Ns3Ipv6Interface_methods(root_module, cls):
-    ## ipv6-interface.h (module 'internet'): ns3::Ipv6Interface::Ipv6Interface(ns3::Ipv6Interface const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::Ipv6Interface const &', 'arg0')])
-    ## ipv6-interface.h (module 'internet'): ns3::Ipv6Interface::Ipv6Interface() [constructor]
+def register_Ns3Ipv6FlowClassifier_methods(root_module, cls):
+    ## ipv6-flow-classifier.h (module 'flow-monitor'): ns3::Ipv6FlowClassifier::Ipv6FlowClassifier() [constructor]
     cls.add_constructor([])
-    ## ipv6-interface.h (module 'internet'): bool ns3::Ipv6Interface::AddAddress(ns3::Ipv6InterfaceAddress iface) [member function]
-    cls.add_method('AddAddress', 
+    ## ipv6-flow-classifier.h (module 'flow-monitor'): bool ns3::Ipv6FlowClassifier::Classify(ns3::Ipv6Header const & ipHeader, ns3::Ptr<const ns3::Packet> ipPayload, uint32_t * out_flowId, uint32_t * out_packetId) [member function]
+    cls.add_method('Classify', 
                    'bool', 
-                   [param('ns3::Ipv6InterfaceAddress', 'iface')])
-    ## ipv6-interface.h (module 'internet'): ns3::Ipv6InterfaceAddress ns3::Ipv6Interface::GetAddress(uint32_t index) const [member function]
-    cls.add_method('GetAddress', 
-                   'ns3::Ipv6InterfaceAddress', 
-                   [param('uint32_t', 'index')], 
-                   is_const=True)
-    ## ipv6-interface.h (module 'internet'): ns3::Ipv6InterfaceAddress ns3::Ipv6Interface::GetAddressMatchingDestination(ns3::Ipv6Address dst) [member function]
-    cls.add_method('GetAddressMatchingDestination', 
-                   'ns3::Ipv6InterfaceAddress', 
-                   [param('ns3::Ipv6Address', 'dst')])
-    ## ipv6-interface.h (module 'internet'): uint16_t ns3::Ipv6Interface::GetBaseReachableTime() const [member function]
-    cls.add_method('GetBaseReachableTime', 
-                   'uint16_t', 
-                   [], 
+                   [param('ns3::Ipv6Header const &', 'ipHeader'), param('ns3::Ptr< ns3::Packet const >', 'ipPayload'), param('uint32_t *', 'out_flowId'), param('uint32_t *', 'out_packetId')])
+    ## ipv6-flow-classifier.h (module 'flow-monitor'): ns3::Ipv6FlowClassifier::FiveTuple ns3::Ipv6FlowClassifier::FindFlow(ns3::FlowId flowId) const [member function]
+    cls.add_method('FindFlow', 
+                   'ns3::Ipv6FlowClassifier::FiveTuple', 
+                   [param('ns3::FlowId', 'flowId')], 
                    is_const=True)
-    ## ipv6-interface.h (module 'internet'): uint8_t ns3::Ipv6Interface::GetCurHopLimit() const [member function]
-    cls.add_method('GetCurHopLimit', 
-                   'uint8_t', 
+    ## ipv6-flow-classifier.h (module 'flow-monitor'): void ns3::Ipv6FlowClassifier::SerializeToXmlStream(std::ostream & os, int indent) const [member function]
+    cls.add_method('SerializeToXmlStream', 
+                   'void', 
+                   [param('std::ostream &', 'os'), param('int', 'indent')], 
+                   is_const=True, is_virtual=True)
+    return
+
+def register_Ns3Ipv6FlowClassifierFiveTuple_methods(root_module, cls):
+    cls.add_binary_comparison_operator('<')
+    cls.add_binary_comparison_operator('==')
+    ## ipv6-flow-classifier.h (module 'flow-monitor'): ns3::Ipv6FlowClassifier::FiveTuple::FiveTuple() [constructor]
+    cls.add_constructor([])
+    ## ipv6-flow-classifier.h (module 'flow-monitor'): ns3::Ipv6FlowClassifier::FiveTuple::FiveTuple(ns3::Ipv6FlowClassifier::FiveTuple const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Ipv6FlowClassifier::FiveTuple const &', 'arg0')])
+    ## ipv6-flow-classifier.h (module 'flow-monitor'): ns3::Ipv6FlowClassifier::FiveTuple::destinationAddress [variable]
+    cls.add_instance_attribute('destinationAddress', 'ns3::Ipv6Address', is_const=False)
+    ## ipv6-flow-classifier.h (module 'flow-monitor'): ns3::Ipv6FlowClassifier::FiveTuple::destinationPort [variable]
+    cls.add_instance_attribute('destinationPort', 'uint16_t', is_const=False)
+    ## ipv6-flow-classifier.h (module 'flow-monitor'): ns3::Ipv6FlowClassifier::FiveTuple::protocol [variable]
+    cls.add_instance_attribute('protocol', 'uint8_t', is_const=False)
+    ## ipv6-flow-classifier.h (module 'flow-monitor'): ns3::Ipv6FlowClassifier::FiveTuple::sourceAddress [variable]
+    cls.add_instance_attribute('sourceAddress', 'ns3::Ipv6Address', is_const=False)
+    ## ipv6-flow-classifier.h (module 'flow-monitor'): ns3::Ipv6FlowClassifier::FiveTuple::sourcePort [variable]
+    cls.add_instance_attribute('sourcePort', 'uint16_t', is_const=False)
+    return
+
+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'): void ns3::Ipv6FlowProbe::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
                    [], 
-                   is_const=True)
-    ## ipv6-interface.h (module 'internet'): ns3::Ptr<ns3::NetDevice> ns3::Ipv6Interface::GetDevice() const [member function]
-    cls.add_method('GetDevice', 
-                   'ns3::Ptr< ns3::NetDevice >', 
+                   visibility='protected', is_virtual=True)
+    return
+
+def register_Ns3Ipv6L3Protocol_methods(root_module, cls):
+    ## ipv6-l3-protocol.h (module 'internet'): ns3::Ipv6L3Protocol::PROT_NUMBER [variable]
+    cls.add_static_attribute('PROT_NUMBER', 'uint16_t const', is_const=True)
+    ## ipv6-l3-protocol.h (module 'internet'): static ns3::TypeId ns3::Ipv6L3Protocol::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
                    [], 
+                   is_static=True)
+    ## ipv6-l3-protocol.h (module 'internet'): ns3::Ipv6L3Protocol::Ipv6L3Protocol() [constructor]
+    cls.add_constructor([])
+    ## ipv6-l3-protocol.h (module 'internet'): void ns3::Ipv6L3Protocol::SetNode(ns3::Ptr<ns3::Node> node) [member function]
+    cls.add_method('SetNode', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Node >', 'node')])
+    ## ipv6-l3-protocol.h (module 'internet'): void ns3::Ipv6L3Protocol::Insert(ns3::Ptr<ns3::IpL4Protocol> protocol) [member function]
+    cls.add_method('Insert', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol')])
+    ## ipv6-l3-protocol.h (module 'internet'): void ns3::Ipv6L3Protocol::Remove(ns3::Ptr<ns3::IpL4Protocol> protocol) [member function]
+    cls.add_method('Remove', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol')])
+    ## ipv6-l3-protocol.h (module 'internet'): ns3::Ptr<ns3::IpL4Protocol> ns3::Ipv6L3Protocol::GetProtocol(int protocolNumber) const [member function]
+    cls.add_method('GetProtocol', 
+                   'ns3::Ptr< ns3::IpL4Protocol >', 
+                   [param('int', 'protocolNumber')], 
                    is_const=True, is_virtual=True)
-    ## ipv6-interface.h (module 'internet'): ns3::Ipv6InterfaceAddress ns3::Ipv6Interface::GetLinkLocalAddress() const [member function]
-    cls.add_method('GetLinkLocalAddress', 
-                   'ns3::Ipv6InterfaceAddress', 
+    ## ipv6-l3-protocol.h (module 'internet'): ns3::Ptr<ns3::Socket> ns3::Ipv6L3Protocol::CreateRawSocket() [member function]
+    cls.add_method('CreateRawSocket', 
+                   'ns3::Ptr< ns3::Socket >', 
+                   [])
+    ## ipv6-l3-protocol.h (module 'internet'): void ns3::Ipv6L3Protocol::DeleteRawSocket(ns3::Ptr<ns3::Socket> socket) [member function]
+    cls.add_method('DeleteRawSocket', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Socket >', 'socket')])
+    ## ipv6-l3-protocol.h (module 'internet'): void ns3::Ipv6L3Protocol::SetDefaultTtl(uint8_t ttl) [member function]
+    cls.add_method('SetDefaultTtl', 
+                   'void', 
+                   [param('uint8_t', 'ttl')])
+    ## ipv6-l3-protocol.h (module 'internet'): void ns3::Ipv6L3Protocol::SetDefaultTclass(uint8_t tclass) [member function]
+    cls.add_method('SetDefaultTclass', 
+                   'void', 
+                   [param('uint8_t', 'tclass')])
+    ## ipv6-l3-protocol.h (module 'internet'): void ns3::Ipv6L3Protocol::Receive(ns3::Ptr<ns3::NetDevice> device, ns3::Ptr<const ns3::Packet> p, uint16_t protocol, ns3::Address const & from, ns3::Address const & to, ns3::NetDevice::PacketType packetType) [member function]
+    cls.add_method('Receive', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::NetDevice >', 'device'), param('ns3::Ptr< ns3::Packet const >', 'p'), param('uint16_t', 'protocol'), param('ns3::Address const &', 'from'), param('ns3::Address const &', 'to'), param('ns3::NetDevice::PacketType', 'packetType')])
+    ## ipv6-l3-protocol.h (module 'internet'): void ns3::Ipv6L3Protocol::Send(ns3::Ptr<ns3::Packet> packet, ns3::Ipv6Address source, ns3::Ipv6Address destination, uint8_t protocol, ns3::Ptr<ns3::Ipv6Route> route) [member function]
+    cls.add_method('Send', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('ns3::Ipv6Address', 'source'), param('ns3::Ipv6Address', 'destination'), param('uint8_t', 'protocol'), param('ns3::Ptr< ns3::Ipv6Route >', 'route')])
+    ## ipv6-l3-protocol.h (module 'internet'): void ns3::Ipv6L3Protocol::SetRoutingProtocol(ns3::Ptr<ns3::Ipv6RoutingProtocol> routingProtocol) [member function]
+    cls.add_method('SetRoutingProtocol', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Ipv6RoutingProtocol >', 'routingProtocol')], 
+                   is_virtual=True)
+    ## ipv6-l3-protocol.h (module 'internet'): ns3::Ptr<ns3::Ipv6RoutingProtocol> ns3::Ipv6L3Protocol::GetRoutingProtocol() const [member function]
+    cls.add_method('GetRoutingProtocol', 
+                   'ns3::Ptr< ns3::Ipv6RoutingProtocol >', 
                    [], 
+                   is_const=True, is_virtual=True)
+    ## ipv6-l3-protocol.h (module 'internet'): uint32_t ns3::Ipv6L3Protocol::AddInterface(ns3::Ptr<ns3::NetDevice> device) [member function]
+    cls.add_method('AddInterface', 
+                   'uint32_t', 
+                   [param('ns3::Ptr< ns3::NetDevice >', 'device')], 
+                   is_virtual=True)
+    ## ipv6-l3-protocol.h (module 'internet'): ns3::Ptr<ns3::Ipv6Interface> ns3::Ipv6L3Protocol::GetInterface(uint32_t i) const [member function]
+    cls.add_method('GetInterface', 
+                   'ns3::Ptr< ns3::Ipv6Interface >', 
+                   [param('uint32_t', 'i')], 
                    is_const=True)
-    ## ipv6-interface.h (module 'internet'): uint16_t ns3::Ipv6Interface::GetMetric() const [member function]
-    cls.add_method('GetMetric', 
-                   'uint16_t', 
+    ## ipv6-l3-protocol.h (module 'internet'): uint32_t ns3::Ipv6L3Protocol::GetNInterfaces() const [member function]
+    cls.add_method('GetNInterfaces', 
+                   'uint32_t', 
                    [], 
-                   is_const=True)
-    ## ipv6-interface.h (module 'internet'): uint32_t ns3::Ipv6Interface::GetNAddresses() const [member function]
+                   is_const=True, is_virtual=True)
+    ## ipv6-l3-protocol.h (module 'internet'): int32_t ns3::Ipv6L3Protocol::GetInterfaceForAddress(ns3::Ipv6Address addr) const [member function]
+    cls.add_method('GetInterfaceForAddress', 
+                   'int32_t', 
+                   [param('ns3::Ipv6Address', 'addr')], 
+                   is_const=True, is_virtual=True)
+    ## ipv6-l3-protocol.h (module 'internet'): int32_t ns3::Ipv6L3Protocol::GetInterfaceForPrefix(ns3::Ipv6Address addr, ns3::Ipv6Prefix mask) const [member function]
+    cls.add_method('GetInterfaceForPrefix', 
+                   'int32_t', 
+                   [param('ns3::Ipv6Address', 'addr'), param('ns3::Ipv6Prefix', 'mask')], 
+                   is_const=True, is_virtual=True)
+    ## ipv6-l3-protocol.h (module 'internet'): int32_t ns3::Ipv6L3Protocol::GetInterfaceForDevice(ns3::Ptr<const ns3::NetDevice> device) const [member function]
+    cls.add_method('GetInterfaceForDevice', 
+                   'int32_t', 
+                   [param('ns3::Ptr< ns3::NetDevice const >', 'device')], 
+                   is_const=True, is_virtual=True)
+    ## ipv6-l3-protocol.h (module 'internet'): bool ns3::Ipv6L3Protocol::AddAddress(uint32_t i, ns3::Ipv6InterfaceAddress address) [member function]
+    cls.add_method('AddAddress', 
+                   'bool', 
+                   [param('uint32_t', 'i'), param('ns3::Ipv6InterfaceAddress', 'address')], 
+                   is_virtual=True)
+    ## ipv6-l3-protocol.h (module 'internet'): ns3::Ipv6InterfaceAddress ns3::Ipv6L3Protocol::GetAddress(uint32_t interfaceIndex, uint32_t addressIndex) const [member function]
+    cls.add_method('GetAddress', 
+                   'ns3::Ipv6InterfaceAddress', 
+                   [param('uint32_t', 'interfaceIndex'), param('uint32_t', 'addressIndex')], 
+                   is_const=True, is_virtual=True)
+    ## ipv6-l3-protocol.h (module 'internet'): uint32_t ns3::Ipv6L3Protocol::GetNAddresses(uint32_t interface) const [member function]
     cls.add_method('GetNAddresses', 
                    'uint32_t', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface.h (module 'internet'): uint16_t ns3::Ipv6Interface::GetReachableTime() const [member function]
-    cls.add_method('GetReachableTime', 
+                   [param('uint32_t', 'interface')], 
+                   is_const=True, is_virtual=True)
+    ## ipv6-l3-protocol.h (module 'internet'): bool ns3::Ipv6L3Protocol::RemoveAddress(uint32_t interfaceIndex, uint32_t addressIndex) [member function]
+    cls.add_method('RemoveAddress', 
+                   'bool', 
+                   [param('uint32_t', 'interfaceIndex'), param('uint32_t', 'addressIndex')], 
+                   is_virtual=True)
+    ## ipv6-l3-protocol.h (module 'internet'): bool ns3::Ipv6L3Protocol::RemoveAddress(uint32_t interfaceIndex, ns3::Ipv6Address address) [member function]
+    cls.add_method('RemoveAddress', 
+                   'bool', 
+                   [param('uint32_t', 'interfaceIndex'), param('ns3::Ipv6Address', 'address')], 
+                   is_virtual=True)
+    ## ipv6-l3-protocol.h (module 'internet'): void ns3::Ipv6L3Protocol::SetMetric(uint32_t i, uint16_t metric) [member function]
+    cls.add_method('SetMetric', 
+                   'void', 
+                   [param('uint32_t', 'i'), param('uint16_t', 'metric')], 
+                   is_virtual=True)
+    ## ipv6-l3-protocol.h (module 'internet'): uint16_t ns3::Ipv6L3Protocol::GetMetric(uint32_t i) const [member function]
+    cls.add_method('GetMetric', 
                    'uint16_t', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface.h (module 'internet'): uint16_t ns3::Ipv6Interface::GetRetransTimer() const [member function]
-    cls.add_method('GetRetransTimer', 
+                   [param('uint32_t', 'i')], 
+                   is_const=True, is_virtual=True)
+    ## ipv6-l3-protocol.h (module 'internet'): uint16_t ns3::Ipv6L3Protocol::GetMtu(uint32_t i) const [member function]
+    cls.add_method('GetMtu', 
                    'uint16_t', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface.h (module 'internet'): static ns3::TypeId ns3::Ipv6Interface::GetTypeId() [member function]
-    cls.add_method('GetTypeId', 
-                   'ns3::TypeId', 
-                   [], 
-                   is_static=True)
-    ## ipv6-interface.h (module 'internet'): bool ns3::Ipv6Interface::IsDown() const [member function]
-    cls.add_method('IsDown', 
+                   [param('uint32_t', 'i')], 
+                   is_const=True, is_virtual=True)
+    ## ipv6-l3-protocol.h (module 'internet'): void ns3::Ipv6L3Protocol::SetPmtu(ns3::Ipv6Address dst, uint32_t pmtu) [member function]
+    cls.add_method('SetPmtu', 
+                   'void', 
+                   [param('ns3::Ipv6Address', 'dst'), param('uint32_t', 'pmtu')], 
+                   is_virtual=True)
+    ## ipv6-l3-protocol.h (module 'internet'): bool ns3::Ipv6L3Protocol::IsUp(uint32_t i) const [member function]
+    cls.add_method('IsUp', 
                    'bool', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface.h (module 'internet'): bool ns3::Ipv6Interface::IsForwarding() const [member function]
+                   [param('uint32_t', 'i')], 
+                   is_const=True, is_virtual=True)
+    ## ipv6-l3-protocol.h (module 'internet'): void ns3::Ipv6L3Protocol::SetUp(uint32_t i) [member function]
+    cls.add_method('SetUp', 
+                   'void', 
+                   [param('uint32_t', 'i')], 
+                   is_virtual=True)
+    ## ipv6-l3-protocol.h (module 'internet'): void ns3::Ipv6L3Protocol::SetDown(uint32_t i) [member function]
+    cls.add_method('SetDown', 
+                   'void', 
+                   [param('uint32_t', 'i')], 
+                   is_virtual=True)
+    ## ipv6-l3-protocol.h (module 'internet'): bool ns3::Ipv6L3Protocol::IsForwarding(uint32_t i) const [member function]
     cls.add_method('IsForwarding', 
                    'bool', 
+                   [param('uint32_t', 'i')], 
+                   is_const=True, is_virtual=True)
+    ## ipv6-l3-protocol.h (module 'internet'): void ns3::Ipv6L3Protocol::SetForwarding(uint32_t i, bool val) [member function]
+    cls.add_method('SetForwarding', 
+                   'void', 
+                   [param('uint32_t', 'i'), param('bool', 'val')], 
+                   is_virtual=True)
+    ## ipv6-l3-protocol.h (module 'internet'): ns3::Ipv6Address ns3::Ipv6L3Protocol::SourceAddressSelection(uint32_t interface, ns3::Ipv6Address dest) [member function]
+    cls.add_method('SourceAddressSelection', 
+                   'ns3::Ipv6Address', 
+                   [param('uint32_t', 'interface'), param('ns3::Ipv6Address', 'dest')], 
+                   is_virtual=True)
+    ## ipv6-l3-protocol.h (module 'internet'): ns3::Ptr<ns3::NetDevice> ns3::Ipv6L3Protocol::GetNetDevice(uint32_t i) [member function]
+    cls.add_method('GetNetDevice', 
+                   'ns3::Ptr< ns3::NetDevice >', 
+                   [param('uint32_t', 'i')], 
+                   is_virtual=True)
+    ## ipv6-l3-protocol.h (module 'internet'): ns3::Ptr<ns3::Icmpv6L4Protocol> ns3::Ipv6L3Protocol::GetIcmpv6() const [member function]
+    cls.add_method('GetIcmpv6', 
+                   'ns3::Ptr< ns3::Icmpv6L4Protocol >', 
                    [], 
                    is_const=True)
-    ## ipv6-interface.h (module 'internet'): bool ns3::Ipv6Interface::IsUp() const [member function]
-    cls.add_method('IsUp', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface.h (module 'internet'): ns3::Ipv6InterfaceAddress ns3::Ipv6Interface::RemoveAddress(uint32_t index) [member function]
-    cls.add_method('RemoveAddress', 
-                   'ns3::Ipv6InterfaceAddress', 
-                   [param('uint32_t', 'index')])
-    ## ipv6-interface.h (module 'internet'): ns3::Ipv6InterfaceAddress ns3::Ipv6Interface::RemoveAddress(ns3::Ipv6Address address) [member function]
-    cls.add_method('RemoveAddress', 
-                   'ns3::Ipv6InterfaceAddress', 
-                   [param('ns3::Ipv6Address', 'address')])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::Send(ns3::Ptr<ns3::Packet> p, ns3::Ipv6Address dest) [member function]
-    cls.add_method('Send', 
+    ## ipv6-l3-protocol.h (module 'internet'): void ns3::Ipv6L3Protocol::AddAutoconfiguredAddress(uint32_t interface, ns3::Ipv6Address network, ns3::Ipv6Prefix mask, uint8_t flags, uint32_t validTime, uint32_t preferredTime, ns3::Ipv6Address defaultRouter=ns3::Ipv6Address::GetZero( )) [member function]
+    cls.add_method('AddAutoconfiguredAddress', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet >', 'p'), param('ns3::Ipv6Address', 'dest')])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetBaseReachableTime(uint16_t baseReachableTime) [member function]
-    cls.add_method('SetBaseReachableTime', 
-                   'void', 
-                   [param('uint16_t', 'baseReachableTime')])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetCurHopLimit(uint8_t curHopLimit) [member function]
-    cls.add_method('SetCurHopLimit', 
-                   'void', 
-                   [param('uint8_t', 'curHopLimit')])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetDevice(ns3::Ptr<ns3::NetDevice> device) [member function]
-    cls.add_method('SetDevice', 
+                   [param('uint32_t', 'interface'), param('ns3::Ipv6Address', 'network'), param('ns3::Ipv6Prefix', 'mask'), param('uint8_t', 'flags'), param('uint32_t', 'validTime'), param('uint32_t', 'preferredTime'), param('ns3::Ipv6Address', 'defaultRouter', default_value='ns3::Ipv6Address::GetZero( )')])
+    ## ipv6-l3-protocol.h (module 'internet'): void ns3::Ipv6L3Protocol::RemoveAutoconfiguredAddress(uint32_t interface, ns3::Ipv6Address network, ns3::Ipv6Prefix mask, ns3::Ipv6Address defaultRouter) [member function]
+    cls.add_method('RemoveAutoconfiguredAddress', 
                    'void', 
-                   [param('ns3::Ptr< ns3::NetDevice >', 'device')])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetDown() [member function]
-    cls.add_method('SetDown', 
+                   [param('uint32_t', 'interface'), param('ns3::Ipv6Address', 'network'), param('ns3::Ipv6Prefix', 'mask'), param('ns3::Ipv6Address', 'defaultRouter')])
+    ## ipv6-l3-protocol.h (module 'internet'): void ns3::Ipv6L3Protocol::RegisterExtensions() [member function]
+    cls.add_method('RegisterExtensions', 
                    'void', 
-                   [])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetForwarding(bool forward) [member function]
-    cls.add_method('SetForwarding', 
+                   [], 
+                   is_virtual=True)
+    ## ipv6-l3-protocol.h (module 'internet'): void ns3::Ipv6L3Protocol::RegisterOptions() [member function]
+    cls.add_method('RegisterOptions', 
                    'void', 
-                   [param('bool', 'forward')])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetMetric(uint16_t metric) [member function]
-    cls.add_method('SetMetric', 
+                   [], 
+                   is_virtual=True)
+    ## ipv6-l3-protocol.h (module 'internet'): void ns3::Ipv6L3Protocol::ReportDrop(ns3::Ipv6Header ipHeader, ns3::Ptr<ns3::Packet> p, ns3::Ipv6L3Protocol::DropReason dropReason) [member function]
+    cls.add_method('ReportDrop', 
                    'void', 
-                   [param('uint16_t', 'metric')])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetNode(ns3::Ptr<ns3::Node> node) [member function]
-    cls.add_method('SetNode', 
+                   [param('ns3::Ipv6Header', 'ipHeader'), param('ns3::Ptr< ns3::Packet >', 'p'), param('ns3::Ipv6L3Protocol::DropReason', 'dropReason')], 
+                   is_virtual=True)
+    ## ipv6-l3-protocol.h (module 'internet'): void ns3::Ipv6L3Protocol::DoDispose() [member function]
+    cls.add_method('DoDispose', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Node >', 'node')])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetNsDadUid(ns3::Ipv6Address address, uint32_t uid) [member function]
-    cls.add_method('SetNsDadUid', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    ## ipv6-l3-protocol.h (module 'internet'): void ns3::Ipv6L3Protocol::NotifyNewAggregate() [member function]
+    cls.add_method('NotifyNewAggregate', 
                    'void', 
-                   [param('ns3::Ipv6Address', 'address'), param('uint32_t', 'uid')])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetReachableTime(uint16_t reachableTime) [member function]
-    cls.add_method('SetReachableTime', 
-                   'void', 
-                   [param('uint16_t', 'reachableTime')])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetRetransTimer(uint16_t retransTimer) [member function]
-    cls.add_method('SetRetransTimer', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    ## ipv6-l3-protocol.h (module 'internet'): void ns3::Ipv6L3Protocol::SetIpForward(bool forward) [member function]
+    cls.add_method('SetIpForward', 
                    'void', 
-                   [param('uint16_t', 'retransTimer')])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetState(ns3::Ipv6Address address, ns3::Ipv6InterfaceAddress::State_e state) [member function]
-    cls.add_method('SetState', 
+                   [param('bool', 'forward')], 
+                   visibility='private', is_virtual=True)
+    ## ipv6-l3-protocol.h (module 'internet'): bool ns3::Ipv6L3Protocol::GetIpForward() const [member function]
+    cls.add_method('GetIpForward', 
+                   'bool', 
+                   [], 
+                   is_const=True, visibility='private', is_virtual=True)
+    ## ipv6-l3-protocol.h (module 'internet'): void ns3::Ipv6L3Protocol::SetMtuDiscover(bool mtuDiscover) [member function]
+    cls.add_method('SetMtuDiscover', 
                    'void', 
-                   [param('ns3::Ipv6Address', 'address'), param('ns3::Ipv6InterfaceAddress::State_e', 'state')])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetUp() [member function]
-    cls.add_method('SetUp', 
+                   [param('bool', 'mtuDiscover')], 
+                   visibility='private', is_virtual=True)
+    ## ipv6-l3-protocol.h (module 'internet'): bool ns3::Ipv6L3Protocol::GetMtuDiscover() const [member function]
+    cls.add_method('GetMtuDiscover', 
+                   'bool', 
+                   [], 
+                   is_const=True, visibility='private', is_virtual=True)
+    ## ipv6-l3-protocol.h (module 'internet'): void ns3::Ipv6L3Protocol::SetSendIcmpv6Redirect(bool sendIcmpv6Redirect) [member function]
+    cls.add_method('SetSendIcmpv6Redirect', 
                    'void', 
-                   [])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::DoDispose() [member function]
+                   [param('bool', 'sendIcmpv6Redirect')], 
+                   visibility='private', is_virtual=True)
+    ## ipv6-l3-protocol.h (module 'internet'): bool ns3::Ipv6L3Protocol::GetSendIcmpv6Redirect() const [member function]
+    cls.add_method('GetSendIcmpv6Redirect', 
+                   'bool', 
+                   [], 
+                   is_const=True, visibility='private', is_virtual=True)
+    return
+
+def register_Ns3Ipv6PmtuCache_methods(root_module, cls):
+    ## ipv6-pmtu-cache.h (module 'internet'): ns3::Ipv6PmtuCache::Ipv6PmtuCache(ns3::Ipv6PmtuCache const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Ipv6PmtuCache const &', 'arg0')])
+    ## ipv6-pmtu-cache.h (module 'internet'): ns3::Ipv6PmtuCache::Ipv6PmtuCache() [constructor]
+    cls.add_constructor([])
+    ## ipv6-pmtu-cache.h (module 'internet'): void ns3::Ipv6PmtuCache::DoDispose() [member function]
     cls.add_method('DoDispose', 
                    'void', 
                    [], 
-                   visibility='protected', is_virtual=True)
+                   is_virtual=True)
+    ## ipv6-pmtu-cache.h (module 'internet'): uint32_t ns3::Ipv6PmtuCache::GetPmtu(ns3::Ipv6Address dst) [member function]
+    cls.add_method('GetPmtu', 
+                   'uint32_t', 
+                   [param('ns3::Ipv6Address', 'dst')])
+    ## ipv6-pmtu-cache.h (module 'internet'): ns3::Time ns3::Ipv6PmtuCache::GetPmtuValidityTime() const [member function]
+    cls.add_method('GetPmtuValidityTime', 
+                   'ns3::Time', 
+                   [], 
+                   is_const=True)
+    ## ipv6-pmtu-cache.h (module 'internet'): static ns3::TypeId ns3::Ipv6PmtuCache::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## ipv6-pmtu-cache.h (module 'internet'): void ns3::Ipv6PmtuCache::SetPmtu(ns3::Ipv6Address dst, uint32_t pmtu) [member function]
+    cls.add_method('SetPmtu', 
+                   'void', 
+                   [param('ns3::Ipv6Address', 'dst'), param('uint32_t', 'pmtu')])
+    ## ipv6-pmtu-cache.h (module 'internet'): bool ns3::Ipv6PmtuCache::SetPmtuValidityTime(ns3::Time validity) [member function]
+    cls.add_method('SetPmtuValidityTime', 
+                   'bool', 
+                   [param('ns3::Time', 'validity')])
     return
 
 def register_Ns3Ipv6PrefixChecker_methods(root_module, cls):
@@ -5999,10 +6132,10 @@
                    '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')])
     return
 
 def register_Ns3TimeValue_methods(root_module, cls):
diff -Naur ns-3.19/src/flow-monitor/bindings/modulegen__gcc_LP64.py ns-3.20/src/flow-monitor/bindings/modulegen__gcc_LP64.py
--- ns-3.19/src/flow-monitor/bindings/modulegen__gcc_LP64.py	2014-06-17 10:34:00.425636762 -0700
+++ ns-3.20/src/flow-monitor/bindings/modulegen__gcc_LP64.py	2014-06-17 10:33:13.743997119 -0700
@@ -60,34 +60,6 @@
     module.add_class('InetSocketAddress', import_from_module='ns.network')
     ## inet-socket-address.h (module 'network'): ns3::InetSocketAddress [class]
     root_module['ns3::InetSocketAddress'].implicitly_converts_to(root_module['ns3::Address'])
-    ## int-to-type.h (module 'core'): ns3::IntToType<0> [struct]
-    module.add_class('IntToType', import_from_module='ns.core', template_parameters=['0'])
-    ## int-to-type.h (module 'core'): ns3::IntToType<0>::v_e [enumeration]
-    module.add_enum('v_e', ['value'], outer_class=root_module['ns3::IntToType< 0 >'], import_from_module='ns.core')
-    ## int-to-type.h (module 'core'): ns3::IntToType<1> [struct]
-    module.add_class('IntToType', import_from_module='ns.core', template_parameters=['1'])
-    ## int-to-type.h (module 'core'): ns3::IntToType<1>::v_e [enumeration]
-    module.add_enum('v_e', ['value'], outer_class=root_module['ns3::IntToType< 1 >'], import_from_module='ns.core')
-    ## int-to-type.h (module 'core'): ns3::IntToType<2> [struct]
-    module.add_class('IntToType', import_from_module='ns.core', template_parameters=['2'])
-    ## int-to-type.h (module 'core'): ns3::IntToType<2>::v_e [enumeration]
-    module.add_enum('v_e', ['value'], outer_class=root_module['ns3::IntToType< 2 >'], import_from_module='ns.core')
-    ## int-to-type.h (module 'core'): ns3::IntToType<3> [struct]
-    module.add_class('IntToType', import_from_module='ns.core', template_parameters=['3'])
-    ## int-to-type.h (module 'core'): ns3::IntToType<3>::v_e [enumeration]
-    module.add_enum('v_e', ['value'], outer_class=root_module['ns3::IntToType< 3 >'], import_from_module='ns.core')
-    ## int-to-type.h (module 'core'): ns3::IntToType<4> [struct]
-    module.add_class('IntToType', import_from_module='ns.core', template_parameters=['4'])
-    ## int-to-type.h (module 'core'): ns3::IntToType<4>::v_e [enumeration]
-    module.add_enum('v_e', ['value'], outer_class=root_module['ns3::IntToType< 4 >'], import_from_module='ns.core')
-    ## int-to-type.h (module 'core'): ns3::IntToType<5> [struct]
-    module.add_class('IntToType', import_from_module='ns.core', template_parameters=['5'])
-    ## int-to-type.h (module 'core'): ns3::IntToType<5>::v_e [enumeration]
-    module.add_enum('v_e', ['value'], outer_class=root_module['ns3::IntToType< 5 >'], import_from_module='ns.core')
-    ## int-to-type.h (module 'core'): ns3::IntToType<6> [struct]
-    module.add_class('IntToType', import_from_module='ns.core', template_parameters=['6'])
-    ## int-to-type.h (module 'core'): ns3::IntToType<6>::v_e [enumeration]
-    module.add_enum('v_e', ['value'], outer_class=root_module['ns3::IntToType< 6 >'], 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]
@@ -144,14 +116,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')
-    ## timer.h (module 'core'): ns3::Timer [class]
-    module.add_class('Timer', import_from_module='ns.core')
-    ## timer.h (module 'core'): ns3::Timer::DestroyPolicy [enumeration]
-    module.add_enum('DestroyPolicy', ['CANCEL_ON_DESTROY', 'REMOVE_ON_DESTROY', 'CHECK_ON_DESTROY'], outer_class=root_module['ns3::Timer'], import_from_module='ns.core')
-    ## timer.h (module 'core'): ns3::Timer::State [enumeration]
-    module.add_enum('State', ['RUNNING', 'EXPIRED', 'SUSPENDED'], outer_class=root_module['ns3::Timer'], import_from_module='ns.core')
-    ## timer-impl.h (module 'core'): ns3::TimerImpl [class]
-    module.add_class('TimerImpl', allow_subclassing=True, import_from_module='ns.core')
+    ## 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]
@@ -164,6 +130,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]
@@ -262,10 +230,6 @@
     module.add_class('FlowProbe', parent=root_module['ns3::Object'])
     ## flow-probe.h (module 'flow-monitor'): ns3::FlowProbe::FlowStats [struct]
     module.add_class('FlowStats', outer_class=root_module['ns3::FlowProbe'])
-    ## ip-l4-protocol.h (module 'internet'): ns3::IpL4Protocol [class]
-    module.add_class('IpL4Protocol', import_from_module='ns.internet', parent=root_module['ns3::Object'])
-    ## ip-l4-protocol.h (module 'internet'): ns3::IpL4Protocol::RxStatus [enumeration]
-    module.add_enum('RxStatus', ['RX_OK', 'RX_CSUM_FAILED', 'RX_ENDPOINT_CLOSED', 'RX_ENDPOINT_UNREACH'], outer_class=root_module['ns3::IpL4Protocol'], import_from_module='ns.internet')
     ## ipv4.h (module 'internet'): ns3::Ipv4 [class]
     module.add_class('Ipv4', import_from_module='ns.internet', parent=root_module['ns3::Object'])
     ## ipv4-address.h (module 'network'): ns3::Ipv4AddressChecker [class]
@@ -294,12 +258,26 @@
     module.add_class('Ipv4Route', import_from_module='ns.internet', parent=root_module['ns3::SimpleRefCount< ns3::Ipv4Route, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4Route> >'])
     ## ipv4-routing-protocol.h (module 'internet'): ns3::Ipv4RoutingProtocol [class]
     module.add_class('Ipv4RoutingProtocol', import_from_module='ns.internet', parent=root_module['ns3::Object'])
+    ## ipv6.h (module 'internet'): ns3::Ipv6 [class]
+    module.add_class('Ipv6', import_from_module='ns.internet', parent=root_module['ns3::Object'])
     ## 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-interface.h (module 'internet'): ns3::Ipv6Interface [class]
-    module.add_class('Ipv6Interface', import_from_module='ns.internet', parent=root_module['ns3::Object'])
+    ## ipv6-flow-classifier.h (module 'flow-monitor'): ns3::Ipv6FlowClassifier [class]
+    module.add_class('Ipv6FlowClassifier', parent=root_module['ns3::FlowClassifier'])
+    ## ipv6-flow-classifier.h (module 'flow-monitor'): ns3::Ipv6FlowClassifier::FiveTuple [struct]
+    module.add_class('FiveTuple', outer_class=root_module['ns3::Ipv6FlowClassifier'])
+    ## ipv6-flow-probe.h (module 'flow-monitor'): ns3::Ipv6FlowProbe [class]
+    module.add_class('Ipv6FlowProbe', parent=root_module['ns3::FlowProbe'])
+    ## ipv6-flow-probe.h (module 'flow-monitor'): ns3::Ipv6FlowProbe::DropReason [enumeration]
+    module.add_enum('DropReason', ['DROP_NO_ROUTE', 'DROP_TTL_EXPIRE', 'DROP_BAD_CHECKSUM', 'DROP_QUEUE', 'DROP_INTERFACE_DOWN', 'DROP_ROUTE_ERROR', 'DROP_UNKNOWN_PROTOCOL', 'DROP_UNKNOWN_OPTION', 'DROP_MALFORMED_HEADER', 'DROP_FRAGMENT_TIMEOUT', 'DROP_INVALID_REASON'], outer_class=root_module['ns3::Ipv6FlowProbe'])
+    ## ipv6-l3-protocol.h (module 'internet'): ns3::Ipv6L3Protocol [class]
+    module.add_class('Ipv6L3Protocol', import_from_module='ns.internet', parent=root_module['ns3::Ipv6'])
+    ## ipv6-l3-protocol.h (module 'internet'): ns3::Ipv6L3Protocol::DropReason [enumeration]
+    module.add_enum('DropReason', ['DROP_TTL_EXPIRED', 'DROP_NO_ROUTE', 'DROP_INTERFACE_DOWN', 'DROP_ROUTE_ERROR', 'DROP_UNKNOWN_PROTOCOL', 'DROP_UNKNOWN_OPTION', 'DROP_MALFORMED_HEADER', 'DROP_FRAGMENT_TIMEOUT'], outer_class=root_module['ns3::Ipv6L3Protocol'], import_from_module='ns.internet')
+    ## ipv6-pmtu-cache.h (module 'internet'): ns3::Ipv6PmtuCache [class]
+    module.add_class('Ipv6PmtuCache', import_from_module='ns.internet', parent=root_module['ns3::Object'])
     ## 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]
@@ -330,18 +308,18 @@
     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< unsigned int >', 'unsigned int', container_type='vector')
-    module.add_container('std::vector< unsigned long >', 'long unsigned int', container_type='vector')
-    module.add_container('std::map< unsigned int, ns3::FlowMonitor::FlowStats >', ('unsigned int', 'ns3::FlowMonitor::FlowStats'), container_type='map')
-    module.add_container('std::vector< ns3::Ptr< ns3::FlowProbe > >', 'ns3::Ptr< ns3::FlowProbe >', container_type='vector')
-    module.add_container('std::map< unsigned int, ns3::FlowProbe::FlowStats >', ('unsigned int', 'ns3::FlowProbe::FlowStats'), container_type='map')
-    module.add_container('std::map< unsigned int, unsigned int >', ('unsigned int', 'unsigned int'), container_type='map')
-    typehandlers.add_type_alias('uint32_t', 'ns3::FlowPacketId')
-    typehandlers.add_type_alias('uint32_t*', 'ns3::FlowPacketId*')
-    typehandlers.add_type_alias('uint32_t&', 'ns3::FlowPacketId&')
-    typehandlers.add_type_alias('uint32_t', 'ns3::FlowId')
-    typehandlers.add_type_alias('uint32_t*', 'ns3::FlowId*')
-    typehandlers.add_type_alias('uint32_t&', 'ns3::FlowId&')
+    module.add_container('std::vector< unsigned int >', 'unsigned int', container_type=u'vector')
+    module.add_container('std::vector< unsigned long >', 'long unsigned int', container_type=u'vector')
+    module.add_container('std::map< unsigned int, ns3::FlowMonitor::FlowStats >', ('unsigned int', 'ns3::FlowMonitor::FlowStats'), container_type=u'map')
+    module.add_container('std::vector< ns3::Ptr< ns3::FlowProbe > >', 'ns3::Ptr< ns3::FlowProbe >', container_type=u'vector')
+    module.add_container('std::map< unsigned int, ns3::FlowProbe::FlowStats >', ('unsigned int', 'ns3::FlowProbe::FlowStats'), container_type=u'map')
+    module.add_container('std::map< unsigned int, unsigned int >', ('unsigned int', 'unsigned int'), container_type=u'map')
+    typehandlers.add_type_alias(u'uint32_t', u'ns3::FlowPacketId')
+    typehandlers.add_type_alias(u'uint32_t*', u'ns3::FlowPacketId*')
+    typehandlers.add_type_alias(u'uint32_t&', u'ns3::FlowPacketId&')
+    typehandlers.add_type_alias(u'uint32_t', u'ns3::FlowId')
+    typehandlers.add_type_alias(u'uint32_t*', u'ns3::FlowId*')
+    typehandlers.add_type_alias(u'uint32_t&', u'ns3::FlowId&')
     
     ## Register a nested module for the namespace FatalImpl
     
@@ -364,12 +342,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
     
@@ -407,13 +385,6 @@
     register_Ns3Histogram_methods(root_module, root_module['ns3::Histogram'])
     register_Ns3Inet6SocketAddress_methods(root_module, root_module['ns3::Inet6SocketAddress'])
     register_Ns3InetSocketAddress_methods(root_module, root_module['ns3::InetSocketAddress'])
-    register_Ns3IntToType__0_methods(root_module, root_module['ns3::IntToType< 0 >'])
-    register_Ns3IntToType__1_methods(root_module, root_module['ns3::IntToType< 1 >'])
-    register_Ns3IntToType__2_methods(root_module, root_module['ns3::IntToType< 2 >'])
-    register_Ns3IntToType__3_methods(root_module, root_module['ns3::IntToType< 3 >'])
-    register_Ns3IntToType__4_methods(root_module, root_module['ns3::IntToType< 4 >'])
-    register_Ns3IntToType__5_methods(root_module, root_module['ns3::IntToType< 5 >'])
-    register_Ns3IntToType__6_methods(root_module, root_module['ns3::IntToType< 6 >'])
     register_Ns3Ipv4Address_methods(root_module, root_module['ns3::Ipv4Address'])
     register_Ns3Ipv4InterfaceAddress_methods(root_module, root_module['ns3::Ipv4InterfaceAddress'])
     register_Ns3Ipv4Mask_methods(root_module, root_module['ns3::Ipv4Mask'])
@@ -435,8 +406,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_Ns3Timer_methods(root_module, root_module['ns3::Timer'])
-    register_Ns3TimerImpl_methods(root_module, root_module['ns3::TimerImpl'])
+    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'])
@@ -484,7 +454,6 @@
     register_Ns3FlowMonitorFlowStats_methods(root_module, root_module['ns3::FlowMonitor::FlowStats'])
     register_Ns3FlowProbe_methods(root_module, root_module['ns3::FlowProbe'])
     register_Ns3FlowProbeFlowStats_methods(root_module, root_module['ns3::FlowProbe::FlowStats'])
-    register_Ns3IpL4Protocol_methods(root_module, root_module['ns3::IpL4Protocol'])
     register_Ns3Ipv4_methods(root_module, root_module['ns3::Ipv4'])
     register_Ns3Ipv4AddressChecker_methods(root_module, root_module['ns3::Ipv4AddressChecker'])
     register_Ns3Ipv4AddressValue_methods(root_module, root_module['ns3::Ipv4AddressValue'])
@@ -497,9 +466,14 @@
     register_Ns3Ipv4MulticastRoute_methods(root_module, root_module['ns3::Ipv4MulticastRoute'])
     register_Ns3Ipv4Route_methods(root_module, root_module['ns3::Ipv4Route'])
     register_Ns3Ipv4RoutingProtocol_methods(root_module, root_module['ns3::Ipv4RoutingProtocol'])
+    register_Ns3Ipv6_methods(root_module, root_module['ns3::Ipv6'])
     register_Ns3Ipv6AddressChecker_methods(root_module, root_module['ns3::Ipv6AddressChecker'])
     register_Ns3Ipv6AddressValue_methods(root_module, root_module['ns3::Ipv6AddressValue'])
-    register_Ns3Ipv6Interface_methods(root_module, root_module['ns3::Ipv6Interface'])
+    register_Ns3Ipv6FlowClassifier_methods(root_module, root_module['ns3::Ipv6FlowClassifier'])
+    register_Ns3Ipv6FlowClassifierFiveTuple_methods(root_module, root_module['ns3::Ipv6FlowClassifier::FiveTuple'])
+    register_Ns3Ipv6FlowProbe_methods(root_module, root_module['ns3::Ipv6FlowProbe'])
+    register_Ns3Ipv6L3Protocol_methods(root_module, root_module['ns3::Ipv6L3Protocol'])
+    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_Ns3NetDevice_methods(root_module, root_module['ns3::NetDevice'])
@@ -766,6 +740,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', 
@@ -778,6 +756,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', 
@@ -1045,18 +1027,12 @@
     return
 
 def register_Ns3FlowMonitorHelper_methods(root_module, cls):
-    ## flow-monitor-helper.h (module 'flow-monitor'): ns3::FlowMonitorHelper::FlowMonitorHelper(ns3::FlowMonitorHelper const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::FlowMonitorHelper const &', 'arg0')])
     ## flow-monitor-helper.h (module 'flow-monitor'): ns3::FlowMonitorHelper::FlowMonitorHelper() [constructor]
     cls.add_constructor([])
-    ## flow-monitor-helper.h (module 'flow-monitor'): ns3::Ptr<ns3::FlowClassifier> ns3::FlowMonitorHelper::GetClassifier() [member function]
-    cls.add_method('GetClassifier', 
-                   'ns3::Ptr< ns3::FlowClassifier >', 
-                   [])
-    ## flow-monitor-helper.h (module 'flow-monitor'): ns3::Ptr<ns3::FlowMonitor> ns3::FlowMonitorHelper::GetMonitor() [member function]
-    cls.add_method('GetMonitor', 
-                   'ns3::Ptr< ns3::FlowMonitor >', 
-                   [])
+    ## flow-monitor-helper.h (module 'flow-monitor'): void ns3::FlowMonitorHelper::SetMonitorAttribute(std::string n1, ns3::AttributeValue const & v1) [member function]
+    cls.add_method('SetMonitorAttribute', 
+                   'void', 
+                   [param('std::string', 'n1'), param('ns3::AttributeValue const &', 'v1')])
     ## flow-monitor-helper.h (module 'flow-monitor'): ns3::Ptr<ns3::FlowMonitor> ns3::FlowMonitorHelper::Install(ns3::NodeContainer nodes) [member function]
     cls.add_method('Install', 
                    'ns3::Ptr< ns3::FlowMonitor >', 
@@ -1069,10 +1045,30 @@
     cls.add_method('InstallAll', 
                    'ns3::Ptr< ns3::FlowMonitor >', 
                    [])
-    ## flow-monitor-helper.h (module 'flow-monitor'): void ns3::FlowMonitorHelper::SetMonitorAttribute(std::string n1, ns3::AttributeValue const & v1) [member function]
-    cls.add_method('SetMonitorAttribute', 
+    ## flow-monitor-helper.h (module 'flow-monitor'): ns3::Ptr<ns3::FlowMonitor> ns3::FlowMonitorHelper::GetMonitor() [member function]
+    cls.add_method('GetMonitor', 
+                   'ns3::Ptr< ns3::FlowMonitor >', 
+                   [])
+    ## flow-monitor-helper.h (module 'flow-monitor'): ns3::Ptr<ns3::FlowClassifier> ns3::FlowMonitorHelper::GetClassifier() [member function]
+    cls.add_method('GetClassifier', 
+                   'ns3::Ptr< ns3::FlowClassifier >', 
+                   [])
+    ## flow-monitor-helper.h (module 'flow-monitor'): ns3::Ptr<ns3::FlowClassifier> ns3::FlowMonitorHelper::GetClassifier6() [member function]
+    cls.add_method('GetClassifier6', 
+                   'ns3::Ptr< ns3::FlowClassifier >', 
+                   [])
+    ## flow-monitor-helper.h (module 'flow-monitor'): void ns3::FlowMonitorHelper::SerializeToXmlStream(std::ostream & os, int indent, bool enableHistograms, bool enableProbes) [member function]
+    cls.add_method('SerializeToXmlStream', 
                    'void', 
-                   [param('std::string', 'n1'), param('ns3::AttributeValue const &', 'v1')])
+                   [param('std::ostream &', 'os'), param('int', 'indent'), param('bool', 'enableHistograms'), param('bool', 'enableProbes')])
+    ## flow-monitor-helper.h (module 'flow-monitor'): std::string ns3::FlowMonitorHelper::SerializeToXmlString(int indent, bool enableHistograms, bool enableProbes) [member function]
+    cls.add_method('SerializeToXmlString', 
+                   'std::string', 
+                   [param('int', 'indent'), param('bool', 'enableHistograms'), param('bool', 'enableProbes')])
+    ## flow-monitor-helper.h (module 'flow-monitor'): void ns3::FlowMonitorHelper::SerializeToXmlFile(std::string fileName, bool enableHistograms, bool enableProbes) [member function]
+    cls.add_method('SerializeToXmlFile', 
+                   'void', 
+                   [param('std::string', 'fileName'), param('bool', 'enableHistograms'), param('bool', 'enableProbes')])
     return
 
 def register_Ns3Hasher_methods(root_module, cls):
@@ -1234,55 +1230,6 @@
                    [param('uint16_t', 'port')])
     return
 
-def register_Ns3IntToType__0_methods(root_module, cls):
-    ## int-to-type.h (module 'core'): ns3::IntToType<0>::IntToType() [constructor]
-    cls.add_constructor([])
-    ## int-to-type.h (module 'core'): ns3::IntToType<0>::IntToType(ns3::IntToType<0> const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::IntToType< 0 > const &', 'arg0')])
-    return
-
-def register_Ns3IntToType__1_methods(root_module, cls):
-    ## int-to-type.h (module 'core'): ns3::IntToType<1>::IntToType() [constructor]
-    cls.add_constructor([])
-    ## int-to-type.h (module 'core'): ns3::IntToType<1>::IntToType(ns3::IntToType<1> const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::IntToType< 1 > const &', 'arg0')])
-    return
-
-def register_Ns3IntToType__2_methods(root_module, cls):
-    ## int-to-type.h (module 'core'): ns3::IntToType<2>::IntToType() [constructor]
-    cls.add_constructor([])
-    ## int-to-type.h (module 'core'): ns3::IntToType<2>::IntToType(ns3::IntToType<2> const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::IntToType< 2 > const &', 'arg0')])
-    return
-
-def register_Ns3IntToType__3_methods(root_module, cls):
-    ## int-to-type.h (module 'core'): ns3::IntToType<3>::IntToType() [constructor]
-    cls.add_constructor([])
-    ## int-to-type.h (module 'core'): ns3::IntToType<3>::IntToType(ns3::IntToType<3> const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::IntToType< 3 > const &', 'arg0')])
-    return
-
-def register_Ns3IntToType__4_methods(root_module, cls):
-    ## int-to-type.h (module 'core'): ns3::IntToType<4>::IntToType() [constructor]
-    cls.add_constructor([])
-    ## int-to-type.h (module 'core'): ns3::IntToType<4>::IntToType(ns3::IntToType<4> const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::IntToType< 4 > const &', 'arg0')])
-    return
-
-def register_Ns3IntToType__5_methods(root_module, cls):
-    ## int-to-type.h (module 'core'): ns3::IntToType<5>::IntToType() [constructor]
-    cls.add_constructor([])
-    ## int-to-type.h (module 'core'): ns3::IntToType<5>::IntToType(ns3::IntToType<5> const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::IntToType< 5 > const &', 'arg0')])
-    return
-
-def register_Ns3IntToType__6_methods(root_module, cls):
-    ## int-to-type.h (module 'core'): ns3::IntToType<6>::IntToType() [constructor]
-    cls.add_constructor([])
-    ## int-to-type.h (module 'core'): ns3::IntToType<6>::IntToType(ns3::IntToType<6> const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::IntToType< 6 > const &', 'arg0')])
-    return
-
 def register_Ns3Ipv4Address_methods(root_module, cls):
     cls.add_binary_comparison_operator('<')
     cls.add_binary_comparison_operator('!=')
@@ -1751,6 +1698,11 @@
                    'ns3::Ipv6InterfaceAddress::State_e', 
                    [], 
                    is_const=True)
+    ## ipv6-interface-address.h (module 'internet'): bool ns3::Ipv6InterfaceAddress::IsInSameSubnet(ns3::Ipv6Address b) const [member function]
+    cls.add_method('IsInSameSubnet', 
+                   'bool', 
+                   [param('ns3::Ipv6Address', 'b')], 
+                   is_const=True)
     ## ipv6-interface-address.h (module 'internet'): void ns3::Ipv6InterfaceAddress::SetAddress(ns3::Ipv6Address address) [member function]
     cls.add_method('SetAddress', 
                    'void', 
@@ -2378,88 +2330,12 @@
                    [param('uint8_t', 'v')])
     return
 
-def register_Ns3Timer_methods(root_module, cls):
-    ## timer.h (module 'core'): ns3::Timer::Timer(ns3::Timer const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::Timer const &', 'arg0')])
-    ## timer.h (module 'core'): ns3::Timer::Timer() [constructor]
-    cls.add_constructor([])
-    ## timer.h (module 'core'): ns3::Timer::Timer(ns3::Timer::DestroyPolicy destroyPolicy) [constructor]
-    cls.add_constructor([param('ns3::Timer::DestroyPolicy', 'destroyPolicy')])
-    ## timer.h (module 'core'): void ns3::Timer::Cancel() [member function]
-    cls.add_method('Cancel', 
-                   'void', 
-                   [])
-    ## timer.h (module 'core'): ns3::Time ns3::Timer::GetDelay() const [member function]
-    cls.add_method('GetDelay', 
-                   'ns3::Time', 
-                   [], 
-                   is_const=True)
-    ## timer.h (module 'core'): ns3::Time ns3::Timer::GetDelayLeft() const [member function]
-    cls.add_method('GetDelayLeft', 
-                   'ns3::Time', 
-                   [], 
-                   is_const=True)
-    ## timer.h (module 'core'): ns3::Timer::State ns3::Timer::GetState() const [member function]
-    cls.add_method('GetState', 
-                   'ns3::Timer::State', 
-                   [], 
-                   is_const=True)
-    ## timer.h (module 'core'): bool ns3::Timer::IsExpired() const [member function]
-    cls.add_method('IsExpired', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## timer.h (module 'core'): bool ns3::Timer::IsRunning() const [member function]
-    cls.add_method('IsRunning', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## timer.h (module 'core'): bool ns3::Timer::IsSuspended() const [member function]
-    cls.add_method('IsSuspended', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## timer.h (module 'core'): void ns3::Timer::Remove() [member function]
-    cls.add_method('Remove', 
-                   'void', 
-                   [])
-    ## timer.h (module 'core'): void ns3::Timer::Resume() [member function]
-    cls.add_method('Resume', 
-                   'void', 
-                   [])
-    ## timer.h (module 'core'): void ns3::Timer::Schedule() [member function]
-    cls.add_method('Schedule', 
-                   'void', 
-                   [])
-    ## timer.h (module 'core'): void ns3::Timer::Schedule(ns3::Time delay) [member function]
-    cls.add_method('Schedule', 
-                   'void', 
-                   [param('ns3::Time', 'delay')])
-    ## timer.h (module 'core'): void ns3::Timer::SetDelay(ns3::Time const & delay) [member function]
-    cls.add_method('SetDelay', 
-                   'void', 
-                   [param('ns3::Time const &', 'delay')])
-    ## timer.h (module 'core'): void ns3::Timer::Suspend() [member function]
-    cls.add_method('Suspend', 
-                   'void', 
-                   [])
-    return
-
-def register_Ns3TimerImpl_methods(root_module, cls):
-    ## timer-impl.h (module 'core'): ns3::TimerImpl::TimerImpl() [constructor]
-    cls.add_constructor([])
-    ## timer-impl.h (module 'core'): ns3::TimerImpl::TimerImpl(ns3::TimerImpl const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::TimerImpl const &', 'arg0')])
-    ## timer-impl.h (module 'core'): void ns3::TimerImpl::Invoke() [member function]
-    cls.add_method('Invoke', 
-                   'void', 
-                   [], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## timer-impl.h (module 'core'): ns3::EventId ns3::TimerImpl::Schedule(ns3::Time const & delay) [member function]
-    cls.add_method('Schedule', 
-                   'ns3::EventId', 
-                   [param('ns3::Time const &', 'delay')], 
-                   is_pure_virtual=True, is_virtual=True)
+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):
@@ -2659,62 +2535,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('==')
@@ -2723,6 +2555,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]
@@ -2763,6 +2597,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):
@@ -3926,13 +3762,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('==')
@@ -3959,6 +3797,11 @@
     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', 
@@ -4380,6 +4223,10 @@
     cls.add_constructor([param('ns3::FlowMonitor const &', 'arg0')])
     ## flow-monitor.h (module 'flow-monitor'): ns3::FlowMonitor::FlowMonitor() [constructor]
     cls.add_constructor([])
+    ## flow-monitor.h (module 'flow-monitor'): void ns3::FlowMonitor::AddFlowClassifier(ns3::Ptr<ns3::FlowClassifier> classifier) [member function]
+    cls.add_method('AddFlowClassifier', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::FlowClassifier >', 'classifier')])
     ## flow-monitor.h (module 'flow-monitor'): void ns3::FlowMonitor::AddProbe(ns3::Ptr<ns3::FlowProbe> probe) [member function]
     cls.add_method('AddProbe', 
                    'void', 
@@ -4440,10 +4287,6 @@
     cls.add_method('SerializeToXmlString', 
                    'std::string', 
                    [param('int', 'indent'), param('bool', 'enableHistograms'), param('bool', 'enableProbes')])
-    ## flow-monitor.h (module 'flow-monitor'): void ns3::FlowMonitor::SetFlowClassifier(ns3::Ptr<ns3::FlowClassifier> classifier) [member function]
-    cls.add_method('SetFlowClassifier', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::FlowClassifier >', 'classifier')])
     ## flow-monitor.h (module 'flow-monitor'): void ns3::FlowMonitor::Start(ns3::Time const & time) [member function]
     cls.add_method('Start', 
                    'void', 
@@ -4563,63 +4406,6 @@
     cls.add_instance_attribute('packetsDropped', 'std::vector< unsigned int >', is_const=False)
     return
 
-def register_Ns3IpL4Protocol_methods(root_module, cls):
-    ## ip-l4-protocol.h (module 'internet'): ns3::IpL4Protocol::IpL4Protocol() [constructor]
-    cls.add_constructor([])
-    ## ip-l4-protocol.h (module 'internet'): ns3::IpL4Protocol::IpL4Protocol(ns3::IpL4Protocol const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::IpL4Protocol const &', 'arg0')])
-    ## ip-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::IpL4Protocol::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 >', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## ip-l4-protocol.h (module 'internet'): 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> ns3::IpL4Protocol::GetDownTarget6() const [member function]
-    cls.add_method('GetDownTarget6', 
-                   '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 >', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## ip-l4-protocol.h (module 'internet'): int ns3::IpL4Protocol::GetProtocolNumber() const [member function]
-    cls.add_method('GetProtocolNumber', 
-                   'int', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## ip-l4-protocol.h (module 'internet'): static ns3::TypeId ns3::IpL4Protocol::GetTypeId() [member function]
-    cls.add_method('GetTypeId', 
-                   'ns3::TypeId', 
-                   [], 
-                   is_static=True)
-    ## ip-l4-protocol.h (module 'internet'): ns3::IpL4Protocol::RxStatus ns3::IpL4Protocol::Receive(ns3::Ptr<ns3::Packet> p, ns3::Ipv4Header const & header, 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')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## ip-l4-protocol.h (module 'internet'): ns3::IpL4Protocol::RxStatus ns3::IpL4Protocol::Receive(ns3::Ptr<ns3::Packet> p, ns3::Ipv6Header const & header, 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')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## ip-l4-protocol.h (module 'internet'): void ns3::IpL4Protocol::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', 
-                   'void', 
-                   [param('ns3::Ipv4Address', 'icmpSource'), param('uint8_t', 'icmpTtl'), param('uint8_t', 'icmpType'), param('uint8_t', 'icmpCode'), param('uint32_t', 'icmpInfo'), param('ns3::Ipv4Address', 'payloadSource'), param('ns3::Ipv4Address', 'payloadDestination'), param('uint8_t const *', 'payload')], 
-                   is_virtual=True)
-    ## ip-l4-protocol.h (module 'internet'): void ns3::IpL4Protocol::ReceiveIcmp(ns3::Ipv6Address icmpSource, uint8_t icmpTtl, uint8_t icmpType, uint8_t icmpCode, uint32_t icmpInfo, ns3::Ipv6Address payloadSource, ns3::Ipv6Address payloadDestination, uint8_t const * payload) [member function]
-    cls.add_method('ReceiveIcmp', 
-                   'void', 
-                   [param('ns3::Ipv6Address', 'icmpSource'), param('uint8_t', 'icmpTtl'), param('uint8_t', 'icmpType'), param('uint8_t', 'icmpCode'), param('uint32_t', 'icmpInfo'), param('ns3::Ipv6Address', 'payloadSource'), param('ns3::Ipv6Address', 'payloadDestination'), param('uint8_t const *', 'payload')], 
-                   is_virtual=True)
-    ## ip-l4-protocol.h (module 'internet'): void ns3::IpL4Protocol::SetDownTarget(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> cb) [member function]
-    cls.add_method('SetDownTarget', 
-                   'void', 
-                   [param('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 >', 'cb')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## ip-l4-protocol.h (module 'internet'): void ns3::IpL4Protocol::SetDownTarget6(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) [member function]
-    cls.add_method('SetDownTarget6', 
-                   '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_pure_virtual=True, is_virtual=True)
-    return
-
 def register_Ns3Ipv4_methods(root_module, cls):
     ## ipv4.h (module 'internet'): ns3::Ipv4::Ipv4(ns3::Ipv4 const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::Ipv4 const &', 'arg0')])
@@ -4990,6 +4776,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', 
@@ -5283,6 +5074,170 @@
                    is_pure_virtual=True, is_virtual=True)
     return
 
+def register_Ns3Ipv6_methods(root_module, cls):
+    ## ipv6.h (module 'internet'): ns3::Ipv6::Ipv6(ns3::Ipv6 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Ipv6 const &', 'arg0')])
+    ## ipv6.h (module 'internet'): ns3::Ipv6::Ipv6() [constructor]
+    cls.add_constructor([])
+    ## ipv6.h (module 'internet'): bool ns3::Ipv6::AddAddress(uint32_t interface, ns3::Ipv6InterfaceAddress address) [member function]
+    cls.add_method('AddAddress', 
+                   'bool', 
+                   [param('uint32_t', 'interface'), param('ns3::Ipv6InterfaceAddress', 'address')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## ipv6.h (module 'internet'): uint32_t ns3::Ipv6::AddInterface(ns3::Ptr<ns3::NetDevice> device) [member function]
+    cls.add_method('AddInterface', 
+                   'uint32_t', 
+                   [param('ns3::Ptr< ns3::NetDevice >', 'device')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## ipv6.h (module 'internet'): ns3::Ipv6InterfaceAddress ns3::Ipv6::GetAddress(uint32_t interface, uint32_t addressIndex) const [member function]
+    cls.add_method('GetAddress', 
+                   'ns3::Ipv6InterfaceAddress', 
+                   [param('uint32_t', 'interface'), param('uint32_t', 'addressIndex')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## ipv6.h (module 'internet'): int32_t ns3::Ipv6::GetInterfaceForAddress(ns3::Ipv6Address address) const [member function]
+    cls.add_method('GetInterfaceForAddress', 
+                   'int32_t', 
+                   [param('ns3::Ipv6Address', 'address')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## ipv6.h (module 'internet'): int32_t ns3::Ipv6::GetInterfaceForDevice(ns3::Ptr<const ns3::NetDevice> device) const [member function]
+    cls.add_method('GetInterfaceForDevice', 
+                   'int32_t', 
+                   [param('ns3::Ptr< ns3::NetDevice const >', 'device')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## ipv6.h (module 'internet'): int32_t ns3::Ipv6::GetInterfaceForPrefix(ns3::Ipv6Address address, ns3::Ipv6Prefix mask) const [member function]
+    cls.add_method('GetInterfaceForPrefix', 
+                   'int32_t', 
+                   [param('ns3::Ipv6Address', 'address'), param('ns3::Ipv6Prefix', 'mask')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## ipv6.h (module 'internet'): uint16_t ns3::Ipv6::GetMetric(uint32_t interface) const [member function]
+    cls.add_method('GetMetric', 
+                   'uint16_t', 
+                   [param('uint32_t', 'interface')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## ipv6.h (module 'internet'): uint16_t ns3::Ipv6::GetMtu(uint32_t interface) const [member function]
+    cls.add_method('GetMtu', 
+                   'uint16_t', 
+                   [param('uint32_t', 'interface')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## ipv6.h (module 'internet'): uint32_t ns3::Ipv6::GetNAddresses(uint32_t interface) const [member function]
+    cls.add_method('GetNAddresses', 
+                   'uint32_t', 
+                   [param('uint32_t', 'interface')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## ipv6.h (module 'internet'): uint32_t ns3::Ipv6::GetNInterfaces() const [member function]
+    cls.add_method('GetNInterfaces', 
+                   'uint32_t', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## ipv6.h (module 'internet'): ns3::Ptr<ns3::NetDevice> ns3::Ipv6::GetNetDevice(uint32_t interface) [member function]
+    cls.add_method('GetNetDevice', 
+                   'ns3::Ptr< ns3::NetDevice >', 
+                   [param('uint32_t', 'interface')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## ipv6.h (module 'internet'): ns3::Ptr<ns3::IpL4Protocol> ns3::Ipv6::GetProtocol(int protocolNumber) const [member function]
+    cls.add_method('GetProtocol', 
+                   'ns3::Ptr< ns3::IpL4Protocol >', 
+                   [param('int', 'protocolNumber')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## ipv6.h (module 'internet'): ns3::Ptr<ns3::Ipv6RoutingProtocol> ns3::Ipv6::GetRoutingProtocol() const [member function]
+    cls.add_method('GetRoutingProtocol', 
+                   'ns3::Ptr< ns3::Ipv6RoutingProtocol >', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## ipv6.h (module 'internet'): static ns3::TypeId ns3::Ipv6::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## ipv6.h (module 'internet'): bool ns3::Ipv6::IsForwarding(uint32_t interface) const [member function]
+    cls.add_method('IsForwarding', 
+                   'bool', 
+                   [param('uint32_t', 'interface')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## ipv6.h (module 'internet'): bool ns3::Ipv6::IsUp(uint32_t interface) const [member function]
+    cls.add_method('IsUp', 
+                   'bool', 
+                   [param('uint32_t', 'interface')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## ipv6.h (module 'internet'): void ns3::Ipv6::RegisterExtensions() [member function]
+    cls.add_method('RegisterExtensions', 
+                   'void', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## ipv6.h (module 'internet'): void ns3::Ipv6::RegisterOptions() [member function]
+    cls.add_method('RegisterOptions', 
+                   'void', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## ipv6.h (module 'internet'): bool ns3::Ipv6::RemoveAddress(uint32_t interface, uint32_t addressIndex) [member function]
+    cls.add_method('RemoveAddress', 
+                   'bool', 
+                   [param('uint32_t', 'interface'), param('uint32_t', 'addressIndex')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## ipv6.h (module 'internet'): bool ns3::Ipv6::RemoveAddress(uint32_t interface, ns3::Ipv6Address address) [member function]
+    cls.add_method('RemoveAddress', 
+                   'bool', 
+                   [param('uint32_t', 'interface'), param('ns3::Ipv6Address', 'address')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## ipv6.h (module 'internet'): void ns3::Ipv6::SetDown(uint32_t interface) [member function]
+    cls.add_method('SetDown', 
+                   'void', 
+                   [param('uint32_t', 'interface')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## ipv6.h (module 'internet'): void ns3::Ipv6::SetForwarding(uint32_t interface, bool val) [member function]
+    cls.add_method('SetForwarding', 
+                   'void', 
+                   [param('uint32_t', 'interface'), param('bool', 'val')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## ipv6.h (module 'internet'): void ns3::Ipv6::SetMetric(uint32_t interface, uint16_t metric) [member function]
+    cls.add_method('SetMetric', 
+                   'void', 
+                   [param('uint32_t', 'interface'), param('uint16_t', 'metric')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## ipv6.h (module 'internet'): void ns3::Ipv6::SetPmtu(ns3::Ipv6Address dst, uint32_t pmtu) [member function]
+    cls.add_method('SetPmtu', 
+                   'void', 
+                   [param('ns3::Ipv6Address', 'dst'), param('uint32_t', 'pmtu')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## ipv6.h (module 'internet'): void ns3::Ipv6::SetRoutingProtocol(ns3::Ptr<ns3::Ipv6RoutingProtocol> routingProtocol) [member function]
+    cls.add_method('SetRoutingProtocol', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Ipv6RoutingProtocol >', 'routingProtocol')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## ipv6.h (module 'internet'): void ns3::Ipv6::SetUp(uint32_t interface) [member function]
+    cls.add_method('SetUp', 
+                   'void', 
+                   [param('uint32_t', 'interface')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## ipv6.h (module 'internet'): ns3::Ipv6Address ns3::Ipv6::SourceAddressSelection(uint32_t interface, ns3::Ipv6Address dest) [member function]
+    cls.add_method('SourceAddressSelection', 
+                   'ns3::Ipv6Address', 
+                   [param('uint32_t', 'interface'), param('ns3::Ipv6Address', 'dest')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## ipv6.h (module 'internet'): ns3::Ipv6::IF_ANY [variable]
+    cls.add_static_attribute('IF_ANY', 'uint32_t const', is_const=True)
+    ## ipv6.h (module 'internet'): bool ns3::Ipv6::GetIpForward() const [member function]
+    cls.add_method('GetIpForward', 
+                   'bool', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, visibility='private', is_virtual=True)
+    ## ipv6.h (module 'internet'): bool ns3::Ipv6::GetMtuDiscover() const [member function]
+    cls.add_method('GetMtuDiscover', 
+                   'bool', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, visibility='private', is_virtual=True)
+    ## ipv6.h (module 'internet'): void ns3::Ipv6::SetIpForward(bool forward) [member function]
+    cls.add_method('SetIpForward', 
+                   'void', 
+                   [param('bool', 'forward')], 
+                   is_pure_virtual=True, visibility='private', is_virtual=True)
+    ## ipv6.h (module 'internet'): void ns3::Ipv6::SetMtuDiscover(bool mtuDiscover) [member function]
+    cls.add_method('SetMtuDiscover', 
+                   'void', 
+                   [param('bool', 'mtuDiscover')], 
+                   is_pure_virtual=True, visibility='private', is_virtual=True)
+    return
+
 def register_Ns3Ipv6AddressChecker_methods(root_module, cls):
     ## ipv6-address.h (module 'network'): ns3::Ipv6AddressChecker::Ipv6AddressChecker() [constructor]
     cls.add_constructor([])
@@ -5323,149 +5278,327 @@
                    [param('ns3::Ipv6Address const &', 'value')])
     return
 
-def register_Ns3Ipv6Interface_methods(root_module, cls):
-    ## ipv6-interface.h (module 'internet'): ns3::Ipv6Interface::Ipv6Interface(ns3::Ipv6Interface const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::Ipv6Interface const &', 'arg0')])
-    ## ipv6-interface.h (module 'internet'): ns3::Ipv6Interface::Ipv6Interface() [constructor]
+def register_Ns3Ipv6FlowClassifier_methods(root_module, cls):
+    ## ipv6-flow-classifier.h (module 'flow-monitor'): ns3::Ipv6FlowClassifier::Ipv6FlowClassifier() [constructor]
     cls.add_constructor([])
-    ## ipv6-interface.h (module 'internet'): bool ns3::Ipv6Interface::AddAddress(ns3::Ipv6InterfaceAddress iface) [member function]
-    cls.add_method('AddAddress', 
+    ## ipv6-flow-classifier.h (module 'flow-monitor'): bool ns3::Ipv6FlowClassifier::Classify(ns3::Ipv6Header const & ipHeader, ns3::Ptr<const ns3::Packet> ipPayload, uint32_t * out_flowId, uint32_t * out_packetId) [member function]
+    cls.add_method('Classify', 
                    'bool', 
-                   [param('ns3::Ipv6InterfaceAddress', 'iface')])
-    ## ipv6-interface.h (module 'internet'): ns3::Ipv6InterfaceAddress ns3::Ipv6Interface::GetAddress(uint32_t index) const [member function]
-    cls.add_method('GetAddress', 
-                   'ns3::Ipv6InterfaceAddress', 
-                   [param('uint32_t', 'index')], 
-                   is_const=True)
-    ## ipv6-interface.h (module 'internet'): ns3::Ipv6InterfaceAddress ns3::Ipv6Interface::GetAddressMatchingDestination(ns3::Ipv6Address dst) [member function]
-    cls.add_method('GetAddressMatchingDestination', 
-                   'ns3::Ipv6InterfaceAddress', 
-                   [param('ns3::Ipv6Address', 'dst')])
-    ## ipv6-interface.h (module 'internet'): uint16_t ns3::Ipv6Interface::GetBaseReachableTime() const [member function]
-    cls.add_method('GetBaseReachableTime', 
-                   'uint16_t', 
-                   [], 
+                   [param('ns3::Ipv6Header const &', 'ipHeader'), param('ns3::Ptr< ns3::Packet const >', 'ipPayload'), param('uint32_t *', 'out_flowId'), param('uint32_t *', 'out_packetId')])
+    ## ipv6-flow-classifier.h (module 'flow-monitor'): ns3::Ipv6FlowClassifier::FiveTuple ns3::Ipv6FlowClassifier::FindFlow(ns3::FlowId flowId) const [member function]
+    cls.add_method('FindFlow', 
+                   'ns3::Ipv6FlowClassifier::FiveTuple', 
+                   [param('ns3::FlowId', 'flowId')], 
                    is_const=True)
-    ## ipv6-interface.h (module 'internet'): uint8_t ns3::Ipv6Interface::GetCurHopLimit() const [member function]
-    cls.add_method('GetCurHopLimit', 
-                   'uint8_t', 
+    ## ipv6-flow-classifier.h (module 'flow-monitor'): void ns3::Ipv6FlowClassifier::SerializeToXmlStream(std::ostream & os, int indent) const [member function]
+    cls.add_method('SerializeToXmlStream', 
+                   'void', 
+                   [param('std::ostream &', 'os'), param('int', 'indent')], 
+                   is_const=True, is_virtual=True)
+    return
+
+def register_Ns3Ipv6FlowClassifierFiveTuple_methods(root_module, cls):
+    cls.add_binary_comparison_operator('<')
+    cls.add_binary_comparison_operator('==')
+    ## ipv6-flow-classifier.h (module 'flow-monitor'): ns3::Ipv6FlowClassifier::FiveTuple::FiveTuple() [constructor]
+    cls.add_constructor([])
+    ## ipv6-flow-classifier.h (module 'flow-monitor'): ns3::Ipv6FlowClassifier::FiveTuple::FiveTuple(ns3::Ipv6FlowClassifier::FiveTuple const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Ipv6FlowClassifier::FiveTuple const &', 'arg0')])
+    ## ipv6-flow-classifier.h (module 'flow-monitor'): ns3::Ipv6FlowClassifier::FiveTuple::destinationAddress [variable]
+    cls.add_instance_attribute('destinationAddress', 'ns3::Ipv6Address', is_const=False)
+    ## ipv6-flow-classifier.h (module 'flow-monitor'): ns3::Ipv6FlowClassifier::FiveTuple::destinationPort [variable]
+    cls.add_instance_attribute('destinationPort', 'uint16_t', is_const=False)
+    ## ipv6-flow-classifier.h (module 'flow-monitor'): ns3::Ipv6FlowClassifier::FiveTuple::protocol [variable]
+    cls.add_instance_attribute('protocol', 'uint8_t', is_const=False)
+    ## ipv6-flow-classifier.h (module 'flow-monitor'): ns3::Ipv6FlowClassifier::FiveTuple::sourceAddress [variable]
+    cls.add_instance_attribute('sourceAddress', 'ns3::Ipv6Address', is_const=False)
+    ## ipv6-flow-classifier.h (module 'flow-monitor'): ns3::Ipv6FlowClassifier::FiveTuple::sourcePort [variable]
+    cls.add_instance_attribute('sourcePort', 'uint16_t', is_const=False)
+    return
+
+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'): void ns3::Ipv6FlowProbe::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
                    [], 
-                   is_const=True)
-    ## ipv6-interface.h (module 'internet'): ns3::Ptr<ns3::NetDevice> ns3::Ipv6Interface::GetDevice() const [member function]
-    cls.add_method('GetDevice', 
-                   'ns3::Ptr< ns3::NetDevice >', 
+                   visibility='protected', is_virtual=True)
+    return
+
+def register_Ns3Ipv6L3Protocol_methods(root_module, cls):
+    ## ipv6-l3-protocol.h (module 'internet'): ns3::Ipv6L3Protocol::PROT_NUMBER [variable]
+    cls.add_static_attribute('PROT_NUMBER', 'uint16_t const', is_const=True)
+    ## ipv6-l3-protocol.h (module 'internet'): static ns3::TypeId ns3::Ipv6L3Protocol::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
                    [], 
+                   is_static=True)
+    ## ipv6-l3-protocol.h (module 'internet'): ns3::Ipv6L3Protocol::Ipv6L3Protocol() [constructor]
+    cls.add_constructor([])
+    ## ipv6-l3-protocol.h (module 'internet'): void ns3::Ipv6L3Protocol::SetNode(ns3::Ptr<ns3::Node> node) [member function]
+    cls.add_method('SetNode', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Node >', 'node')])
+    ## ipv6-l3-protocol.h (module 'internet'): void ns3::Ipv6L3Protocol::Insert(ns3::Ptr<ns3::IpL4Protocol> protocol) [member function]
+    cls.add_method('Insert', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol')])
+    ## ipv6-l3-protocol.h (module 'internet'): void ns3::Ipv6L3Protocol::Remove(ns3::Ptr<ns3::IpL4Protocol> protocol) [member function]
+    cls.add_method('Remove', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol')])
+    ## ipv6-l3-protocol.h (module 'internet'): ns3::Ptr<ns3::IpL4Protocol> ns3::Ipv6L3Protocol::GetProtocol(int protocolNumber) const [member function]
+    cls.add_method('GetProtocol', 
+                   'ns3::Ptr< ns3::IpL4Protocol >', 
+                   [param('int', 'protocolNumber')], 
                    is_const=True, is_virtual=True)
-    ## ipv6-interface.h (module 'internet'): ns3::Ipv6InterfaceAddress ns3::Ipv6Interface::GetLinkLocalAddress() const [member function]
-    cls.add_method('GetLinkLocalAddress', 
-                   'ns3::Ipv6InterfaceAddress', 
+    ## ipv6-l3-protocol.h (module 'internet'): ns3::Ptr<ns3::Socket> ns3::Ipv6L3Protocol::CreateRawSocket() [member function]
+    cls.add_method('CreateRawSocket', 
+                   'ns3::Ptr< ns3::Socket >', 
+                   [])
+    ## ipv6-l3-protocol.h (module 'internet'): void ns3::Ipv6L3Protocol::DeleteRawSocket(ns3::Ptr<ns3::Socket> socket) [member function]
+    cls.add_method('DeleteRawSocket', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Socket >', 'socket')])
+    ## ipv6-l3-protocol.h (module 'internet'): void ns3::Ipv6L3Protocol::SetDefaultTtl(uint8_t ttl) [member function]
+    cls.add_method('SetDefaultTtl', 
+                   'void', 
+                   [param('uint8_t', 'ttl')])
+    ## ipv6-l3-protocol.h (module 'internet'): void ns3::Ipv6L3Protocol::SetDefaultTclass(uint8_t tclass) [member function]
+    cls.add_method('SetDefaultTclass', 
+                   'void', 
+                   [param('uint8_t', 'tclass')])
+    ## ipv6-l3-protocol.h (module 'internet'): void ns3::Ipv6L3Protocol::Receive(ns3::Ptr<ns3::NetDevice> device, ns3::Ptr<const ns3::Packet> p, uint16_t protocol, ns3::Address const & from, ns3::Address const & to, ns3::NetDevice::PacketType packetType) [member function]
+    cls.add_method('Receive', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::NetDevice >', 'device'), param('ns3::Ptr< ns3::Packet const >', 'p'), param('uint16_t', 'protocol'), param('ns3::Address const &', 'from'), param('ns3::Address const &', 'to'), param('ns3::NetDevice::PacketType', 'packetType')])
+    ## ipv6-l3-protocol.h (module 'internet'): void ns3::Ipv6L3Protocol::Send(ns3::Ptr<ns3::Packet> packet, ns3::Ipv6Address source, ns3::Ipv6Address destination, uint8_t protocol, ns3::Ptr<ns3::Ipv6Route> route) [member function]
+    cls.add_method('Send', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('ns3::Ipv6Address', 'source'), param('ns3::Ipv6Address', 'destination'), param('uint8_t', 'protocol'), param('ns3::Ptr< ns3::Ipv6Route >', 'route')])
+    ## ipv6-l3-protocol.h (module 'internet'): void ns3::Ipv6L3Protocol::SetRoutingProtocol(ns3::Ptr<ns3::Ipv6RoutingProtocol> routingProtocol) [member function]
+    cls.add_method('SetRoutingProtocol', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Ipv6RoutingProtocol >', 'routingProtocol')], 
+                   is_virtual=True)
+    ## ipv6-l3-protocol.h (module 'internet'): ns3::Ptr<ns3::Ipv6RoutingProtocol> ns3::Ipv6L3Protocol::GetRoutingProtocol() const [member function]
+    cls.add_method('GetRoutingProtocol', 
+                   'ns3::Ptr< ns3::Ipv6RoutingProtocol >', 
                    [], 
+                   is_const=True, is_virtual=True)
+    ## ipv6-l3-protocol.h (module 'internet'): uint32_t ns3::Ipv6L3Protocol::AddInterface(ns3::Ptr<ns3::NetDevice> device) [member function]
+    cls.add_method('AddInterface', 
+                   'uint32_t', 
+                   [param('ns3::Ptr< ns3::NetDevice >', 'device')], 
+                   is_virtual=True)
+    ## ipv6-l3-protocol.h (module 'internet'): ns3::Ptr<ns3::Ipv6Interface> ns3::Ipv6L3Protocol::GetInterface(uint32_t i) const [member function]
+    cls.add_method('GetInterface', 
+                   'ns3::Ptr< ns3::Ipv6Interface >', 
+                   [param('uint32_t', 'i')], 
                    is_const=True)
-    ## ipv6-interface.h (module 'internet'): uint16_t ns3::Ipv6Interface::GetMetric() const [member function]
-    cls.add_method('GetMetric', 
-                   'uint16_t', 
+    ## ipv6-l3-protocol.h (module 'internet'): uint32_t ns3::Ipv6L3Protocol::GetNInterfaces() const [member function]
+    cls.add_method('GetNInterfaces', 
+                   'uint32_t', 
                    [], 
-                   is_const=True)
-    ## ipv6-interface.h (module 'internet'): uint32_t ns3::Ipv6Interface::GetNAddresses() const [member function]
+                   is_const=True, is_virtual=True)
+    ## ipv6-l3-protocol.h (module 'internet'): int32_t ns3::Ipv6L3Protocol::GetInterfaceForAddress(ns3::Ipv6Address addr) const [member function]
+    cls.add_method('GetInterfaceForAddress', 
+                   'int32_t', 
+                   [param('ns3::Ipv6Address', 'addr')], 
+                   is_const=True, is_virtual=True)
+    ## ipv6-l3-protocol.h (module 'internet'): int32_t ns3::Ipv6L3Protocol::GetInterfaceForPrefix(ns3::Ipv6Address addr, ns3::Ipv6Prefix mask) const [member function]
+    cls.add_method('GetInterfaceForPrefix', 
+                   'int32_t', 
+                   [param('ns3::Ipv6Address', 'addr'), param('ns3::Ipv6Prefix', 'mask')], 
+                   is_const=True, is_virtual=True)
+    ## ipv6-l3-protocol.h (module 'internet'): int32_t ns3::Ipv6L3Protocol::GetInterfaceForDevice(ns3::Ptr<const ns3::NetDevice> device) const [member function]
+    cls.add_method('GetInterfaceForDevice', 
+                   'int32_t', 
+                   [param('ns3::Ptr< ns3::NetDevice const >', 'device')], 
+                   is_const=True, is_virtual=True)
+    ## ipv6-l3-protocol.h (module 'internet'): bool ns3::Ipv6L3Protocol::AddAddress(uint32_t i, ns3::Ipv6InterfaceAddress address) [member function]
+    cls.add_method('AddAddress', 
+                   'bool', 
+                   [param('uint32_t', 'i'), param('ns3::Ipv6InterfaceAddress', 'address')], 
+                   is_virtual=True)
+    ## ipv6-l3-protocol.h (module 'internet'): ns3::Ipv6InterfaceAddress ns3::Ipv6L3Protocol::GetAddress(uint32_t interfaceIndex, uint32_t addressIndex) const [member function]
+    cls.add_method('GetAddress', 
+                   'ns3::Ipv6InterfaceAddress', 
+                   [param('uint32_t', 'interfaceIndex'), param('uint32_t', 'addressIndex')], 
+                   is_const=True, is_virtual=True)
+    ## ipv6-l3-protocol.h (module 'internet'): uint32_t ns3::Ipv6L3Protocol::GetNAddresses(uint32_t interface) const [member function]
     cls.add_method('GetNAddresses', 
                    'uint32_t', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface.h (module 'internet'): uint16_t ns3::Ipv6Interface::GetReachableTime() const [member function]
-    cls.add_method('GetReachableTime', 
+                   [param('uint32_t', 'interface')], 
+                   is_const=True, is_virtual=True)
+    ## ipv6-l3-protocol.h (module 'internet'): bool ns3::Ipv6L3Protocol::RemoveAddress(uint32_t interfaceIndex, uint32_t addressIndex) [member function]
+    cls.add_method('RemoveAddress', 
+                   'bool', 
+                   [param('uint32_t', 'interfaceIndex'), param('uint32_t', 'addressIndex')], 
+                   is_virtual=True)
+    ## ipv6-l3-protocol.h (module 'internet'): bool ns3::Ipv6L3Protocol::RemoveAddress(uint32_t interfaceIndex, ns3::Ipv6Address address) [member function]
+    cls.add_method('RemoveAddress', 
+                   'bool', 
+                   [param('uint32_t', 'interfaceIndex'), param('ns3::Ipv6Address', 'address')], 
+                   is_virtual=True)
+    ## ipv6-l3-protocol.h (module 'internet'): void ns3::Ipv6L3Protocol::SetMetric(uint32_t i, uint16_t metric) [member function]
+    cls.add_method('SetMetric', 
+                   'void', 
+                   [param('uint32_t', 'i'), param('uint16_t', 'metric')], 
+                   is_virtual=True)
+    ## ipv6-l3-protocol.h (module 'internet'): uint16_t ns3::Ipv6L3Protocol::GetMetric(uint32_t i) const [member function]
+    cls.add_method('GetMetric', 
                    'uint16_t', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface.h (module 'internet'): uint16_t ns3::Ipv6Interface::GetRetransTimer() const [member function]
-    cls.add_method('GetRetransTimer', 
+                   [param('uint32_t', 'i')], 
+                   is_const=True, is_virtual=True)
+    ## ipv6-l3-protocol.h (module 'internet'): uint16_t ns3::Ipv6L3Protocol::GetMtu(uint32_t i) const [member function]
+    cls.add_method('GetMtu', 
                    'uint16_t', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface.h (module 'internet'): static ns3::TypeId ns3::Ipv6Interface::GetTypeId() [member function]
-    cls.add_method('GetTypeId', 
-                   'ns3::TypeId', 
-                   [], 
-                   is_static=True)
-    ## ipv6-interface.h (module 'internet'): bool ns3::Ipv6Interface::IsDown() const [member function]
-    cls.add_method('IsDown', 
+                   [param('uint32_t', 'i')], 
+                   is_const=True, is_virtual=True)
+    ## ipv6-l3-protocol.h (module 'internet'): void ns3::Ipv6L3Protocol::SetPmtu(ns3::Ipv6Address dst, uint32_t pmtu) [member function]
+    cls.add_method('SetPmtu', 
+                   'void', 
+                   [param('ns3::Ipv6Address', 'dst'), param('uint32_t', 'pmtu')], 
+                   is_virtual=True)
+    ## ipv6-l3-protocol.h (module 'internet'): bool ns3::Ipv6L3Protocol::IsUp(uint32_t i) const [member function]
+    cls.add_method('IsUp', 
                    'bool', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface.h (module 'internet'): bool ns3::Ipv6Interface::IsForwarding() const [member function]
+                   [param('uint32_t', 'i')], 
+                   is_const=True, is_virtual=True)
+    ## ipv6-l3-protocol.h (module 'internet'): void ns3::Ipv6L3Protocol::SetUp(uint32_t i) [member function]
+    cls.add_method('SetUp', 
+                   'void', 
+                   [param('uint32_t', 'i')], 
+                   is_virtual=True)
+    ## ipv6-l3-protocol.h (module 'internet'): void ns3::Ipv6L3Protocol::SetDown(uint32_t i) [member function]
+    cls.add_method('SetDown', 
+                   'void', 
+                   [param('uint32_t', 'i')], 
+                   is_virtual=True)
+    ## ipv6-l3-protocol.h (module 'internet'): bool ns3::Ipv6L3Protocol::IsForwarding(uint32_t i) const [member function]
     cls.add_method('IsForwarding', 
                    'bool', 
+                   [param('uint32_t', 'i')], 
+                   is_const=True, is_virtual=True)
+    ## ipv6-l3-protocol.h (module 'internet'): void ns3::Ipv6L3Protocol::SetForwarding(uint32_t i, bool val) [member function]
+    cls.add_method('SetForwarding', 
+                   'void', 
+                   [param('uint32_t', 'i'), param('bool', 'val')], 
+                   is_virtual=True)
+    ## ipv6-l3-protocol.h (module 'internet'): ns3::Ipv6Address ns3::Ipv6L3Protocol::SourceAddressSelection(uint32_t interface, ns3::Ipv6Address dest) [member function]
+    cls.add_method('SourceAddressSelection', 
+                   'ns3::Ipv6Address', 
+                   [param('uint32_t', 'interface'), param('ns3::Ipv6Address', 'dest')], 
+                   is_virtual=True)
+    ## ipv6-l3-protocol.h (module 'internet'): ns3::Ptr<ns3::NetDevice> ns3::Ipv6L3Protocol::GetNetDevice(uint32_t i) [member function]
+    cls.add_method('GetNetDevice', 
+                   'ns3::Ptr< ns3::NetDevice >', 
+                   [param('uint32_t', 'i')], 
+                   is_virtual=True)
+    ## ipv6-l3-protocol.h (module 'internet'): ns3::Ptr<ns3::Icmpv6L4Protocol> ns3::Ipv6L3Protocol::GetIcmpv6() const [member function]
+    cls.add_method('GetIcmpv6', 
+                   'ns3::Ptr< ns3::Icmpv6L4Protocol >', 
                    [], 
                    is_const=True)
-    ## ipv6-interface.h (module 'internet'): bool ns3::Ipv6Interface::IsUp() const [member function]
-    cls.add_method('IsUp', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface.h (module 'internet'): ns3::Ipv6InterfaceAddress ns3::Ipv6Interface::RemoveAddress(uint32_t index) [member function]
-    cls.add_method('RemoveAddress', 
-                   'ns3::Ipv6InterfaceAddress', 
-                   [param('uint32_t', 'index')])
-    ## ipv6-interface.h (module 'internet'): ns3::Ipv6InterfaceAddress ns3::Ipv6Interface::RemoveAddress(ns3::Ipv6Address address) [member function]
-    cls.add_method('RemoveAddress', 
-                   'ns3::Ipv6InterfaceAddress', 
-                   [param('ns3::Ipv6Address', 'address')])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::Send(ns3::Ptr<ns3::Packet> p, ns3::Ipv6Address dest) [member function]
-    cls.add_method('Send', 
+    ## ipv6-l3-protocol.h (module 'internet'): void ns3::Ipv6L3Protocol::AddAutoconfiguredAddress(uint32_t interface, ns3::Ipv6Address network, ns3::Ipv6Prefix mask, uint8_t flags, uint32_t validTime, uint32_t preferredTime, ns3::Ipv6Address defaultRouter=ns3::Ipv6Address::GetZero( )) [member function]
+    cls.add_method('AddAutoconfiguredAddress', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet >', 'p'), param('ns3::Ipv6Address', 'dest')])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetBaseReachableTime(uint16_t baseReachableTime) [member function]
-    cls.add_method('SetBaseReachableTime', 
-                   'void', 
-                   [param('uint16_t', 'baseReachableTime')])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetCurHopLimit(uint8_t curHopLimit) [member function]
-    cls.add_method('SetCurHopLimit', 
-                   'void', 
-                   [param('uint8_t', 'curHopLimit')])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetDevice(ns3::Ptr<ns3::NetDevice> device) [member function]
-    cls.add_method('SetDevice', 
+                   [param('uint32_t', 'interface'), param('ns3::Ipv6Address', 'network'), param('ns3::Ipv6Prefix', 'mask'), param('uint8_t', 'flags'), param('uint32_t', 'validTime'), param('uint32_t', 'preferredTime'), param('ns3::Ipv6Address', 'defaultRouter', default_value='ns3::Ipv6Address::GetZero( )')])
+    ## ipv6-l3-protocol.h (module 'internet'): void ns3::Ipv6L3Protocol::RemoveAutoconfiguredAddress(uint32_t interface, ns3::Ipv6Address network, ns3::Ipv6Prefix mask, ns3::Ipv6Address defaultRouter) [member function]
+    cls.add_method('RemoveAutoconfiguredAddress', 
                    'void', 
-                   [param('ns3::Ptr< ns3::NetDevice >', 'device')])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetDown() [member function]
-    cls.add_method('SetDown', 
+                   [param('uint32_t', 'interface'), param('ns3::Ipv6Address', 'network'), param('ns3::Ipv6Prefix', 'mask'), param('ns3::Ipv6Address', 'defaultRouter')])
+    ## ipv6-l3-protocol.h (module 'internet'): void ns3::Ipv6L3Protocol::RegisterExtensions() [member function]
+    cls.add_method('RegisterExtensions', 
                    'void', 
-                   [])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetForwarding(bool forward) [member function]
-    cls.add_method('SetForwarding', 
+                   [], 
+                   is_virtual=True)
+    ## ipv6-l3-protocol.h (module 'internet'): void ns3::Ipv6L3Protocol::RegisterOptions() [member function]
+    cls.add_method('RegisterOptions', 
                    'void', 
-                   [param('bool', 'forward')])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetMetric(uint16_t metric) [member function]
-    cls.add_method('SetMetric', 
+                   [], 
+                   is_virtual=True)
+    ## ipv6-l3-protocol.h (module 'internet'): void ns3::Ipv6L3Protocol::ReportDrop(ns3::Ipv6Header ipHeader, ns3::Ptr<ns3::Packet> p, ns3::Ipv6L3Protocol::DropReason dropReason) [member function]
+    cls.add_method('ReportDrop', 
                    'void', 
-                   [param('uint16_t', 'metric')])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetNode(ns3::Ptr<ns3::Node> node) [member function]
-    cls.add_method('SetNode', 
+                   [param('ns3::Ipv6Header', 'ipHeader'), param('ns3::Ptr< ns3::Packet >', 'p'), param('ns3::Ipv6L3Protocol::DropReason', 'dropReason')], 
+                   is_virtual=True)
+    ## ipv6-l3-protocol.h (module 'internet'): void ns3::Ipv6L3Protocol::DoDispose() [member function]
+    cls.add_method('DoDispose', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Node >', 'node')])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetNsDadUid(ns3::Ipv6Address address, uint32_t uid) [member function]
-    cls.add_method('SetNsDadUid', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    ## ipv6-l3-protocol.h (module 'internet'): void ns3::Ipv6L3Protocol::NotifyNewAggregate() [member function]
+    cls.add_method('NotifyNewAggregate', 
                    'void', 
-                   [param('ns3::Ipv6Address', 'address'), param('uint32_t', 'uid')])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetReachableTime(uint16_t reachableTime) [member function]
-    cls.add_method('SetReachableTime', 
-                   'void', 
-                   [param('uint16_t', 'reachableTime')])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetRetransTimer(uint16_t retransTimer) [member function]
-    cls.add_method('SetRetransTimer', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    ## ipv6-l3-protocol.h (module 'internet'): void ns3::Ipv6L3Protocol::SetIpForward(bool forward) [member function]
+    cls.add_method('SetIpForward', 
                    'void', 
-                   [param('uint16_t', 'retransTimer')])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetState(ns3::Ipv6Address address, ns3::Ipv6InterfaceAddress::State_e state) [member function]
-    cls.add_method('SetState', 
+                   [param('bool', 'forward')], 
+                   visibility='private', is_virtual=True)
+    ## ipv6-l3-protocol.h (module 'internet'): bool ns3::Ipv6L3Protocol::GetIpForward() const [member function]
+    cls.add_method('GetIpForward', 
+                   'bool', 
+                   [], 
+                   is_const=True, visibility='private', is_virtual=True)
+    ## ipv6-l3-protocol.h (module 'internet'): void ns3::Ipv6L3Protocol::SetMtuDiscover(bool mtuDiscover) [member function]
+    cls.add_method('SetMtuDiscover', 
                    'void', 
-                   [param('ns3::Ipv6Address', 'address'), param('ns3::Ipv6InterfaceAddress::State_e', 'state')])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetUp() [member function]
-    cls.add_method('SetUp', 
+                   [param('bool', 'mtuDiscover')], 
+                   visibility='private', is_virtual=True)
+    ## ipv6-l3-protocol.h (module 'internet'): bool ns3::Ipv6L3Protocol::GetMtuDiscover() const [member function]
+    cls.add_method('GetMtuDiscover', 
+                   'bool', 
+                   [], 
+                   is_const=True, visibility='private', is_virtual=True)
+    ## ipv6-l3-protocol.h (module 'internet'): void ns3::Ipv6L3Protocol::SetSendIcmpv6Redirect(bool sendIcmpv6Redirect) [member function]
+    cls.add_method('SetSendIcmpv6Redirect', 
                    'void', 
-                   [])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::DoDispose() [member function]
+                   [param('bool', 'sendIcmpv6Redirect')], 
+                   visibility='private', is_virtual=True)
+    ## ipv6-l3-protocol.h (module 'internet'): bool ns3::Ipv6L3Protocol::GetSendIcmpv6Redirect() const [member function]
+    cls.add_method('GetSendIcmpv6Redirect', 
+                   'bool', 
+                   [], 
+                   is_const=True, visibility='private', is_virtual=True)
+    return
+
+def register_Ns3Ipv6PmtuCache_methods(root_module, cls):
+    ## ipv6-pmtu-cache.h (module 'internet'): ns3::Ipv6PmtuCache::Ipv6PmtuCache(ns3::Ipv6PmtuCache const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Ipv6PmtuCache const &', 'arg0')])
+    ## ipv6-pmtu-cache.h (module 'internet'): ns3::Ipv6PmtuCache::Ipv6PmtuCache() [constructor]
+    cls.add_constructor([])
+    ## ipv6-pmtu-cache.h (module 'internet'): void ns3::Ipv6PmtuCache::DoDispose() [member function]
     cls.add_method('DoDispose', 
                    'void', 
                    [], 
-                   visibility='protected', is_virtual=True)
+                   is_virtual=True)
+    ## ipv6-pmtu-cache.h (module 'internet'): uint32_t ns3::Ipv6PmtuCache::GetPmtu(ns3::Ipv6Address dst) [member function]
+    cls.add_method('GetPmtu', 
+                   'uint32_t', 
+                   [param('ns3::Ipv6Address', 'dst')])
+    ## ipv6-pmtu-cache.h (module 'internet'): ns3::Time ns3::Ipv6PmtuCache::GetPmtuValidityTime() const [member function]
+    cls.add_method('GetPmtuValidityTime', 
+                   'ns3::Time', 
+                   [], 
+                   is_const=True)
+    ## ipv6-pmtu-cache.h (module 'internet'): static ns3::TypeId ns3::Ipv6PmtuCache::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## ipv6-pmtu-cache.h (module 'internet'): void ns3::Ipv6PmtuCache::SetPmtu(ns3::Ipv6Address dst, uint32_t pmtu) [member function]
+    cls.add_method('SetPmtu', 
+                   'void', 
+                   [param('ns3::Ipv6Address', 'dst'), param('uint32_t', 'pmtu')])
+    ## ipv6-pmtu-cache.h (module 'internet'): bool ns3::Ipv6PmtuCache::SetPmtuValidityTime(ns3::Time validity) [member function]
+    cls.add_method('SetPmtuValidityTime', 
+                   'bool', 
+                   [param('ns3::Time', 'validity')])
     return
 
 def register_Ns3Ipv6PrefixChecker_methods(root_module, cls):
@@ -5999,10 +6132,10 @@
                    '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')])
     return
 
 def register_Ns3TimeValue_methods(root_module, cls):
diff -Naur ns-3.19/src/flow-monitor/doc/flow-monitor.rst ns-3.20/src/flow-monitor/doc/flow-monitor.rst
--- ns-3.19/src/flow-monitor/doc/flow-monitor.rst	2014-06-17 10:34:00.426636754 -0700
+++ ns-3.20/src/flow-monitor/doc/flow-monitor.rst	2014-06-17 10:33:13.744997112 -0700
@@ -1,9 +1,198 @@
 Flow Monitor
 ------------
 
-*Placeholder chapter*
+.. include:: replace.txt
+.. highlight:: cpp
 
-This feature was added as contributed code (``src/contrib``) in
-*ns-3.6* and to the main distribution (``src/flow-monitor``) for
-*ns-3.7*. A paper on this feature is published in the proceedings of
-NSTools: `<http://www.nstools.org/techprog.shtml>`_.
+.. heading hierarchy:
+   ------------- Chapter
+   ************* Section (#.#)
+   ============= Subsection (#.#.#)
+   ############# Paragraph (no number)
+
+Model Description
+*****************
+
+The source code for the new module lives in the directory ``src/flow-monitor``.
+
+The Flow Monitor module goal is to provide a flexible system to measure the
+performance of network protocols. The module uses probes, installed in network
+nodes, to track the packets exchanged by the nodes, and it will measure
+a number of parameters. Packets are divided according to the flow they belong 
+to, where each flow is defined according to the probe's characteristics (e.g.,
+for IP, a flow is defined as the packets with the same {protocol, source (IP, port), 
+destination (IP, port)} tuple.
+
+The statistics are collected for each flow can be exported in XML format. Moreover,
+the user can access the probes directly to request specific stats about each flow. 
+
+Design
+======
+
+Flow Monitor module is designed in a modular way. It can be extended by subclassing
+``ns3::FlowProbe`` and ``ns3::FlowClassifier``.
+
+The full module design is described in [FlowMonitor]_
+
+Scope and Limitations
+=====================
+
+At the moment, probes and classifiers are available for IPv4 and IPv6.
+
+Each probe will classify packets in four points:
+
+* When a packet is sent (SendOutgoing IPv[4,6] traces)
+* When a packet is forwarded (UnicastForward IPv[4,6] traces)
+* When a packet is received (LocalDeliver IPv[4,6] traces)
+* When a packet is dropped (Drop IPv[4,6] traces)
+
+Since the packets are tracked at IP level, any retransmission caused by L4 protocols (e.g., TCP)
+will be seen by the probe as a new packet.
+
+A Tag will be added to the packet (``ns3::Ipv[4,6]FlowProbeTag``). The tag will carry
+basic packet's data, useful for the packet's classification.
+
+It must be underlined that only L4 (TCP, UDP) packets are, so far, classified.
+Moreover, only unicast packets will be classified.
+These limitations may be removed in the future. 
+
+The data collected for each flow are:
+
+* timeFirstTxPacket: when the first packet in the flow was transmitted;
+* timeLastTxPacket: when the last packet in the flow was transmitted;
+* timeFirstRxPacket: when the first packet in the flow was received by an end node;
+* timeLastRxPacket: when the last packet in the flow was received;
+* delaySum: the sum of all end-to-end delays for all received packets of the flow;
+* jitterSum: the sum of all end-to-end delay jitter (delay variation) values for all received packets of the flow, as defined in :rfc:`3393`;
+* txBytes, txPackets: total number of transmitted bytes / packets for the flow;
+* rxBytes, rxPackets: total number of received bytes / packets for the flow;
+* lostPackets: total number of packets that are assumed to be lost (not reported over 10 seconds);
+* timesForwarded: the number of times a packet has been reportedly forwarded;
+* delayHistogram, jitterHistogram, packetSizeHistogram: histogram versions for the delay, jitter, and packet sizes, respectively;
+* packetsDropped, bytesDropped: the number of lost packets and bytes, divided according to the loss reason code (defined in the probe).
+
+It is worth pointing out that the probes measure the packet bytes including IP headers. 
+The L2 headers are not included in the measure.
+
+These stats will be written in XML form upon request (see the Usage section).
+
+
+References
+==========
+
+.. [FlowMonitor] G. Carneiro, P. Fortuna, and M. Ricardo. 2009. FlowMonitor: a network monitoring framework for the network simulator 3 (NS-3). In Proceedings of the Fourth International ICST Conference on Performance Evaluation Methodologies and Tools (VALUETOOLS '09). http://dx.doi.org/10.4108/ICST.VALUETOOLS2009.7493
+
+Usage
+*****
+
+The module usage is extremely simple. The helper will take care of about everything.
+
+The typical use is::
+
+  // Flow monitor
+  Ptr<FlowMonitor> flowMonitor;
+  FlowMonitorHelper flowHelper;
+  flowMonitor = flowHelper.InstallAll();
+
+  Simulator::Stop (Seconds(stop_time));
+  Simulator::Run ();
+
+  flowMonitor->SerializeToXmlFile("NameOfFile.xml", true, true);
+
+the ``SerializeToXmlFile ()`` function 2nd and 3rd parameters are used respectively to
+activate/deactivate the histograms and the per-probe detailed stats.
+
+Other possible alternatives can be found in the Doxygen documentation.
+
+
+Helpers
+=======
+
+The helper API follows the pattern usage of normal helpers.
+Through the helper you can install the monitor in the nodes, set the monitor attributes, and 
+print the statistics.
+
+One important thing is: the :cpp:class:`ns3::FlowMonitorHelper` must be instantiated only
+once in the main. 
+
+Attributes
+==========
+
+The module provides the following attributes in :cpp:class:`ns3::FlowMonitor`:
+
+* MaxPerHopDelay (Time, default 10s): The maximum per-hop delay that should be considered;
+* StartTime (Time, default 0s): The time when the monitoring starts;
+* DelayBinWidth (double, default 0.001): The width used in the delay histogram;
+* JitterBinWidth (double, default 0.001): The width used in the jitter histogram;
+* PacketSizeBinWidth (double, default 20.0): The width used in the packetSize histogram;
+* FlowInterruptionsBinWidth (double, default 0.25): The width used in the flowInterruptions histogram;
+* FlowInterruptionsMinTime (double, default 0.5): The minimum inter-arrival time that is considered a flow interruption.
+
+
+Output
+======
+
+The main model output is an XML formatted report about flow statistics. An example is::
+
+  <?xml version="1.0" ?>
+  <FlowMonitor>
+    <FlowStats>
+    <Flow flowId="1" timeFirstTxPacket="+0.0ns" timeFirstRxPacket="+20067198.0ns" timeLastTxPacket="+2235764408.0ns" timeLastRxPacket="+2255831606.0ns" delaySum="+138731526300.0ns" jitterSum="+1849692150.0ns" lastDelay="+20067198.0ns" txBytes="2149400" rxBytes="2149400" txPackets="3735" rxPackets="3735" lostPackets="0" timesForwarded="7466">
+    </Flow>
+    </FlowStats>
+    <Ipv4FlowClassifier>
+    <Flow flowId="1" sourceAddress="10.1.3.1" destinationAddress="10.1.2.2" protocol="6" sourcePort="49153" destinationPort="50000" />
+    </Ipv4FlowClassifier>
+    <Ipv6FlowClassifier>
+    </Ipv6FlowClassifier>
+    <FlowProbes>
+    <FlowProbe index="0">
+      <FlowStats  flowId="1" packets="3735" bytes="2149400" delayFromFirstProbeSum="+0.0ns" >
+      </FlowStats>
+    </FlowProbe>
+    <FlowProbe index="2">
+      <FlowStats  flowId="1" packets="7466" bytes="2224020" delayFromFirstProbeSum="+199415389258.0ns" >
+      </FlowStats>
+    </FlowProbe>
+    <FlowProbe index="4">
+      <FlowStats  flowId="1" packets="3735" bytes="2149400" delayFromFirstProbeSum="+138731526300.0ns" >
+      </FlowStats>
+    </FlowProbe>
+    </FlowProbes>
+  </FlowMonitor>
+
+The output was generated by a TCP flow from 10.1.3.1 to 10.1.2.2.
+
+It is worth noticing that the index 2 probe is reporting more packets and more bytes than the other probles. 
+That's a perfectly normal behaviour, as packets are fragmented at IP level in that node.
+
+It should also be observed that the receiving node's probe (index 4) doesn't count the fragments, as the 
+reassembly is done before the probing point.
+
+Examples
+========
+
+The examples are located in `src/flow-monitor/examples`.
+
+Moreover, the following examples use the flow-monitor module:
+
+* examples/matrix-topology/matrix-topology.cc
+* examples/routing/manet-routing-compare.cc
+* examples/routing/simple-global-routing.cc
+* examples/tcp/tcp-variants-comparison.cc
+* examples/wireless/multirate.cc
+* examples/wireless/wifi-hidden-terminal.cc
+
+
+Troubleshooting
+===============
+
+Do not define more than one :cpp:class:`ns3::FlowMonitorHelper` in the simulation.
+
+Validation
+**********
+
+The paper in the references contains a full description of the module validation against
+a test network.
+
+Tests are provided to ensure the Histogram correct functionality.
diff -Naur ns-3.19/src/flow-monitor/helper/flow-monitor-helper.cc ns-3.20/src/flow-monitor/helper/flow-monitor-helper.cc
--- ns-3.19/src/flow-monitor/helper/flow-monitor-helper.cc	2014-06-17 10:34:00.428636739 -0700
+++ ns-3.20/src/flow-monitor/helper/flow-monitor-helper.cc	2014-06-17 10:33:13.746997096 -0700
@@ -24,6 +24,9 @@
 #include "ns3/ipv4-flow-classifier.h"
 #include "ns3/ipv4-flow-probe.h"
 #include "ns3/ipv4-l3-protocol.h"
+#include "ns3/ipv6-flow-classifier.h"
+#include "ns3/ipv6-flow-probe.h"
+#include "ns3/ipv6-l3-protocol.h"
 #include "ns3/node.h"
 #include "ns3/node-list.h"
 
@@ -41,7 +44,8 @@
     {
       m_flowMonitor->Dispose ();
       m_flowMonitor = 0;
-      m_flowClassifier = 0;
+      m_flowClassifier4 = 0;
+      m_flowClassifier6 = 0;
     }
 }
 
@@ -58,8 +62,10 @@
   if (!m_flowMonitor)
     {
       m_flowMonitor = m_monitorFactory.Create<FlowMonitor> ();
-      m_flowClassifier = Create<Ipv4FlowClassifier> ();
-      m_flowMonitor->SetFlowClassifier (m_flowClassifier);
+      m_flowClassifier4 = Create<Ipv4FlowClassifier> ();
+      m_flowMonitor->AddFlowClassifier (m_flowClassifier4);
+      m_flowClassifier6 = Create<Ipv6FlowClassifier> ();
+      m_flowMonitor->AddFlowClassifier (m_flowClassifier6);
     }
   return m_flowMonitor;
 }
@@ -68,11 +74,22 @@
 Ptr<FlowClassifier>
 FlowMonitorHelper::GetClassifier ()
 {
-  if (!m_flowClassifier)
+  if (!m_flowClassifier4)
     {
-      m_flowClassifier = Create<Ipv4FlowClassifier> ();
+      m_flowClassifier4 = Create<Ipv4FlowClassifier> ();
     }
-  return m_flowClassifier;
+  return m_flowClassifier4;
+}
+
+
+Ptr<FlowClassifier>
+FlowMonitorHelper::GetClassifier6 ()
+{
+  if (!m_flowClassifier6)
+    {
+      m_flowClassifier6 = Create<Ipv6FlowClassifier> ();
+    }
+  return m_flowClassifier6;
 }
 
 
@@ -81,9 +98,21 @@
 {
   Ptr<FlowMonitor> monitor = GetMonitor ();
   Ptr<FlowClassifier> classifier = GetClassifier ();
-  Ptr<Ipv4FlowProbe> probe = Create<Ipv4FlowProbe> (monitor,
-                                                    DynamicCast<Ipv4FlowClassifier> (classifier),
-                                                    node);
+  Ptr<Ipv4L3Protocol> ipv4 = node->GetObject<Ipv4L3Protocol> ();
+  if (ipv4)
+    {
+      Ptr<Ipv4FlowProbe> probe = Create<Ipv4FlowProbe> (monitor,
+                                                        DynamicCast<Ipv4FlowClassifier> (classifier),
+                                                        node);
+    }
+  Ptr<FlowClassifier> classifier6 = GetClassifier6 ();
+  Ptr<Ipv6L3Protocol> ipv6 = node->GetObject<Ipv6L3Protocol> ();
+  if (ipv6)
+    {
+      Ptr<Ipv6FlowProbe> probe6 = Create<Ipv6FlowProbe> (monitor,
+                                                         DynamicCast<Ipv6FlowClassifier> (classifier6),
+                                                         node);
+    }
   return m_flowMonitor;
 }
 
@@ -94,7 +123,7 @@
   for (NodeContainer::Iterator i = nodes.Begin (); i != nodes.End (); ++i)
     {
       Ptr<Node> node = *i;
-      if (node->GetObject<Ipv4L3Protocol> ())
+      if (node->GetObject<Ipv4L3Protocol> () || node->GetObject<Ipv6L3Protocol> ())
         {
           Install (node);
         }
@@ -108,7 +137,7 @@
   for (NodeList::Iterator i = NodeList::Begin (); i != NodeList::End (); ++i)
     {
       Ptr<Node> node = *i;
-      if (node->GetObject<Ipv4L3Protocol> ())
+      if (node->GetObject<Ipv4L3Protocol> () || node->GetObject<Ipv6L3Protocol> ())
         {
           Install (node);
         }
@@ -116,5 +145,34 @@
   return m_flowMonitor;
 }
 
+void
+FlowMonitorHelper::SerializeToXmlStream (std::ostream &os, int indent, bool enableHistograms, bool enableProbes)
+{
+  if (m_flowMonitor)
+    {
+      m_flowMonitor->SerializeToXmlStream (os, indent, enableHistograms, enableProbes);
+    }
+}
+
+std::string
+FlowMonitorHelper::SerializeToXmlString (int indent, bool enableHistograms, bool enableProbes)
+{
+  std::ostringstream os;
+  if (m_flowMonitor)
+    {
+      m_flowMonitor->SerializeToXmlStream (os, indent, enableHistograms, enableProbes);
+    }
+  return os.str ();
+}
+
+void
+FlowMonitorHelper::SerializeToXmlFile (std::string fileName, bool enableHistograms, bool enableProbes)
+{
+  if (m_flowMonitor)
+    {
+      m_flowMonitor->SerializeToXmlFile (fileName, enableHistograms, enableProbes);
+    }
+}
+
 
 } // namespace ns3
diff -Naur ns-3.19/src/flow-monitor/helper/flow-monitor-helper.h ns-3.20/src/flow-monitor/helper/flow-monitor-helper.h
--- ns-3.19/src/flow-monitor/helper/flow-monitor-helper.h	2014-06-17 10:34:00.428636739 -0700
+++ ns-3.20/src/flow-monitor/helper/flow-monitor-helper.h	2014-06-17 10:33:13.746997096 -0700
@@ -30,10 +30,11 @@
 
 class AttributeValue;
 class Ipv4FlowClassifier;
+class Ipv6FlowClassifier;
 
 /**
  * \ingroup flow-monitor
- * \brief Helper to enable IPv4 flow monitoring on a set of Nodes
+ * \brief Helper to enable IP flow monitoring on a set of Nodes
  */
 class FlowMonitorHelper
 {
@@ -74,15 +75,62 @@
   Ptr<FlowMonitor> GetMonitor ();
 
   /**
-   * \brief Retrieve the FlowClassifier object created by the Install* methods
+   * \brief Retrieve the FlowClassifier object for IPv4 created by the Install* methods
    * \returns a pointer to the FlowClassifier object
    */
   Ptr<FlowClassifier> GetClassifier ();
 
+  /**
+   * \brief Retrieve the FlowClassifier object for IPv6 created by the Install* methods
+   * \returns a pointer to the FlowClassifier object
+   */
+  Ptr<FlowClassifier> GetClassifier6 ();
+
+  /**
+   * Serializes the results to an std::ostream in XML format
+   * \param os the output stream
+   * \param indent number of spaces to use as base indentation level
+   * \param enableHistograms if true, include also the histograms in the output
+   * \param enableProbes if true, include also the per-probe/flow pair statistics in the output
+   */
+  void SerializeToXmlStream (std::ostream &os, int indent, bool enableHistograms, bool enableProbes);
+
+  /**
+   * Same as SerializeToXmlStream, but returns the output as a std::string
+   * \param indent number of spaces to use as base indentation level
+   * \param enableHistograms if true, include also the histograms in the output
+   * \param enableProbes if true, include also the per-probe/flow pair statistics in the output
+   * \return the XML output as string
+   */
+  std::string SerializeToXmlString (int indent, bool enableHistograms, bool enableProbes);
+
+  /**
+   * Same as SerializeToXmlStream, but writes to a file instead
+   * \param fileName name or path of the output file that will be created
+   * \param enableHistograms if true, include also the histograms in the output
+   * \param enableProbes if true, include also the per-probe/flow pair statistics in the output
+   */
+  void SerializeToXmlFile (std::string fileName, bool enableHistograms, bool enableProbes);
+
 private:
-  ObjectFactory m_monitorFactory;       //!< Object factory
-  Ptr<FlowMonitor> m_flowMonitor;       //!< the FlowMonitor object
-  Ptr<FlowClassifier> m_flowClassifier; //!< the FlowClassifier object
+  /**
+   * \brief Copy constructor
+   *
+   * Defined and unimplemented to avoid misuse
+   */
+  FlowMonitorHelper (const FlowMonitorHelper&);
+  /**
+   * \brief Copy constructor
+   *
+   * Defined and unimplemented to avoid misuse
+   * \returns
+   */
+  FlowMonitorHelper& operator= (const FlowMonitorHelper&);
+
+  ObjectFactory m_monitorFactory;        //!< Object factory
+  Ptr<FlowMonitor> m_flowMonitor;        //!< the FlowMonitor object
+  Ptr<FlowClassifier> m_flowClassifier4; //!< the FlowClassifier object for IPv4
+  Ptr<FlowClassifier> m_flowClassifier6; //!< the FlowClassifier object for IPv6
 };
 
 } // namespace ns3
diff -Naur ns-3.19/src/flow-monitor/model/flow-classifier.h ns-3.20/src/flow-monitor/model/flow-classifier.h
--- ns-3.19/src/flow-monitor/model/flow-classifier.h	2014-06-17 10:34:00.429636731 -0700
+++ ns-3.20/src/flow-monitor/model/flow-classifier.h	2014-06-17 10:33:13.747997088 -0700
@@ -41,7 +41,7 @@
 
 /// \ingroup flow-monitor
 /// Provides a method to translate raw packet data into abstract
-/// ``flow identifier'' and ``packet identifier'' parameters.  These
+/// `flow identifier` and `packet identifier` parameters.  These
 /// identifiers are unsigned 32-bit integers that uniquely identify a
 /// flow and a packet within that flow, respectively, for the whole
 /// simulation, regardless of the point in which the packet was
diff -Naur ns-3.19/src/flow-monitor/model/flow-monitor.cc ns-3.20/src/flow-monitor/model/flow-monitor.cc
--- ns-3.19/src/flow-monitor/model/flow-monitor.cc	2014-06-17 10:34:00.429636731 -0700
+++ ns-3.20/src/flow-monitor/model/flow-monitor.cc	2014-06-17 10:33:13.747997088 -0700
@@ -31,11 +31,9 @@
 
 namespace ns3 {
 
-NS_LOG_COMPONENT_DEFINE ("FlowMonitor")
-  ;
+NS_LOG_COMPONENT_DEFINE ("FlowMonitor");
 
-NS_OBJECT_ENSURE_REGISTERED (FlowMonitor)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (FlowMonitor);
 
 
 TypeId 
@@ -92,7 +90,12 @@
 void
 FlowMonitor::DoDispose (void)
 {
-  m_classifier = 0;
+  for (std::list<Ptr<FlowClassifier> >::iterator iter = m_classifiers.begin ();
+      iter != m_classifiers.end ();
+      iter ++)
+    {
+      *iter = 0;
+    }
   for (uint32_t i = 0; i < m_flowProbes.size (); i++)
     {
       m_flowProbes[i]->Dispose ();
@@ -391,9 +394,9 @@
 }
 
 void
-FlowMonitor::SetFlowClassifier (Ptr<FlowClassifier> classifier)
+FlowMonitor::AddFlowClassifier (Ptr<FlowClassifier> classifier)
 {
-  m_classifier = classifier;
+  m_classifiers.push_back (classifier);
 }
 
 void
@@ -458,7 +461,12 @@
   indent -= 2;
   INDENT (indent); os << "</FlowStats>\n";
 
-  m_classifier->SerializeToXmlStream (os, indent);
+  for (std::list<Ptr<FlowClassifier> >::iterator iter = m_classifiers.begin ();
+      iter != m_classifiers.end ();
+      iter ++)
+    {
+      (*iter)->SerializeToXmlStream (os, indent);
+    }
 
   if (enableProbes)
     {
diff -Naur ns-3.19/src/flow-monitor/model/flow-monitor.h ns-3.20/src/flow-monitor/model/flow-monitor.h
--- ns-3.19/src/flow-monitor/model/flow-monitor.h	2014-06-17 10:34:00.430636723 -0700
+++ ns-3.20/src/flow-monitor/model/flow-monitor.h	2014-06-17 10:33:13.748997081 -0700
@@ -146,9 +146,9 @@
   TypeId GetInstanceTypeId () const;
   FlowMonitor ();
 
-  /// Set the FlowClassifier to be used by the flow monitor.
+  /// Add a FlowClassifier to be used by the flow monitor.
   /// \param classifier the FlowClassifier
-  void SetFlowClassifier (Ptr<FlowClassifier> classifier);
+  void AddFlowClassifier (Ptr<FlowClassifier> classifier);
 
   /// Set the time, counting from the current time, from which to start monitoring flows.
   /// \param time delta time to start
@@ -266,7 +266,7 @@
   std::vector< Ptr<FlowProbe> > m_flowProbes; //!< all the FlowProbes
 
   // note: this is needed only for serialization
-  Ptr<FlowClassifier> m_classifier; //!< the FlowClassifier
+  std::list<Ptr<FlowClassifier> > m_classifiers; //!< the FlowClassifiers
 
   EventId m_startEvent;     //!< Start event
   EventId m_stopEvent;      //!< Stop event
diff -Naur ns-3.19/src/flow-monitor/model/histogram.cc ns-3.20/src/flow-monitor/model/histogram.cc
--- ns-3.19/src/flow-monitor/model/histogram.cc	2014-06-17 10:34:00.431636715 -0700
+++ ns-3.20/src/flow-monitor/model/histogram.cc	2014-06-17 10:33:13.749997073 -0700
@@ -30,8 +30,7 @@
 
 namespace ns3 {
 
-NS_LOG_COMPONENT_DEFINE ("Histogram")
-  ;
+NS_LOG_COMPONENT_DEFINE ("Histogram");
  
 // uint32_t 
 // Histogram::GetSize () const
diff -Naur ns-3.19/src/flow-monitor/model/ipv4-flow-classifier.cc ns-3.20/src/flow-monitor/model/ipv4-flow-classifier.cc
--- ns-3.19/src/flow-monitor/model/ipv4-flow-classifier.cc	2014-06-17 10:34:00.432636708 -0700
+++ ns-3.20/src/flow-monitor/model/ipv4-flow-classifier.cc	2014-06-17 10:33:13.750997065 -0700
@@ -103,12 +103,6 @@
 Ipv4FlowClassifier::Classify (const Ipv4Header &ipHeader, Ptr<const Packet> ipPayload,
                               uint32_t *out_flowId, uint32_t *out_packetId)
 {
-  if (ipHeader.GetDestination () == Ipv4Address::GetBroadcast ())
-    {
-      // we are not prepared to handle broadcast yet
-      return false;
-    }
-
   if (ipHeader.GetFragmentOffset () > 0 )
     {
       // Ignore fragments: they don't carry a valid L4 header
@@ -159,11 +153,17 @@
   // if the insertion succeeded, we need to assign this tuple a new flow identifier
   if (insert.second)
     {
-      insert.first->second = GetNewFlowId ();
+      FlowId newFlowId = GetNewFlowId ();
+      insert.first->second = newFlowId;
+      m_flowPktIdMap[newFlowId] = 0;
+    }
+  else
+    {
+      m_flowPktIdMap[insert.first->second] ++;
     }
 
   *out_flowId = insert.first->second;
-  *out_packetId = ipHeader.GetIdentification ();
+  *out_packetId = m_flowPktIdMap[*out_flowId];
 
   return true;
 }
diff -Naur ns-3.19/src/flow-monitor/model/ipv4-flow-classifier.h ns-3.20/src/flow-monitor/model/ipv4-flow-classifier.h
--- ns-3.19/src/flow-monitor/model/ipv4-flow-classifier.h	2014-06-17 10:34:00.432636708 -0700
+++ ns-3.20/src/flow-monitor/model/ipv4-flow-classifier.h	2014-06-17 10:33:13.750997065 -0700
@@ -52,6 +52,9 @@
   Ipv4FlowClassifier ();
 
   /// \brief try to classify the packet into flow-id and packet-id
+  ///
+  /// \warning: it must be called only once per packet, from SendOutgoingLogger.
+  ///
   /// \return true if the packet was classified, false if not (i.e. it
   /// does not appear to be part of a flow).
   /// \param ipHeader packet's IP header
@@ -72,6 +75,7 @@
 
   /// Map to Flows Identifiers to FlowIds
   std::map<FiveTuple, FlowId> m_flowMap;
+  std::map<FlowId, FlowPacketId> m_flowPktIdMap;
 
 };
 
diff -Naur ns-3.19/src/flow-monitor/model/ipv4-flow-probe.cc ns-3.20/src/flow-monitor/model/ipv4-flow-probe.cc
--- ns-3.19/src/flow-monitor/model/ipv4-flow-probe.cc	2014-06-17 10:34:00.433636700 -0700
+++ ns-3.20/src/flow-monitor/model/ipv4-flow-probe.cc	2014-06-17 10:33:13.750997065 -0700
@@ -30,8 +30,7 @@
 
 namespace ns3 {
 
-NS_LOG_COMPONENT_DEFINE ("Ipv4FlowProbe")
-  ;
+NS_LOG_COMPONENT_DEFINE ("Ipv4FlowProbe");
 
 //////////////////////////////////////
 // Ipv4FlowProbeTag class implementation //
@@ -197,26 +196,26 @@
 {
   NS_LOG_FUNCTION (this << node->GetId ());
 
-  Ptr<Ipv4L3Protocol> ipv4 = node->GetObject<Ipv4L3Protocol> ();
+  m_ipv4 = node->GetObject<Ipv4L3Protocol> ();
 
-  if (!ipv4->TraceConnectWithoutContext ("SendOutgoing",
-                                         MakeCallback (&Ipv4FlowProbe::SendOutgoingLogger, Ptr<Ipv4FlowProbe> (this))))
+  if (!m_ipv4->TraceConnectWithoutContext ("SendOutgoing",
+                                           MakeCallback (&Ipv4FlowProbe::SendOutgoingLogger, Ptr<Ipv4FlowProbe> (this))))
     {
       NS_FATAL_ERROR ("trace fail");
     }
-  if (!ipv4->TraceConnectWithoutContext ("UnicastForward",
-                                         MakeCallback (&Ipv4FlowProbe::ForwardLogger, Ptr<Ipv4FlowProbe> (this))))
+  if (!m_ipv4->TraceConnectWithoutContext ("UnicastForward",
+                                           MakeCallback (&Ipv4FlowProbe::ForwardLogger, Ptr<Ipv4FlowProbe> (this))))
     {
       NS_FATAL_ERROR ("trace fail");
     }
-  if (!ipv4->TraceConnectWithoutContext ("LocalDeliver",
-                                         MakeCallback (&Ipv4FlowProbe::ForwardUpLogger, Ptr<Ipv4FlowProbe> (this))))
+  if (!m_ipv4->TraceConnectWithoutContext ("LocalDeliver",
+                                           MakeCallback (&Ipv4FlowProbe::ForwardUpLogger, Ptr<Ipv4FlowProbe> (this))))
     {
       NS_FATAL_ERROR ("trace fail");
     }
 
-  if (!ipv4->TraceConnectWithoutContext ("Drop",
-                                         MakeCallback (&Ipv4FlowProbe::DropLogger, Ptr<Ipv4FlowProbe> (this))))
+  if (!m_ipv4->TraceConnectWithoutContext ("Drop",
+                                           MakeCallback (&Ipv4FlowProbe::DropLogger, Ptr<Ipv4FlowProbe> (this))))
     {
       NS_FATAL_ERROR ("trace fail");
     }
@@ -234,6 +233,8 @@
 void
 Ipv4FlowProbe::DoDispose ()
 {
+  m_ipv4 = 0;
+  m_classifier = 0;
   FlowProbe::DoDispose ();
 }
 
@@ -243,6 +244,12 @@
   FlowId flowId;
   FlowPacketId packetId;
 
+  if (!m_ipv4->IsUnicast(ipHeader.GetDestination ()))
+    {
+      // we are not prepared to handle broadcast yet
+      return;
+    }
+
   if (m_classifier->Classify (ipHeader, ipPayload, &flowId, &packetId))
     {
       uint32_t size = (ipPayload->GetSize () + ipHeader.GetSerializedSize ());
@@ -260,31 +267,35 @@
 void
 Ipv4FlowProbe::ForwardLogger (const Ipv4Header &ipHeader, Ptr<const Packet> ipPayload, uint32_t interface)
 {
-  FlowId flowId;
-  FlowPacketId packetId;
+  // peek the tags that are added by Ipv4FlowProbe::SendOutgoingLogger ()
+  Ipv4FlowProbeTag fTag;
 
-  if (m_classifier->Classify (ipHeader, ipPayload, &flowId, &packetId))
+  bool found = ipPayload->PeekPacketTag (fTag);
+
+  if (found)
     {
+      FlowId flowId = fTag.GetFlowId ();
+      FlowPacketId packetId = fTag.GetPacketId ();
+
       uint32_t size = (ipPayload->GetSize () + ipHeader.GetSerializedSize ());
       NS_LOG_DEBUG ("ReportForwarding ("<<this<<", "<<flowId<<", "<<packetId<<", "<<size<<");");
       m_flowMonitor->ReportForwarding (this, flowId, packetId, size);
     }
-
 }
 
 void
 Ipv4FlowProbe::ForwardUpLogger (const Ipv4Header &ipHeader, Ptr<const Packet> ipPayload, uint32_t interface)
 {
-  FlowId flowId;
-  FlowPacketId packetId;
+  // remove the tags that are added by Ipv4FlowProbe::SendOutgoingLogger ()
+  Ipv4FlowProbeTag fTag;
 
-  if (m_classifier->Classify (ipHeader, ipPayload, &flowId, &packetId))
-    {
-      // remove the tags that are added by Ipv4FlowProbe::SendOutgoingLogger ()
-      Ipv4FlowProbeTag fTag;
+  // ConstCast: see http://www.nsnam.org/bugzilla/show_bug.cgi?id=904
+  bool found = ConstCast<Packet> (ipPayload)->RemovePacketTag (fTag);
 
-      // ConstCast: see http://www.nsnam.org/bugzilla/show_bug.cgi?id=904
-      ConstCast<Packet> (ipPayload)->RemovePacketTag (fTag);
+  if (found)
+    {
+      FlowId flowId = fTag.GetFlowId ();
+      FlowPacketId packetId = fTag.GetPacketId ();
 
       uint32_t size = (ipPayload->GetSize () + ipHeader.GetSerializedSize ());
       NS_LOG_DEBUG ("ReportLastRx ("<<this<<", "<<flowId<<", "<<packetId<<", "<<size<<");");
@@ -314,16 +325,16 @@
     }
 #endif
 
-  FlowId flowId;
-  FlowPacketId packetId;
+  // remove the tags that are added by Ipv4FlowProbe::SendOutgoingLogger ()
+  Ipv4FlowProbeTag fTag;
 
-  if (m_classifier->Classify (ipHeader, ipPayload, &flowId, &packetId))
-    {
-      // remove the tags that are added by Ipv4FlowProbe::SendOutgoingLogger ()
-      Ipv4FlowProbeTag fTag;
+  // ConstCast: see http://www.nsnam.org/bugzilla/show_bug.cgi?id=904
+  bool found = ConstCast<Packet> (ipPayload)->RemovePacketTag (fTag);
 
-      // ConstCast: see http://www.nsnam.org/bugzilla/show_bug.cgi?id=904
-      ConstCast<Packet> (ipPayload)->RemovePacketTag (fTag);
+  if (found)
+    {
+      FlowId flowId = fTag.GetFlowId ();
+      FlowPacketId packetId = fTag.GetPacketId ();
 
       uint32_t size = (ipPayload->GetSize () + ipHeader.GetSerializedSize ());
       NS_LOG_DEBUG ("Drop ("<<this<<", "<<flowId<<", "<<packetId<<", "<<size<<", " << reason 
@@ -376,8 +387,7 @@
   Ipv4FlowProbeTag fTag;
 
   // ConstCast: see http://www.nsnam.org/bugzilla/show_bug.cgi?id=904
-  bool tagFound;
-  tagFound = ConstCast<Packet> (ipPayload)->RemovePacketTag (fTag);
+  bool tagFound = ConstCast<Packet> (ipPayload)->RemovePacketTag (fTag);
   if (!tagFound)
     {
       return;
diff -Naur ns-3.19/src/flow-monitor/model/ipv4-flow-probe.h ns-3.20/src/flow-monitor/model/ipv4-flow-probe.h
--- ns-3.19/src/flow-monitor/model/ipv4-flow-probe.h	2014-06-17 10:34:00.433636700 -0700
+++ ns-3.20/src/flow-monitor/model/ipv4-flow-probe.h	2014-06-17 10:33:13.751997058 -0700
@@ -106,6 +106,7 @@
   void QueueDropLogger (Ptr<const Packet> ipPayload);
 
   Ptr<Ipv4FlowClassifier> m_classifier; //!< the Ipv4FlowClassifier this probe is associated with
+  Ptr<Ipv4L3Protocol> m_ipv4; //!< the Ipv4L3Protocol this probe is bound to
 };
 
 
diff -Naur ns-3.19/src/flow-monitor/model/ipv6-flow-classifier.cc ns-3.20/src/flow-monitor/model/ipv6-flow-classifier.cc
--- ns-3.19/src/flow-monitor/model/ipv6-flow-classifier.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.20/src/flow-monitor/model/ipv6-flow-classifier.cc	2014-06-17 10:33:13.751997058 -0700
@@ -0,0 +1,218 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+//
+// Copyright (c) 2009 INESC Porto
+//
+// 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: Gustavo J. A. M. Carneiro  <gjc@inescporto.pt> <gjcarneiro@gmail.com>
+// Modifications: Tommaso Pecorella <tommaso.pecorella@unifi.it>
+//
+
+#include "ns3/packet.h"
+
+#include "ipv6-flow-classifier.h"
+#include "ns3/udp-header.h"
+#include "ns3/tcp-header.h"
+
+namespace ns3 {
+
+/* see http://www.iana.org/assignments/protocol-numbers */
+const uint8_t TCP_PROT_NUMBER = 6;  //!< TCP Protocol number
+const uint8_t UDP_PROT_NUMBER = 17; //!< UDP Protocol number
+
+
+
+bool operator < (const Ipv6FlowClassifier::FiveTuple &t1,
+                 const Ipv6FlowClassifier::FiveTuple &t2)
+{
+  if (t1.sourceAddress < t2.sourceAddress)
+    {
+      return true;
+    }
+  if (t1.sourceAddress != t2.sourceAddress)
+    {
+      return false;
+    }
+
+  if (t1.destinationAddress < t2.destinationAddress)
+    {
+      return true;
+    }
+  if (t1.destinationAddress != t2.destinationAddress)
+    {
+      return false;
+    }
+
+  if (t1.protocol < t2.protocol)
+    {
+      return true;
+    }
+  if (t1.protocol != t2.protocol)
+    {
+      return false;
+    }
+
+  if (t1.sourcePort < t2.sourcePort)
+    {
+      return true;
+    }
+  if (t1.sourcePort != t2.sourcePort)
+    {
+      return false;
+    }
+
+  if (t1.destinationPort < t2.destinationPort)
+    {
+      return true;
+    }
+  if (t1.destinationPort != t2.destinationPort)
+    {
+      return false;
+    }
+
+  return false;
+}
+
+bool operator == (const Ipv6FlowClassifier::FiveTuple &t1,
+                  const Ipv6FlowClassifier::FiveTuple &t2)
+{
+  return (t1.sourceAddress      == t2.sourceAddress &&
+          t1.destinationAddress == t2.destinationAddress &&
+          t1.protocol           == t2.protocol &&
+          t1.sourcePort         == t2.sourcePort &&
+          t1.destinationPort    == t2.destinationPort);
+}
+
+
+
+Ipv6FlowClassifier::Ipv6FlowClassifier ()
+{
+}
+
+bool
+Ipv6FlowClassifier::Classify (const Ipv6Header &ipHeader, Ptr<const Packet> ipPayload,
+                              uint32_t *out_flowId, uint32_t *out_packetId)
+{
+  if (ipHeader.GetDestinationAddress ().IsMulticast ())
+    {
+      // we are not prepared to handle multicast yet
+      return false;
+    }
+
+  FiveTuple tuple;
+  tuple.sourceAddress = ipHeader.GetSourceAddress ();
+  tuple.destinationAddress = ipHeader.GetDestinationAddress ();
+  tuple.protocol = ipHeader.GetNextHeader ();
+
+  if ((tuple.protocol != UDP_PROT_NUMBER) && (tuple.protocol != TCP_PROT_NUMBER))
+    {
+      return false;
+    }
+
+  if (ipPayload->GetSize () < 4)
+    {
+      // the packet doesn't carry enough bytes
+      return false;
+    }
+
+  // we rely on the fact that for both TCP and UDP the ports are
+  // carried in the first 4 octects.
+  // This allows to read the ports even on fragmented packets
+  // not carrying a full TCP or UDP header.
+
+  uint8_t data[4];
+  ipPayload->CopyData (data, 4);
+
+  uint16_t srcPort = 0;
+  srcPort |= data[0];
+  srcPort <<= 8;
+  srcPort |= data[1];
+
+  uint16_t dstPort = 0;
+  dstPort |= data[2];
+  dstPort <<= 8;
+  dstPort |= data[3];
+
+  tuple.sourcePort = srcPort;
+  tuple.destinationPort = dstPort;
+
+  // try to insert the tuple, but check if it already exists
+  std::pair<std::map<FiveTuple, FlowId>::iterator, bool> insert
+    = m_flowMap.insert (std::pair<FiveTuple, FlowId> (tuple, 0));
+
+  // if the insertion succeeded, we need to assign this tuple a new flow identifier
+  if (insert.second)
+    {
+      FlowId newFlowId = GetNewFlowId ();
+      insert.first->second = newFlowId;
+      m_flowPktIdMap[newFlowId] = 0;
+    }
+  else
+    {
+      m_flowPktIdMap[insert.first->second] ++;
+    }
+
+  *out_flowId = insert.first->second;
+  *out_packetId = m_flowPktIdMap[*out_flowId];
+
+  return true;
+}
+
+
+Ipv6FlowClassifier::FiveTuple
+Ipv6FlowClassifier::FindFlow (FlowId flowId) const
+{
+  for (std::map<FiveTuple, FlowId>::const_iterator
+       iter = m_flowMap.begin (); iter != m_flowMap.end (); iter++)
+    {
+      if (iter->second == flowId)
+        {
+          return iter->first;
+        }
+    }
+  NS_FATAL_ERROR ("Could not find the flow with ID " << flowId);
+  FiveTuple retval = { Ipv6Address::GetZero (), Ipv6Address::GetZero (), 0, 0, 0 };
+  return retval;
+}
+
+void
+Ipv6FlowClassifier::SerializeToXmlStream (std::ostream &os, int indent) const
+{
+#define INDENT(level) for (int __xpto = 0; __xpto < level; __xpto++) os << ' ';
+
+  INDENT (indent); os << "<Ipv6FlowClassifier>\n";
+
+  indent += 2;
+  for (std::map<FiveTuple, FlowId>::const_iterator
+       iter = m_flowMap.begin (); iter != m_flowMap.end (); iter++)
+    {
+      INDENT (indent);
+      os << "<Flow flowId=\"" << iter->second << "\""
+         << " sourceAddress=\"" << iter->first.sourceAddress << "\""
+         << " destinationAddress=\"" << iter->first.destinationAddress << "\""
+         << " protocol=\"" << int(iter->first.protocol) << "\""
+         << " sourcePort=\"" << iter->first.sourcePort << "\""
+         << " destinationPort=\"" << iter->first.destinationPort << "\""
+         << " />\n";
+    }
+
+  indent -= 2;
+  INDENT (indent); os << "</Ipv6FlowClassifier>\n";
+
+#undef INDENT
+}
+
+
+} // namespace ns3
+
diff -Naur ns-3.19/src/flow-monitor/model/ipv6-flow-classifier.h ns-3.20/src/flow-monitor/model/ipv6-flow-classifier.h
--- ns-3.19/src/flow-monitor/model/ipv6-flow-classifier.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.20/src/flow-monitor/model/ipv6-flow-classifier.h	2014-06-17 10:33:13.751997058 -0700
@@ -0,0 +1,104 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+//
+// Copyright (c) 2009 INESC Porto
+//
+// 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: Gustavo J. A. M. Carneiro  <gjc@inescporto.pt> <gjcarneiro@gmail.com>
+// Modifications: Tommaso Pecorella <tommaso.pecorella@unifi.it>
+//
+
+#ifndef IPV6_FLOW_CLASSIFIER_H
+#define IPV6_FLOW_CLASSIFIER_H
+
+#include <stdint.h>
+#include <map>
+
+#include "ns3/ipv6-header.h"
+#include "ns3/flow-classifier.h"
+
+namespace ns3 {
+
+class Packet;
+
+/// Classifies packets by looking at their IP and TCP/UDP headers.
+/// From these packet headers, a tuple (source-ip, destination-ip,
+/// protocol, source-port, destination-port) is created, and a unique
+/// flow identifier is assigned for each different tuple combination
+class Ipv6FlowClassifier : public FlowClassifier
+{
+public:
+
+  /// Structure to classify a packet
+  struct FiveTuple
+  {
+    Ipv6Address sourceAddress;      //!< Source address
+    Ipv6Address destinationAddress; //!< Destination address
+    uint8_t protocol;               //!< Protocol
+    uint16_t sourcePort;            //!< Source port
+    uint16_t destinationPort;       //!< Destination port
+  };
+
+  Ipv6FlowClassifier ();
+
+  /// \brief try to classify the packet into flow-id and packet-id
+  ///
+  /// \warning: it must be called only once per packet, from SendOutgoingLogger.
+  ///
+  /// \return true if the packet was classified, false if not (i.e. it
+  /// does not appear to be part of a flow).
+  /// \param ipHeader packet's IP header
+  /// \param ipPayload packet's IP payload
+  /// \param out_flowId packet's FlowId
+  /// \param out_packetId packet's identifier
+  bool Classify (const Ipv6Header &ipHeader, Ptr<const Packet> ipPayload,
+                 uint32_t *out_flowId, uint32_t *out_packetId);
+
+  /// Searches for the FiveTuple corresponding to the given flowId
+  /// \param flowId the FlowId to search for
+  /// \returns the FiveTuple corresponding to flowId
+  FiveTuple FindFlow (FlowId flowId) const;
+
+  virtual void SerializeToXmlStream (std::ostream &os, int indent) const;
+
+private:
+
+  /// Map to Flows Identifiers to FlowIds
+  std::map<FiveTuple, FlowId> m_flowMap;
+  std::map<FlowId, FlowPacketId> m_flowPktIdMap;
+
+};
+
+/**
+ * \brief Less than operator.
+ *
+ * \param t1 the first operand
+ * \param t2 the first operand
+ * \returns true if the operands are equal
+ */
+bool operator < (const Ipv6FlowClassifier::FiveTuple &t1, const Ipv6FlowClassifier::FiveTuple &t2);
+
+/**
+ * \brief Equal to operator.
+ *
+ * \param t1 the first operand
+ * \param t2 the first operand
+ * \returns true if the operands are equal
+ */
+bool operator == (const Ipv6FlowClassifier::FiveTuple &t1, const Ipv6FlowClassifier::FiveTuple &t2);
+
+
+} // namespace ns3
+
+#endif /* IPV6_FLOW_CLASSIFIER_H */
diff -Naur ns-3.19/src/flow-monitor/model/ipv6-flow-probe.cc ns-3.20/src/flow-monitor/model/ipv6-flow-probe.cc
--- ns-3.19/src/flow-monitor/model/ipv6-flow-probe.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.20/src/flow-monitor/model/ipv6-flow-probe.cc	2014-06-17 10:33:13.752997050 -0700
@@ -0,0 +1,409 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+//
+// Copyright (c) 2009 INESC Porto
+//
+// 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: Gustavo J. A. M. Carneiro  <gjc@inescporto.pt> <gjcarneiro@gmail.com>
+// Modifications: Tommaso Pecorella <tommaso.pecorella@unifi.it>
+//
+
+#include "ns3/ipv6-flow-probe.h"
+#include "ns3/ipv6-flow-classifier.h"
+#include "ns3/node.h"
+#include "ns3/packet.h"
+#include "ns3/flow-monitor.h"
+#include "ns3/log.h"
+#include "ns3/pointer.h"
+#include "ns3/config.h"
+#include "ns3/flow-id-tag.h"
+
+namespace ns3 {
+
+NS_LOG_COMPONENT_DEFINE ("Ipv6FlowProbe")
+  ;
+
+//////////////////////////////////////
+// Ipv6FlowProbeTag class implementation //
+//////////////////////////////////////
+
+/**
+ * \ingroup flow-monitor
+ *
+ * \brief Tag used to allow a fast identification of the packet
+ *
+ * This tag is added by FlowMonitor when a packet is seen for
+ * the first time, and it is then used to classify the packet in
+ * the following hops.
+ */
+class Ipv6FlowProbeTag : public Tag
+{
+public:
+  /**
+   * \brief Get the type ID.
+   * \return the object TypeId
+   */
+  static TypeId GetTypeId (void);
+  virtual TypeId GetInstanceTypeId (void) const;
+  virtual uint32_t GetSerializedSize (void) const;
+  virtual void Serialize (TagBuffer buf) const;
+  virtual void Deserialize (TagBuffer buf);
+  virtual void Print (std::ostream &os) const;
+  Ipv6FlowProbeTag ();
+  /**
+   * \brief Consructor
+   * \param flowId the flow identifier
+   * \param packetId the packet identifier
+   * \param packetSize the packet size
+   */
+  Ipv6FlowProbeTag (uint32_t flowId, uint32_t packetId, uint32_t packetSize);
+  /**
+   * \brief Set the flow identifier
+   * \param flowId the flow identifier
+   */
+  void SetFlowId (uint32_t flowId);
+  /**
+   * \brief Set the packet identifier
+   * \param packetId the packet identifier
+   */
+  void SetPacketId (uint32_t packetId);
+  /**
+   * \brief Set the packet size
+   * \param packetSize the packet size
+   */
+  void SetPacketSize (uint32_t packetSize);
+  /**
+   * \brief Set the flow identifier
+   * \returns the flow identifier
+   */
+  uint32_t GetFlowId (void) const;
+  /**
+   * \brief Set the packet identifier
+   * \returns the packet identifier
+   */
+  uint32_t GetPacketId (void) const;
+  /**
+   * \brief Get the packet size
+   * \returns the packet size
+   */
+  uint32_t GetPacketSize (void) const;
+private:
+  uint32_t m_flowId;      //!< flow identifier
+  uint32_t m_packetId;    //!< packet identifier
+  uint32_t m_packetSize;  //!< packet size
+
+};
+
+TypeId 
+Ipv6FlowProbeTag::GetTypeId (void)
+{
+  static TypeId tid = TypeId ("ns3::Ipv6FlowProbeTag")
+    .SetParent<Tag> ()
+    .AddConstructor<Ipv6FlowProbeTag> ()
+  ;
+  return tid;
+}
+TypeId 
+Ipv6FlowProbeTag::GetInstanceTypeId (void) const
+{
+  return GetTypeId ();
+}
+uint32_t 
+Ipv6FlowProbeTag::GetSerializedSize (void) const
+{
+  return 4 + 4 + 4;
+}
+void 
+Ipv6FlowProbeTag::Serialize (TagBuffer buf) const
+{
+  buf.WriteU32 (m_flowId);
+  buf.WriteU32 (m_packetId);
+  buf.WriteU32 (m_packetSize);
+}
+void 
+Ipv6FlowProbeTag::Deserialize (TagBuffer buf)
+{
+  m_flowId = buf.ReadU32 ();
+  m_packetId = buf.ReadU32 ();
+  m_packetSize = buf.ReadU32 ();
+}
+void 
+Ipv6FlowProbeTag::Print (std::ostream &os) const
+{
+  os << "FlowId=" << m_flowId;
+  os << "PacketId=" << m_packetId;
+  os << "PacketSize=" << m_packetSize;
+}
+Ipv6FlowProbeTag::Ipv6FlowProbeTag ()
+  : Tag () 
+{
+}
+
+Ipv6FlowProbeTag::Ipv6FlowProbeTag (uint32_t flowId, uint32_t packetId, uint32_t packetSize)
+  : Tag (), m_flowId (flowId), m_packetId (packetId), m_packetSize (packetSize)
+{
+}
+
+void
+Ipv6FlowProbeTag::SetFlowId (uint32_t id)
+{
+  m_flowId = id;
+}
+void
+Ipv6FlowProbeTag::SetPacketId (uint32_t id)
+{
+  m_packetId = id;
+}
+void
+Ipv6FlowProbeTag::SetPacketSize (uint32_t size)
+{
+  m_packetSize = size;
+}
+uint32_t
+Ipv6FlowProbeTag::GetFlowId (void) const
+{
+  return m_flowId;
+}
+uint32_t
+Ipv6FlowProbeTag::GetPacketId (void) const
+{
+  return m_packetId;
+} 
+uint32_t
+Ipv6FlowProbeTag::GetPacketSize (void) const
+{
+  return m_packetSize;
+} 
+
+////////////////////////////////////////
+// Ipv6FlowProbe class implementation //
+////////////////////////////////////////
+
+Ipv6FlowProbe::Ipv6FlowProbe (Ptr<FlowMonitor> monitor,
+                              Ptr<Ipv6FlowClassifier> classifier,
+                              Ptr<Node> node)
+  : FlowProbe (monitor),
+    m_classifier (classifier)
+{
+  NS_LOG_FUNCTION (this << node->GetId ());
+
+  Ptr<Ipv6L3Protocol> ipv6 = node->GetObject<Ipv6L3Protocol> ();
+
+  if (!ipv6->TraceConnectWithoutContext ("SendOutgoing",
+                                         MakeCallback (&Ipv6FlowProbe::SendOutgoingLogger, Ptr<Ipv6FlowProbe> (this))))
+    {
+      NS_FATAL_ERROR ("trace fail");
+    }
+  if (!ipv6->TraceConnectWithoutContext ("UnicastForward",
+                                         MakeCallback (&Ipv6FlowProbe::ForwardLogger, Ptr<Ipv6FlowProbe> (this))))
+    {
+      NS_FATAL_ERROR ("trace fail");
+    }
+  if (!ipv6->TraceConnectWithoutContext ("LocalDeliver",
+                                         MakeCallback (&Ipv6FlowProbe::ForwardUpLogger, Ptr<Ipv6FlowProbe> (this))))
+    {
+      NS_FATAL_ERROR ("trace fail");
+    }
+
+  if (!ipv6->TraceConnectWithoutContext ("Drop",
+                                         MakeCallback (&Ipv6FlowProbe::DropLogger, Ptr<Ipv6FlowProbe> (this))))
+    {
+      NS_FATAL_ERROR ("trace fail");
+    }
+
+  // code copied from point-to-point-helper.cc
+  std::ostringstream oss;
+  oss << "/NodeList/" << node->GetId () << "/DeviceList/*/TxQueue/Drop";
+  Config::ConnectWithoutContext (oss.str (), MakeCallback (&Ipv6FlowProbe::QueueDropLogger, Ptr<Ipv6FlowProbe> (this)));
+}
+
+Ipv6FlowProbe::~Ipv6FlowProbe ()
+{
+}
+
+void
+Ipv6FlowProbe::DoDispose ()
+{
+  FlowProbe::DoDispose ();
+}
+
+void
+Ipv6FlowProbe::SendOutgoingLogger (const Ipv6Header &ipHeader, Ptr<const Packet> ipPayload, uint32_t interface)
+{
+  FlowId flowId;
+  FlowPacketId packetId;
+
+  if (m_classifier->Classify (ipHeader, ipPayload, &flowId, &packetId))
+    {
+      uint32_t size = (ipPayload->GetSize () + ipHeader.GetSerializedSize ());
+      NS_LOG_DEBUG ("ReportFirstTx ("<<this<<", "<<flowId<<", "<<packetId<<", "<<size<<"); "
+                                     << ipHeader << *ipPayload);
+      m_flowMonitor->ReportFirstTx (this, flowId, packetId, size);
+
+      // tag the packet with the flow id and packet id, so that the packet can be identified even
+      // when Ipv6Header is not accessible at some non-IPv6 protocol layer
+      Ipv6FlowProbeTag fTag (flowId, packetId, size);
+      ipPayload->AddPacketTag (fTag);
+    }
+}
+
+void
+Ipv6FlowProbe::ForwardLogger (const Ipv6Header &ipHeader, Ptr<const Packet> ipPayload, uint32_t interface)
+{
+  // peek the tags that are added by Ipv6FlowProbe::SendOutgoingLogger ()
+  Ipv6FlowProbeTag fTag;
+
+  bool found = ipPayload->PeekPacketTag (fTag);
+
+  if (found)
+    {
+      FlowId flowId = fTag.GetFlowId ();
+      FlowPacketId packetId = fTag.GetPacketId ();
+
+      uint32_t size = (ipPayload->GetSize () + ipHeader.GetSerializedSize ());
+      NS_LOG_DEBUG ("ReportForwarding ("<<this<<", "<<flowId<<", "<<packetId<<", "<<size<<");");
+      m_flowMonitor->ReportForwarding (this, flowId, packetId, size);
+    }
+}
+
+void
+Ipv6FlowProbe::ForwardUpLogger (const Ipv6Header &ipHeader, Ptr<const Packet> ipPayload, uint32_t interface)
+{
+  // remove the tags that are added by Ipv6FlowProbe::SendOutgoingLogger ()
+  Ipv6FlowProbeTag fTag;
+
+  // ConstCast: see http://www.nsnam.org/bugzilla/show_bug.cgi?id=904
+  bool found = ConstCast<Packet> (ipPayload)->RemovePacketTag (fTag);
+
+  if (found)
+    {
+      FlowId flowId = fTag.GetFlowId ();
+      FlowPacketId packetId = fTag.GetPacketId ();
+
+      uint32_t size = (ipPayload->GetSize () + ipHeader.GetSerializedSize ());
+      NS_LOG_DEBUG ("ReportLastRx ("<<this<<", "<<flowId<<", "<<packetId<<", "<<size<<");");
+      m_flowMonitor->ReportLastRx (this, flowId, packetId, size);
+    }
+}
+
+void
+Ipv6FlowProbe::DropLogger (const Ipv6Header &ipHeader, Ptr<const Packet> ipPayload,
+                           Ipv6L3Protocol::DropReason reason, Ptr<Ipv6> ipv6, uint32_t ifIndex)
+{
+#if 0
+  switch (reason)
+    {
+    case Ipv6L3Protocol::DROP_NO_ROUTE:
+      break;
+
+    case Ipv6L3Protocol::DROP_TTL_EXPIRED:
+    case Ipv6L3Protocol::DROP_BAD_CHECKSUM:
+      Ipv6Address addri = m_ipv6->GetAddress (ifIndex);
+      Ipv6Mask maski = m_ipv6->GetNetworkMask (ifIndex);
+      Ipv6Address bcast = addri.GetSubnetDirectedBroadcast (maski);
+      if (ipHeader.GetDestination () == bcast) // we don't want broadcast packets
+        {
+          return;
+        }
+    }
+#endif
+
+  // remove the tags that are added by Ipv6FlowProbe::SendOutgoingLogger ()
+  Ipv6FlowProbeTag fTag;
+
+  // ConstCast: see http://www.nsnam.org/bugzilla/show_bug.cgi?id=904
+  bool found = ConstCast<Packet> (ipPayload)->RemovePacketTag (fTag);
+
+  if (found)
+    {
+      FlowId flowId = fTag.GetFlowId ();
+      FlowPacketId packetId = fTag.GetPacketId ();
+
+      uint32_t size = (ipPayload->GetSize () + ipHeader.GetSerializedSize ());
+      NS_LOG_DEBUG ("Drop ("<<this<<", "<<flowId<<", "<<packetId<<", "<<size<<", " << reason 
+                            << ", destIp=" << ipHeader.GetDestinationAddress () << "); "
+                            << "HDR: " << ipHeader << " PKT: " << *ipPayload);
+
+      DropReason myReason;
+
+
+      switch (reason)
+        {
+        case Ipv6L3Protocol::DROP_TTL_EXPIRED:
+          myReason = DROP_TTL_EXPIRE;
+          NS_LOG_DEBUG ("DROP_TTL_EXPIRE");
+          break;
+        case Ipv6L3Protocol::DROP_NO_ROUTE:
+          myReason = DROP_NO_ROUTE;
+          NS_LOG_DEBUG ("DROP_NO_ROUTE");
+          break;
+        case Ipv6L3Protocol::DROP_INTERFACE_DOWN:
+          myReason = DROP_INTERFACE_DOWN;
+          NS_LOG_DEBUG ("DROP_INTERFACE_DOWN");
+          break;
+        case Ipv6L3Protocol::DROP_ROUTE_ERROR:
+           myReason = DROP_ROUTE_ERROR;
+           NS_LOG_DEBUG ("DROP_ROUTE_ERROR");
+           break;
+        case Ipv6L3Protocol::DROP_UNKNOWN_PROTOCOL:
+           myReason = DROP_UNKNOWN_PROTOCOL;
+           NS_LOG_DEBUG ("DROP_UNKNOWN_PROTOCOL");
+           break;
+        case Ipv6L3Protocol::DROP_UNKNOWN_OPTION:
+           myReason = DROP_UNKNOWN_OPTION;
+           NS_LOG_DEBUG ("DROP_UNKNOWN_OPTION");
+           break;
+        case Ipv6L3Protocol::DROP_MALFORMED_HEADER:
+           myReason = DROP_MALFORMED_HEADER;
+           NS_LOG_DEBUG ("DROP_MALFORMED_HEADER");
+           break;
+        case Ipv6L3Protocol::DROP_FRAGMENT_TIMEOUT:
+          myReason = DROP_FRAGMENT_TIMEOUT;
+          NS_LOG_DEBUG ("DROP_FRAGMENT_TIMEOUT");
+          break;
+        default:
+          myReason = DROP_INVALID_REASON;
+          NS_FATAL_ERROR ("Unexpected drop reason code " << reason);
+        }
+
+      m_flowMonitor->ReportDrop (this, flowId, packetId, size, myReason);
+    }
+}
+
+void 
+Ipv6FlowProbe::QueueDropLogger (Ptr<const Packet> ipPayload)
+{
+  // remove the tags that are added by Ipv6FlowProbe::SendOutgoingLogger ()
+  Ipv6FlowProbeTag fTag;
+
+  // ConstCast: see http://www.nsnam.org/bugzilla/show_bug.cgi?id=904
+  bool tagFound = ConstCast<Packet> (ipPayload)->RemovePacketTag (fTag);
+  if (!tagFound)
+    {
+      return;
+    }
+
+  FlowId flowId = fTag.GetFlowId ();
+  FlowPacketId packetId = fTag.GetPacketId ();
+  uint32_t size = fTag.GetPacketSize ();
+
+  NS_LOG_DEBUG ("Drop ("<<this<<", "<<flowId<<", "<<packetId<<", "<<size<<", " << DROP_QUEUE 
+                        << "); ");
+
+  m_flowMonitor->ReportDrop (this, flowId, packetId, size, DROP_QUEUE);
+}
+
+} // namespace ns3
+
+
diff -Naur ns-3.19/src/flow-monitor/model/ipv6-flow-probe.h ns-3.20/src/flow-monitor/model/ipv6-flow-probe.h
--- ns-3.19/src/flow-monitor/model/ipv6-flow-probe.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.20/src/flow-monitor/model/ipv6-flow-probe.h	2014-06-17 10:33:13.752997050 -0700
@@ -0,0 +1,120 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+//
+// Copyright (c) 2009 INESC Porto
+//
+// 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: Gustavo J. A. M. Carneiro  <gjc@inescporto.pt> <gjcarneiro@gmail.com>
+// Modifications: Tommaso Pecorella <tommaso.pecorella@unifi.it>
+//
+
+#ifndef IPV6_FLOW_PROBE_H
+#define IPV6_FLOW_PROBE_H
+
+#include "ns3/flow-probe.h"
+#include "ns3/ipv6-flow-classifier.h"
+#include "ns3/ipv6-l3-protocol.h"
+
+namespace ns3 {
+
+class FlowMonitor;
+class Node;
+
+/// \ingroup flow-monitor
+/// \brief Class that monitors flows at the IPv6 layer of a Node
+///
+/// For each node in the simulation, one instance of the class
+/// Ipv4FlowProbe is created to monitor that node.  Ipv4FlowProbe
+/// accomplishes this by connecting callbacks to trace sources in the
+/// Ipv6L3Protocol interface of the node.
+class Ipv6FlowProbe : public FlowProbe
+{
+
+public:
+  /// \brief Constructor
+  /// \param monitor the FlowMonitor this probe is associated with
+  /// \param classifier the Ipv4FlowClassifier this probe is associated with
+  /// \param node the Node this probe is associated with
+  Ipv6FlowProbe (Ptr<FlowMonitor> monitor, Ptr<Ipv6FlowClassifier> classifier, Ptr<Node> node);
+  virtual ~Ipv6FlowProbe ();
+
+  /// \brief enumeration of possible reasons why a packet may be dropped
+  enum DropReason 
+  {
+    /// Packet dropped due to missing route to the destination
+    DROP_NO_ROUTE = 0,
+
+    /// Packet dropped due to TTL decremented to zero during IPv4 forwarding
+    DROP_TTL_EXPIRE,
+
+    /// Packet dropped due to invalid checksum in the IPv4 header
+    DROP_BAD_CHECKSUM,
+
+    /// Packet dropped due to queue overflow.  Note: only works for
+    /// NetDevices that provide a TxQueue attribute of type Queue
+    /// with a Drop trace source.  It currently works with Csma and
+    /// PointToPoint devices, but not with WiFi or WiMax.
+    DROP_QUEUE,
+
+    DROP_INTERFACE_DOWN,   /**< Interface is down so can not send packet */
+    DROP_ROUTE_ERROR,   /**< Route error */
+
+    DROP_UNKNOWN_PROTOCOL, /**< Unknown L4 protocol */
+    DROP_UNKNOWN_OPTION, /**< Unknown option */
+    DROP_MALFORMED_HEADER, /**< Malformed header */
+
+    DROP_FRAGMENT_TIMEOUT, /**< Fragment timeout exceeded */
+
+    DROP_INVALID_REASON, /**< Fallback reason (no known reason) */
+  };
+
+protected:
+
+  virtual void DoDispose (void);
+
+private:
+  /// Log a packet being sent
+  /// \param ipHeader IP header
+  /// \param ipPayload IP payload
+  /// \param interface outgoing interface
+  void SendOutgoingLogger (const Ipv6Header &ipHeader, Ptr<const Packet> ipPayload, uint32_t interface);
+  /// Log a packet being forwarded
+  /// \param ipHeader IP header
+  /// \param ipPayload IP payload
+  /// \param interface incoming interface
+  void ForwardLogger (const Ipv6Header &ipHeader, Ptr<const Packet> ipPayload, uint32_t interface);
+  /// Log a packet being received by the destination
+  /// \param ipHeader IP header
+  /// \param ipPayload IP payload
+  /// \param interface incoming interface
+  void ForwardUpLogger (const Ipv6Header &ipHeader, Ptr<const Packet> ipPayload, uint32_t interface);
+  /// Log a packet being dropped
+  /// \param ipHeader IP header
+  /// \param ipPayload IP payload
+  /// \param reason drop reason
+  /// \param ipv6 pointer to the IP object dropping the packet
+  /// \param ifIndex interface index
+  void DropLogger (const Ipv6Header &ipHeader, Ptr<const Packet> ipPayload,
+                   Ipv6L3Protocol::DropReason reason, Ptr<Ipv6> ipv6, uint32_t ifIndex);
+  /// Log a packet being dropped by a queue
+  /// \param ipPayload IP payload
+  void QueueDropLogger (Ptr<const Packet> ipPayload);
+
+  Ptr<Ipv6FlowClassifier> m_classifier; //!< the Ipv6FlowClassifier this probe is associated with
+};
+
+
+} // namespace ns3
+
+#endif /* IPV6_FLOW_PROBE_H */
diff -Naur ns-3.19/src/flow-monitor/test/histogram-test-suite.cc ns-3.20/src/flow-monitor/test/histogram-test-suite.cc
--- ns-3.19/src/flow-monitor/test/histogram-test-suite.cc	2014-06-17 10:34:00.434636692 -0700
+++ ns-3.20/src/flow-monitor/test/histogram-test-suite.cc	2014-06-17 10:33:13.753997042 -0700
@@ -21,7 +21,7 @@
 #include "ns3/histogram.h"
 #include "ns3/test.h"
 
-namespace ns3 {
+using namespace ns3;
 
 class HistogramTestCase : public ns3::TestCase {
 private:
@@ -78,7 +78,3 @@
     AddTestCase (new HistogramTestCase (), TestCase::QUICK);
   }
 } g_HistogramTestSuite;
-
-} // namespace
-
-
diff -Naur ns-3.19/src/flow-monitor/waf ns-3.20/src/flow-monitor/waf
--- ns-3.19/src/flow-monitor/waf	2014-06-17 10:34:00.434636692 -0700
+++ ns-3.20/src/flow-monitor/waf	1969-12-31 16:00:00.000000000 -0800
@@ -1,2 +0,0 @@
-#! /bin/sh
-exec "`dirname "$0"`"/../../../waf "$@"
diff -Naur ns-3.19/src/flow-monitor/wscript ns-3.20/src/flow-monitor/wscript
--- ns-3.19/src/flow-monitor/wscript	2014-06-17 10:34:00.434636692 -0700
+++ ns-3.20/src/flow-monitor/wscript	2014-06-17 10:33:13.753997042 -0700
@@ -8,6 +8,8 @@
        'flow-probe.cc',
        'ipv4-flow-classifier.cc',
        'ipv4-flow-probe.cc',
+       'ipv6-flow-classifier.cc',
+       'ipv6-flow-probe.cc',
        'histogram.cc',	
         ]]
     obj.source.append("helper/flow-monitor-helper.cc")
@@ -25,6 +27,8 @@
        'flow-classifier.h',
        'ipv4-flow-classifier.h',
        'ipv4-flow-probe.h',
+       'ipv6-flow-classifier.h',
+       'ipv6-flow-probe.h',
        'histogram.h',
         ]]
     headers.source.append("helper/flow-monitor-helper.h")
diff -Naur ns-3.19/src/internet/bindings/modulegen__gcc_ILP32.py ns-3.20/src/internet/bindings/modulegen__gcc_ILP32.py
--- ns-3.19/src/internet/bindings/modulegen__gcc_ILP32.py	2014-06-17 10:34:00.446636600 -0700
+++ ns-3.20/src/internet/bindings/modulegen__gcc_ILP32.py	2014-06-17 10:33:13.766996942 -0700
@@ -203,13 +203,19 @@
     ## 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'], 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_PRISM_HEADER', 'DLT_IEEE802_11_RADIO', 'DLT_IEEE802_15_4'], 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]
     module.add_class('PcapHelperForIpv4', allow_subclassing=True)
     ## internet-trace-helper.h (module 'internet'): ns3::PcapHelperForIpv6 [class]
     module.add_class('PcapHelperForIpv6', allow_subclassing=True)
+    ## ripng-helper.h (module 'internet'): ns3::RipNgHelper [class]
+    module.add_class('RipNgHelper', parent=root_module['ns3::Ipv6RoutingHelper'])
+    ## ripng.h (module 'internet'): ns3::RipNgRoutingTableEntry [class]
+    module.add_class('RipNgRoutingTableEntry', parent=root_module['ns3::Ipv6RoutingTableEntry'])
+    ## ripng.h (module 'internet'): ns3::RipNgRoutingTableEntry::Status_e [enumeration]
+    module.add_enum('Status_e', ['RIPNG_VALID', 'RIPNG_INVALID'], outer_class=root_module['ns3::RipNgRoutingTableEntry'])
     ## rtt-estimator.h (module 'internet'): ns3::RttHistory [class]
     module.add_class('RttHistory')
     ## global-route-manager-impl.h (module 'internet'): ns3::SPFVertex [class]
@@ -226,6 +232,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')
     ## timer.h (module 'core'): ns3::Timer [class]
     module.add_class('Timer', import_from_module='ns.core')
     ## timer.h (module 'core'): ns3::Timer::DestroyPolicy [enumeration]
@@ -256,6 +264,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]
@@ -360,6 +370,12 @@
     module.add_class('PcapFileWrapper', import_from_module='ns.network', parent=root_module['ns3::Object'])
     ## random-variable-stream.h (module 'core'): ns3::RandomVariableStream [class]
     module.add_class('RandomVariableStream', import_from_module='ns.core', parent=root_module['ns3::Object'])
+    ## ripng-header.h (module 'internet'): ns3::RipNgHeader [class]
+    module.add_class('RipNgHeader', parent=root_module['ns3::Header'])
+    ## ripng-header.h (module 'internet'): ns3::RipNgHeader::Command_e [enumeration]
+    module.add_enum('Command_e', ['REQUEST', 'RESPONSE'], outer_class=root_module['ns3::RipNgHeader'])
+    ## ripng-header.h (module 'internet'): ns3::RipNgRte [class]
+    module.add_class('RipNgRte', parent=root_module['ns3::Header'])
     ## rtt-estimator.h (module 'internet'): ns3::RttEstimator [class]
     module.add_class('RttEstimator', parent=root_module['ns3::Object'])
     ## rtt-estimator.h (module 'internet'): ns3::RttMeanDeviation [class]
@@ -597,7 +613,7 @@
     ## ipv6-l3-protocol.h (module 'internet'): ns3::Ipv6L3Protocol [class]
     module.add_class('Ipv6L3Protocol', parent=root_module['ns3::Ipv6'])
     ## ipv6-l3-protocol.h (module 'internet'): ns3::Ipv6L3Protocol::DropReason [enumeration]
-    module.add_enum('DropReason', ['DROP_TTL_EXPIRED', 'DROP_NO_ROUTE', 'DROP_INTERFACE_DOWN', 'DROP_ROUTE_ERROR', 'DROP_UNKNOWN_PROTOCOL'], outer_class=root_module['ns3::Ipv6L3Protocol'])
+    module.add_enum('DropReason', ['DROP_TTL_EXPIRED', 'DROP_NO_ROUTE', 'DROP_INTERFACE_DOWN', 'DROP_ROUTE_ERROR', 'DROP_UNKNOWN_PROTOCOL', 'DROP_UNKNOWN_OPTION', 'DROP_MALFORMED_HEADER', 'DROP_FRAGMENT_TIMEOUT'], outer_class=root_module['ns3::Ipv6L3Protocol'])
     ## ipv6-route.h (module 'internet'): ns3::Ipv6MulticastRoute [class]
     module.add_class('Ipv6MulticastRoute', parent=root_module['ns3::SimpleRefCount< ns3::Ipv6MulticastRoute, ns3::empty, ns3::DefaultDeleter<ns3::Ipv6MulticastRoute> >'])
     ## ipv6-pmtu-cache.h (module 'internet'): ns3::Ipv6PmtuCache [class]
@@ -646,6 +662,10 @@
     module.add_class('ParetoRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
     ## probe.h (module 'stats'): ns3::Probe [class]
     module.add_class('Probe', import_from_module='ns.stats', parent=root_module['ns3::DataCollectionObject'])
+    ## ripng.h (module 'internet'): ns3::RipNg [class]
+    module.add_class('RipNg', parent=root_module['ns3::Ipv6RoutingProtocol'])
+    ## ripng.h (module 'internet'): ns3::RipNg::SplitHorizonType_e [enumeration]
+    module.add_enum('SplitHorizonType_e', ['NO_SPLIT_HORIZON', 'SPLIT_HORIZON', 'POISON_REVERSE'], outer_class=root_module['ns3::RipNg'])
     ## tcp-l4-protocol.h (module 'internet'): ns3::TcpL4Protocol [class]
     module.add_class('TcpL4Protocol', parent=root_module['ns3::IpL4Protocol'])
     ## tcp-newreno.h (module 'internet'): ns3::TcpNewReno [class]
@@ -690,21 +710,26 @@
     module.add_class('Ipv6PacketProbe', parent=root_module['ns3::Probe'])
     ## loopback-net-device.h (module 'internet'): ns3::LoopbackNetDevice [class]
     module.add_class('LoopbackNetDevice', parent=root_module['ns3::NetDevice'])
-    module.add_container('std::vector< unsigned int >', 'unsigned int', container_type='vector')
-    module.add_container('std::vector< bool >', 'bool', container_type='vector')
-    module.add_container('std::map< ns3::SequenceNumber< unsigned int, int >, ns3::Ptr< ns3::Packet > >', ('ns3::SequenceNumber< unsigned int, int >', 'ns3::Ptr< ns3::Packet >'), container_type='map')
-    module.add_container('std::list< ns3::Ptr< ns3::Packet > >', 'ns3::Ptr< ns3::Packet >', container_type='list')
-    module.add_container('std::map< unsigned int, unsigned int >', ('unsigned int', 'unsigned int'), container_type='map')
-    module.add_container('std::vector< ns3::Ipv6Address >', 'ns3::Ipv6Address', container_type='vector')
-    typehandlers.add_type_alias('ns3::SequenceNumber< short unsigned int, short int >', 'ns3::SequenceNumber16')
-    typehandlers.add_type_alias('ns3::SequenceNumber< short unsigned int, short int >*', 'ns3::SequenceNumber16*')
-    typehandlers.add_type_alias('ns3::SequenceNumber< short unsigned int, short int >&', 'ns3::SequenceNumber16&')
-    typehandlers.add_type_alias('ns3::SequenceNumber< unsigned int, int >', 'ns3::SequenceNumber32')
-    typehandlers.add_type_alias('ns3::SequenceNumber< unsigned int, int >*', 'ns3::SequenceNumber32*')
-    typehandlers.add_type_alias('ns3::SequenceNumber< unsigned int, int >&', 'ns3::SequenceNumber32&')
-    typehandlers.add_type_alias('std::deque< ns3::RttHistory, std::allocator< ns3::RttHistory > >', 'ns3::RttHistory_t')
-    typehandlers.add_type_alias('std::deque< ns3::RttHistory, std::allocator< ns3::RttHistory > >*', 'ns3::RttHistory_t*')
-    typehandlers.add_type_alias('std::deque< ns3::RttHistory, std::allocator< ns3::RttHistory > >&', 'ns3::RttHistory_t&')
+    module.add_container('std::vector< unsigned int >', 'unsigned int', container_type=u'vector')
+    module.add_container('std::vector< bool >', 'bool', container_type=u'vector')
+    module.add_container('std::list< ns3::RipNgRte >', 'ns3::RipNgRte', container_type=u'list')
+    module.add_container('std::map< ns3::SequenceNumber< unsigned int, int >, ns3::Ptr< ns3::Packet > >', ('ns3::SequenceNumber< unsigned int, int >', 'ns3::Ptr< ns3::Packet >'), container_type=u'map')
+    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')
+    module.add_container('std::vector< ns3::Ipv6Address >', 'ns3::Ipv6Address', container_type=u'vector')
+    module.add_container('std::set< unsigned int >', 'unsigned int', container_type=u'set')
+    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'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'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&')
     
     ## Register a nested module for the namespace FatalImpl
     
@@ -733,12 +758,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('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('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(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&')
+    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&')
     
     ## Register a nested module for the namespace Function
     
@@ -835,6 +860,8 @@
     register_Ns3PcapHelperForDevice_methods(root_module, root_module['ns3::PcapHelperForDevice'])
     register_Ns3PcapHelperForIpv4_methods(root_module, root_module['ns3::PcapHelperForIpv4'])
     register_Ns3PcapHelperForIpv6_methods(root_module, root_module['ns3::PcapHelperForIpv6'])
+    register_Ns3RipNgHelper_methods(root_module, root_module['ns3::RipNgHelper'])
+    register_Ns3RipNgRoutingTableEntry_methods(root_module, root_module['ns3::RipNgRoutingTableEntry'])
     register_Ns3RttHistory_methods(root_module, root_module['ns3::RttHistory'])
     register_Ns3SPFVertex_methods(root_module, root_module['ns3::SPFVertex'])
     register_Ns3SequenceNumber32_methods(root_module, root_module['ns3::SequenceNumber32'])
@@ -842,6 +869,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_Ns3Timer_methods(root_module, root_module['ns3::Timer'])
     register_Ns3TimerImpl_methods(root_module, root_module['ns3::TimerImpl'])
     register_Ns3TracedValue__Double_methods(root_module, root_module['ns3::TracedValue< double >'])
@@ -894,6 +922,8 @@
     register_Ns3ObjectAggregateIterator_methods(root_module, root_module['ns3::Object::AggregateIterator'])
     register_Ns3PcapFileWrapper_methods(root_module, root_module['ns3::PcapFileWrapper'])
     register_Ns3RandomVariableStream_methods(root_module, root_module['ns3::RandomVariableStream'])
+    register_Ns3RipNgHeader_methods(root_module, root_module['ns3::RipNgHeader'])
+    register_Ns3RipNgRte_methods(root_module, root_module['ns3::RipNgRte'])
     register_Ns3RttEstimator_methods(root_module, root_module['ns3::RttEstimator'])
     register_Ns3RttMeanDeviation_methods(root_module, root_module['ns3::RttMeanDeviation'])
     register_Ns3SequentialRandomVariable_methods(root_module, root_module['ns3::SequentialRandomVariable'])
@@ -1024,6 +1054,7 @@
     register_Ns3Packet_methods(root_module, root_module['ns3::Packet'])
     register_Ns3ParetoRandomVariable_methods(root_module, root_module['ns3::ParetoRandomVariable'])
     register_Ns3Probe_methods(root_module, root_module['ns3::Probe'])
+    register_Ns3RipNg_methods(root_module, root_module['ns3::RipNg'])
     register_Ns3TcpL4Protocol_methods(root_module, root_module['ns3::TcpL4Protocol'])
     register_Ns3TcpNewReno_methods(root_module, root_module['ns3::TcpNewReno'])
     register_Ns3TcpReno_methods(root_module, root_module['ns3::TcpReno'])
@@ -1537,6 +1568,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', 
@@ -1549,6 +1584,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', 
@@ -3226,6 +3265,11 @@
                    'ns3::Ipv6InterfaceAddress::State_e', 
                    [], 
                    is_const=True)
+    ## ipv6-interface-address.h (module 'internet'): bool ns3::Ipv6InterfaceAddress::IsInSameSubnet(ns3::Ipv6Address b) const [member function]
+    cls.add_method('IsInSameSubnet', 
+                   'bool', 
+                   [param('ns3::Ipv6Address', 'b')], 
+                   is_const=True)
     ## ipv6-interface-address.h (module 'internet'): void ns3::Ipv6InterfaceAddress::SetAddress(ns3::Ipv6Address address) [member function]
     cls.add_method('SetAddress', 
                    'void', 
@@ -4322,6 +4366,91 @@
                    is_pure_virtual=True, is_virtual=True)
     return
 
+def register_Ns3RipNgHelper_methods(root_module, cls):
+    ## ripng-helper.h (module 'internet'): ns3::RipNgHelper::RipNgHelper() [constructor]
+    cls.add_constructor([])
+    ## ripng-helper.h (module 'internet'): ns3::RipNgHelper::RipNgHelper(ns3::RipNgHelper const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::RipNgHelper const &', 'arg0')])
+    ## ripng-helper.h (module 'internet'): ns3::RipNgHelper * ns3::RipNgHelper::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::RipNgHelper *', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## ripng-helper.h (module 'internet'): ns3::Ptr<ns3::Ipv6RoutingProtocol> ns3::RipNgHelper::Create(ns3::Ptr<ns3::Node> node) const [member function]
+    cls.add_method('Create', 
+                   'ns3::Ptr< ns3::Ipv6RoutingProtocol >', 
+                   [param('ns3::Ptr< ns3::Node >', 'node')], 
+                   is_const=True, is_virtual=True)
+    ## ripng-helper.h (module 'internet'): void ns3::RipNgHelper::Set(std::string name, ns3::AttributeValue const & value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('std::string', 'name'), param('ns3::AttributeValue const &', 'value')])
+    ## ripng-helper.h (module 'internet'): int64_t ns3::RipNgHelper::AssignStreams(ns3::NodeContainer c, int64_t stream) [member function]
+    cls.add_method('AssignStreams', 
+                   'int64_t', 
+                   [param('ns3::NodeContainer', 'c'), param('int64_t', 'stream')])
+    ## ripng-helper.h (module 'internet'): void ns3::RipNgHelper::SetDefaultRouter(ns3::Ptr<ns3::Node> node, ns3::Ipv6Address nextHop, uint32_t interface) [member function]
+    cls.add_method('SetDefaultRouter', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Node >', 'node'), param('ns3::Ipv6Address', 'nextHop'), param('uint32_t', 'interface')])
+    ## ripng-helper.h (module 'internet'): void ns3::RipNgHelper::ExcludeInterface(ns3::Ptr<ns3::Node> node, uint32_t interface) [member function]
+    cls.add_method('ExcludeInterface', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Node >', 'node'), param('uint32_t', 'interface')])
+    ## ripng-helper.h (module 'internet'): void ns3::RipNgHelper::SetInterfaceMetric(ns3::Ptr<ns3::Node> node, uint32_t interface, uint8_t metric) [member function]
+    cls.add_method('SetInterfaceMetric', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Node >', 'node'), param('uint32_t', 'interface'), param('uint8_t', 'metric')])
+    return
+
+def register_Ns3RipNgRoutingTableEntry_methods(root_module, cls):
+    cls.add_output_stream_operator()
+    ## ripng.h (module 'internet'): ns3::RipNgRoutingTableEntry::RipNgRoutingTableEntry(ns3::RipNgRoutingTableEntry const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::RipNgRoutingTableEntry const &', 'arg0')])
+    ## ripng.h (module 'internet'): ns3::RipNgRoutingTableEntry::RipNgRoutingTableEntry() [constructor]
+    cls.add_constructor([])
+    ## ripng.h (module 'internet'): ns3::RipNgRoutingTableEntry::RipNgRoutingTableEntry(ns3::Ipv6Address network, ns3::Ipv6Prefix networkPrefix, ns3::Ipv6Address nextHop, uint32_t interface, ns3::Ipv6Address prefixToUse) [constructor]
+    cls.add_constructor([param('ns3::Ipv6Address', 'network'), param('ns3::Ipv6Prefix', 'networkPrefix'), param('ns3::Ipv6Address', 'nextHop'), param('uint32_t', 'interface'), param('ns3::Ipv6Address', 'prefixToUse')])
+    ## ripng.h (module 'internet'): ns3::RipNgRoutingTableEntry::RipNgRoutingTableEntry(ns3::Ipv6Address network, ns3::Ipv6Prefix networkPrefix, uint32_t interface) [constructor]
+    cls.add_constructor([param('ns3::Ipv6Address', 'network'), param('ns3::Ipv6Prefix', 'networkPrefix'), param('uint32_t', 'interface')])
+    ## ripng.h (module 'internet'): uint8_t ns3::RipNgRoutingTableEntry::GetRouteMetric() const [member function]
+    cls.add_method('GetRouteMetric', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## ripng.h (module 'internet'): ns3::RipNgRoutingTableEntry::Status_e ns3::RipNgRoutingTableEntry::GetRouteStatus() const [member function]
+    cls.add_method('GetRouteStatus', 
+                   'ns3::RipNgRoutingTableEntry::Status_e', 
+                   [], 
+                   is_const=True)
+    ## ripng.h (module 'internet'): uint16_t ns3::RipNgRoutingTableEntry::GetRouteTag() const [member function]
+    cls.add_method('GetRouteTag', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## ripng.h (module 'internet'): bool ns3::RipNgRoutingTableEntry::IsRouteChanged() const [member function]
+    cls.add_method('IsRouteChanged', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## ripng.h (module 'internet'): void ns3::RipNgRoutingTableEntry::SetRouteChanged(bool changed) [member function]
+    cls.add_method('SetRouteChanged', 
+                   'void', 
+                   [param('bool', 'changed')])
+    ## ripng.h (module 'internet'): void ns3::RipNgRoutingTableEntry::SetRouteMetric(uint8_t routeMetric) [member function]
+    cls.add_method('SetRouteMetric', 
+                   'void', 
+                   [param('uint8_t', 'routeMetric')])
+    ## ripng.h (module 'internet'): void ns3::RipNgRoutingTableEntry::SetRouteStatus(ns3::RipNgRoutingTableEntry::Status_e status) [member function]
+    cls.add_method('SetRouteStatus', 
+                   'void', 
+                   [param('ns3::RipNgRoutingTableEntry::Status_e', 'status')])
+    ## ripng.h (module 'internet'): void ns3::RipNgRoutingTableEntry::SetRouteTag(uint16_t routeTag) [member function]
+    cls.add_method('SetRouteTag', 
+                   'void', 
+                   [param('uint16_t', 'routeTag')])
+    return
+
 def register_Ns3RttHistory_methods(root_module, cls):
     ## rtt-estimator.h (module 'internet'): ns3::RttHistory::RttHistory(ns3::SequenceNumber32 s, uint32_t c, ns3::Time t) [constructor]
     cls.add_constructor([param('ns3::SequenceNumber32', 's'), param('uint32_t', 'c'), param('ns3::Time', 't')])
@@ -4453,11 +4582,11 @@
 
 def register_Ns3SequenceNumber32_methods(root_module, cls):
     cls.add_binary_comparison_operator('!=')
-    cls.add_binary_numeric_operator('+', root_module['ns3::SequenceNumber32'], root_module['ns3::SequenceNumber32'], param('ns3::SequenceNumber< unsigned int, int > const &', 'right'))
-    cls.add_binary_numeric_operator('+', root_module['ns3::SequenceNumber32'], root_module['ns3::SequenceNumber32'], param('int', 'right'))
-    cls.add_inplace_numeric_operator('+=', param('int', 'right'))
-    cls.add_binary_numeric_operator('-', root_module['ns3::SequenceNumber32'], root_module['ns3::SequenceNumber32'], param('int', 'right'))
-    cls.add_inplace_numeric_operator('-=', param('int', 'right'))
+    cls.add_binary_numeric_operator('+', root_module['ns3::SequenceNumber32'], root_module['ns3::SequenceNumber32'], param('ns3::SequenceNumber< unsigned int, int > const &', u'right'))
+    cls.add_binary_numeric_operator('+', root_module['ns3::SequenceNumber32'], root_module['ns3::SequenceNumber32'], param('int', u'right'))
+    cls.add_inplace_numeric_operator('+=', param('int', u'right'))
+    cls.add_binary_numeric_operator('-', root_module['ns3::SequenceNumber32'], root_module['ns3::SequenceNumber32'], param('int', u'right'))
+    cls.add_inplace_numeric_operator('-=', param('int', u'right'))
     cls.add_binary_comparison_operator('<')
     cls.add_binary_comparison_operator('<=')
     cls.add_binary_comparison_operator('==')
@@ -4663,6 +4792,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_Ns3Timer_methods(root_module, cls):
     ## timer.h (module 'core'): ns3::Timer::Timer(ns3::Timer const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::Timer const &', 'arg0')])
@@ -5082,61 +5219,17 @@
 def register_Ns3Int64x64_t_methods(root_module, cls):
     cls.add_binary_comparison_operator('<=')
     cls.add_binary_comparison_operator('!=')
-    cls.add_inplace_numeric_operator('+=', 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 &', '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_inplace_numeric_operator('+=', 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_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_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_output_stream_operator()
     cls.add_binary_comparison_operator('==')
     cls.add_binary_comparison_operator('>=')
@@ -5144,6 +5237,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]
@@ -5184,6 +5279,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):
@@ -7524,6 +7621,143 @@
                    is_const=True, visibility='protected')
     return
 
+def register_Ns3RipNgHeader_methods(root_module, cls):
+    ## ripng-header.h (module 'internet'): ns3::RipNgHeader::RipNgHeader(ns3::RipNgHeader const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::RipNgHeader const &', 'arg0')])
+    ## ripng-header.h (module 'internet'): ns3::RipNgHeader::RipNgHeader() [constructor]
+    cls.add_constructor([])
+    ## ripng-header.h (module 'internet'): void ns3::RipNgHeader::AddRte(ns3::RipNgRte rte) [member function]
+    cls.add_method('AddRte', 
+                   'void', 
+                   [param('ns3::RipNgRte', 'rte')])
+    ## ripng-header.h (module 'internet'): void ns3::RipNgHeader::ClearRtes() [member function]
+    cls.add_method('ClearRtes', 
+                   'void', 
+                   [])
+    ## ripng-header.h (module 'internet'): uint32_t ns3::RipNgHeader::Deserialize(ns3::Buffer::Iterator start) [member function]
+    cls.add_method('Deserialize', 
+                   'uint32_t', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_virtual=True)
+    ## ripng-header.h (module 'internet'): ns3::RipNgHeader::Command_e ns3::RipNgHeader::GetCommand() const [member function]
+    cls.add_method('GetCommand', 
+                   'ns3::RipNgHeader::Command_e', 
+                   [], 
+                   is_const=True)
+    ## ripng-header.h (module 'internet'): ns3::TypeId ns3::RipNgHeader::GetInstanceTypeId() const [member function]
+    cls.add_method('GetInstanceTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## ripng-header.h (module 'internet'): std::list<ns3::RipNgRte, std::allocator<ns3::RipNgRte> > ns3::RipNgHeader::GetRteList() const [member function]
+    cls.add_method('GetRteList', 
+                   'std::list< ns3::RipNgRte >', 
+                   [], 
+                   is_const=True)
+    ## ripng-header.h (module 'internet'): uint16_t ns3::RipNgHeader::GetRteNumber() const [member function]
+    cls.add_method('GetRteNumber', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## ripng-header.h (module 'internet'): uint32_t ns3::RipNgHeader::GetSerializedSize() const [member function]
+    cls.add_method('GetSerializedSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## ripng-header.h (module 'internet'): static ns3::TypeId ns3::RipNgHeader::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## ripng-header.h (module 'internet'): void ns3::RipNgHeader::Print(std::ostream & os) const [member function]
+    cls.add_method('Print', 
+                   'void', 
+                   [param('std::ostream &', 'os')], 
+                   is_const=True, is_virtual=True)
+    ## ripng-header.h (module 'internet'): void ns3::RipNgHeader::Serialize(ns3::Buffer::Iterator start) const [member function]
+    cls.add_method('Serialize', 
+                   'void', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_const=True, is_virtual=True)
+    ## ripng-header.h (module 'internet'): void ns3::RipNgHeader::SetCommand(ns3::RipNgHeader::Command_e command) [member function]
+    cls.add_method('SetCommand', 
+                   'void', 
+                   [param('ns3::RipNgHeader::Command_e', 'command')])
+    return
+
+def register_Ns3RipNgRte_methods(root_module, cls):
+    ## ripng-header.h (module 'internet'): ns3::RipNgRte::RipNgRte(ns3::RipNgRte const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::RipNgRte const &', 'arg0')])
+    ## ripng-header.h (module 'internet'): ns3::RipNgRte::RipNgRte() [constructor]
+    cls.add_constructor([])
+    ## ripng-header.h (module 'internet'): uint32_t ns3::RipNgRte::Deserialize(ns3::Buffer::Iterator start) [member function]
+    cls.add_method('Deserialize', 
+                   'uint32_t', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_virtual=True)
+    ## ripng-header.h (module 'internet'): ns3::TypeId ns3::RipNgRte::GetInstanceTypeId() const [member function]
+    cls.add_method('GetInstanceTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## ripng-header.h (module 'internet'): ns3::Ipv6Address ns3::RipNgRte::GetPrefix() const [member function]
+    cls.add_method('GetPrefix', 
+                   'ns3::Ipv6Address', 
+                   [], 
+                   is_const=True)
+    ## ripng-header.h (module 'internet'): uint8_t ns3::RipNgRte::GetPrefixLen() const [member function]
+    cls.add_method('GetPrefixLen', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## ripng-header.h (module 'internet'): uint8_t ns3::RipNgRte::GetRouteMetric() const [member function]
+    cls.add_method('GetRouteMetric', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## ripng-header.h (module 'internet'): uint16_t ns3::RipNgRte::GetRouteTag() const [member function]
+    cls.add_method('GetRouteTag', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## ripng-header.h (module 'internet'): uint32_t ns3::RipNgRte::GetSerializedSize() const [member function]
+    cls.add_method('GetSerializedSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## ripng-header.h (module 'internet'): static ns3::TypeId ns3::RipNgRte::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## ripng-header.h (module 'internet'): void ns3::RipNgRte::Print(std::ostream & os) const [member function]
+    cls.add_method('Print', 
+                   'void', 
+                   [param('std::ostream &', 'os')], 
+                   is_const=True, is_virtual=True)
+    ## ripng-header.h (module 'internet'): void ns3::RipNgRte::Serialize(ns3::Buffer::Iterator start) const [member function]
+    cls.add_method('Serialize', 
+                   'void', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_const=True, is_virtual=True)
+    ## ripng-header.h (module 'internet'): void ns3::RipNgRte::SetPrefix(ns3::Ipv6Address prefix) [member function]
+    cls.add_method('SetPrefix', 
+                   'void', 
+                   [param('ns3::Ipv6Address', 'prefix')])
+    ## ripng-header.h (module 'internet'): void ns3::RipNgRte::SetPrefixLen(uint8_t prefixLen) [member function]
+    cls.add_method('SetPrefixLen', 
+                   'void', 
+                   [param('uint8_t', 'prefixLen')])
+    ## ripng-header.h (module 'internet'): void ns3::RipNgRte::SetRouteMetric(uint8_t routeMetric) [member function]
+    cls.add_method('SetRouteMetric', 
+                   'void', 
+                   [param('uint8_t', 'routeMetric')])
+    ## ripng-header.h (module 'internet'): void ns3::RipNgRte::SetRouteTag(uint16_t routeTag) [member function]
+    cls.add_method('SetRouteTag', 
+                   'void', 
+                   [param('uint16_t', 'routeTag')])
+    return
+
 def register_Ns3RttEstimator_methods(root_module, cls):
     ## rtt-estimator.h (module 'internet'): ns3::RttEstimator::RttEstimator() [constructor]
     cls.add_constructor([])
@@ -9547,12 +9781,14 @@
 def register_Ns3Time_methods(root_module, cls):
     cls.add_binary_comparison_operator('<=')
     cls.add_binary_comparison_operator('!=')
-    cls.add_inplace_numeric_operator('+=', 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('ns3::Time const &', 'right'))
+    cls.add_inplace_numeric_operator('+=', 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_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_inplace_numeric_operator('-=', param('ns3::Time const &', '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('>=')
@@ -9578,6 +9814,11 @@
     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', 
@@ -11746,6 +11987,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', 
@@ -12366,6 +12612,11 @@
                    'ns3::Ptr< ns3::NetDevice >', 
                    [param('uint32_t', 'interface')], 
                    is_pure_virtual=True, is_virtual=True)
+    ## ipv6.h (module 'internet'): ns3::Ptr<ns3::IpL4Protocol> ns3::Ipv6::GetProtocol(int protocolNumber) const [member function]
+    cls.add_method('GetProtocol', 
+                   'ns3::Ptr< ns3::IpL4Protocol >', 
+                   [param('int', 'protocolNumber')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## ipv6.h (module 'internet'): ns3::Ptr<ns3::Ipv6RoutingProtocol> ns3::Ipv6::GetRoutingProtocol() const [member function]
     cls.add_method('GetRoutingProtocol', 
                    'ns3::Ptr< ns3::Ipv6RoutingProtocol >', 
@@ -12436,6 +12687,11 @@
                    'void', 
                    [param('uint32_t', 'interface')], 
                    is_pure_virtual=True, is_virtual=True)
+    ## ipv6.h (module 'internet'): ns3::Ipv6Address ns3::Ipv6::SourceAddressSelection(uint32_t interface, ns3::Ipv6Address dest) [member function]
+    cls.add_method('SourceAddressSelection', 
+                   'ns3::Ipv6Address', 
+                   [param('uint32_t', 'interface'), param('ns3::Ipv6Address', 'dest')], 
+                   is_pure_virtual=True, is_virtual=True)
     ## ipv6.h (module 'internet'): ns3::Ipv6::IF_ANY [variable]
     cls.add_static_attribute('IF_ANY', 'uint32_t const', is_const=True)
     ## ipv6.h (module 'internet'): bool ns3::Ipv6::GetIpForward() const [member function]
@@ -12524,15 +12780,15 @@
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
-    ## ipv6-extension.h (module 'internet'): uint8_t ns3::Ipv6Extension::Process(ns3::Ptr<ns3::Packet> & packet, uint8_t offset, ns3::Ipv6Header const & ipv6Header, ns3::Ipv6Address dst, uint8_t * nextHeader, bool & isDropped) [member function]
+    ## ipv6-extension.h (module 'internet'): uint8_t ns3::Ipv6Extension::Process(ns3::Ptr<ns3::Packet> & packet, uint8_t offset, ns3::Ipv6Header const & ipv6Header, ns3::Ipv6Address dst, uint8_t * nextHeader, bool & stopProcessing, bool & isDropped, ns3::Ipv6L3Protocol::DropReason & dropReason) [member function]
     cls.add_method('Process', 
                    'uint8_t', 
-                   [param('ns3::Ptr< ns3::Packet > &', 'packet'), param('uint8_t', 'offset'), param('ns3::Ipv6Header const &', 'ipv6Header'), param('ns3::Ipv6Address', 'dst'), param('uint8_t *', 'nextHeader'), param('bool &', 'isDropped')], 
+                   [param('ns3::Ptr< ns3::Packet > &', 'packet'), param('uint8_t', 'offset'), param('ns3::Ipv6Header const &', 'ipv6Header'), param('ns3::Ipv6Address', 'dst'), param('uint8_t *', 'nextHeader'), param('bool &', 'stopProcessing'), param('bool &', 'isDropped'), param('ns3::Ipv6L3Protocol::DropReason &', 'dropReason')], 
                    is_pure_virtual=True, is_virtual=True)
-    ## ipv6-extension.h (module 'internet'): uint8_t ns3::Ipv6Extension::ProcessOptions(ns3::Ptr<ns3::Packet> & packet, uint8_t offset, uint8_t length, ns3::Ipv6Header const & ipv6Header, ns3::Ipv6Address dst, uint8_t * nextHeader, bool & isDropped) [member function]
+    ## ipv6-extension.h (module 'internet'): uint8_t ns3::Ipv6Extension::ProcessOptions(ns3::Ptr<ns3::Packet> & packet, uint8_t offset, uint8_t length, ns3::Ipv6Header const & ipv6Header, ns3::Ipv6Address dst, uint8_t * nextHeader, bool & stopProcessing, bool & isDropped, ns3::Ipv6L3Protocol::DropReason & dropReason) [member function]
     cls.add_method('ProcessOptions', 
                    'uint8_t', 
-                   [param('ns3::Ptr< ns3::Packet > &', 'packet'), param('uint8_t', 'offset'), param('uint8_t', 'length'), param('ns3::Ipv6Header const &', 'ipv6Header'), param('ns3::Ipv6Address', 'dst'), param('uint8_t *', 'nextHeader'), param('bool &', 'isDropped')], 
+                   [param('ns3::Ptr< ns3::Packet > &', 'packet'), param('uint8_t', 'offset'), param('uint8_t', 'length'), param('ns3::Ipv6Header const &', 'ipv6Header'), param('ns3::Ipv6Address', 'dst'), param('uint8_t *', 'nextHeader'), param('bool &', 'stopProcessing'), param('bool &', 'isDropped'), param('ns3::Ipv6L3Protocol::DropReason &', 'dropReason')], 
                    is_virtual=True)
     ## ipv6-extension.h (module 'internet'): void ns3::Ipv6Extension::SetNode(ns3::Ptr<ns3::Node> node) [member function]
     cls.add_method('SetNode', 
@@ -12555,10 +12811,10 @@
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
-    ## ipv6-extension.h (module 'internet'): uint8_t ns3::Ipv6ExtensionAH::Process(ns3::Ptr<ns3::Packet> & packet, uint8_t offset, ns3::Ipv6Header const & ipv6Header, ns3::Ipv6Address dst, uint8_t * nextHeader, bool & isDropped) [member function]
+    ## ipv6-extension.h (module 'internet'): uint8_t ns3::Ipv6ExtensionAH::Process(ns3::Ptr<ns3::Packet> & packet, uint8_t offset, ns3::Ipv6Header const & ipv6Header, ns3::Ipv6Address dst, uint8_t * nextHeader, bool & stopProcessing, bool & isDropped, ns3::Ipv6L3Protocol::DropReason & dropReason) [member function]
     cls.add_method('Process', 
                    'uint8_t', 
-                   [param('ns3::Ptr< ns3::Packet > &', 'packet'), param('uint8_t', 'offset'), param('ns3::Ipv6Header const &', 'ipv6Header'), param('ns3::Ipv6Address', 'dst'), param('uint8_t *', 'nextHeader'), param('bool &', 'isDropped')], 
+                   [param('ns3::Ptr< ns3::Packet > &', 'packet'), param('uint8_t', 'offset'), param('ns3::Ipv6Header const &', 'ipv6Header'), param('ns3::Ipv6Address', 'dst'), param('uint8_t *', 'nextHeader'), param('bool &', 'stopProcessing'), param('bool &', 'isDropped'), param('ns3::Ipv6L3Protocol::DropReason &', 'dropReason')], 
                    is_virtual=True)
     ## ipv6-extension.h (module 'internet'): ns3::Ipv6ExtensionAH::EXT_NUMBER [variable]
     cls.add_static_attribute('EXT_NUMBER', 'uint8_t const', is_const=True)
@@ -12649,10 +12905,10 @@
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
-    ## ipv6-extension.h (module 'internet'): uint8_t ns3::Ipv6ExtensionDestination::Process(ns3::Ptr<ns3::Packet> & packet, uint8_t offset, ns3::Ipv6Header const & ipv6Header, ns3::Ipv6Address dst, uint8_t * nextHeader, bool & isDropped) [member function]
+    ## ipv6-extension.h (module 'internet'): uint8_t ns3::Ipv6ExtensionDestination::Process(ns3::Ptr<ns3::Packet> & packet, uint8_t offset, ns3::Ipv6Header const & ipv6Header, ns3::Ipv6Address dst, uint8_t * nextHeader, bool & stopProcessing, bool & isDropped, ns3::Ipv6L3Protocol::DropReason & dropReason) [member function]
     cls.add_method('Process', 
                    'uint8_t', 
-                   [param('ns3::Ptr< ns3::Packet > &', 'packet'), param('uint8_t', 'offset'), param('ns3::Ipv6Header const &', 'ipv6Header'), param('ns3::Ipv6Address', 'dst'), param('uint8_t *', 'nextHeader'), param('bool &', 'isDropped')], 
+                   [param('ns3::Ptr< ns3::Packet > &', 'packet'), param('uint8_t', 'offset'), param('ns3::Ipv6Header const &', 'ipv6Header'), param('ns3::Ipv6Address', 'dst'), param('uint8_t *', 'nextHeader'), param('bool &', 'stopProcessing'), param('bool &', 'isDropped'), param('ns3::Ipv6L3Protocol::DropReason &', 'dropReason')], 
                    is_virtual=True)
     ## ipv6-extension.h (module 'internet'): ns3::Ipv6ExtensionDestination::EXT_NUMBER [variable]
     cls.add_static_attribute('EXT_NUMBER', 'uint8_t const', is_const=True)
@@ -12710,10 +12966,10 @@
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
-    ## ipv6-extension.h (module 'internet'): uint8_t ns3::Ipv6ExtensionESP::Process(ns3::Ptr<ns3::Packet> & packet, uint8_t offset, ns3::Ipv6Header const & ipv6Header, ns3::Ipv6Address dst, uint8_t * nextHeader, bool & isDropped) [member function]
+    ## ipv6-extension.h (module 'internet'): uint8_t ns3::Ipv6ExtensionESP::Process(ns3::Ptr<ns3::Packet> & packet, uint8_t offset, ns3::Ipv6Header const & ipv6Header, ns3::Ipv6Address dst, uint8_t * nextHeader, bool & stopProcessing, bool & isDropped, ns3::Ipv6L3Protocol::DropReason & dropReason) [member function]
     cls.add_method('Process', 
                    'uint8_t', 
-                   [param('ns3::Ptr< ns3::Packet > &', 'packet'), param('uint8_t', 'offset'), param('ns3::Ipv6Header const &', 'ipv6Header'), param('ns3::Ipv6Address', 'dst'), param('uint8_t *', 'nextHeader'), param('bool &', 'isDropped')], 
+                   [param('ns3::Ptr< ns3::Packet > &', 'packet'), param('uint8_t', 'offset'), param('ns3::Ipv6Header const &', 'ipv6Header'), param('ns3::Ipv6Address', 'dst'), param('uint8_t *', 'nextHeader'), param('bool &', 'stopProcessing'), param('bool &', 'isDropped'), param('ns3::Ipv6L3Protocol::DropReason &', 'dropReason')], 
                    is_virtual=True)
     ## ipv6-extension.h (module 'internet'): ns3::Ipv6ExtensionESP::EXT_NUMBER [variable]
     cls.add_static_attribute('EXT_NUMBER', 'uint8_t const', is_const=True)
@@ -12775,10 +13031,10 @@
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
-    ## ipv6-extension.h (module 'internet'): uint8_t ns3::Ipv6ExtensionFragment::Process(ns3::Ptr<ns3::Packet> & packet, uint8_t offset, ns3::Ipv6Header const & ipv6Header, ns3::Ipv6Address dst, uint8_t * nextHeader, bool & isDropped) [member function]
+    ## ipv6-extension.h (module 'internet'): uint8_t ns3::Ipv6ExtensionFragment::Process(ns3::Ptr<ns3::Packet> & packet, uint8_t offset, ns3::Ipv6Header const & ipv6Header, ns3::Ipv6Address dst, uint8_t * nextHeader, bool & stopProcessing, bool & isDropped, ns3::Ipv6L3Protocol::DropReason & dropReason) [member function]
     cls.add_method('Process', 
                    'uint8_t', 
-                   [param('ns3::Ptr< ns3::Packet > &', 'packet'), param('uint8_t', 'offset'), param('ns3::Ipv6Header const &', 'ipv6Header'), param('ns3::Ipv6Address', 'dst'), param('uint8_t *', 'nextHeader'), param('bool &', 'isDropped')], 
+                   [param('ns3::Ptr< ns3::Packet > &', 'packet'), param('uint8_t', 'offset'), param('ns3::Ipv6Header const &', 'ipv6Header'), param('ns3::Ipv6Address', 'dst'), param('uint8_t *', 'nextHeader'), param('bool &', 'stopProcessing'), param('bool &', 'isDropped'), param('ns3::Ipv6L3Protocol::DropReason &', 'dropReason')], 
                    is_virtual=True)
     ## ipv6-extension.h (module 'internet'): ns3::Ipv6ExtensionFragment::EXT_NUMBER [variable]
     cls.add_static_attribute('EXT_NUMBER', 'uint8_t const', is_const=True)
@@ -12868,10 +13124,10 @@
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
-    ## ipv6-extension.h (module 'internet'): uint8_t ns3::Ipv6ExtensionHopByHop::Process(ns3::Ptr<ns3::Packet> & packet, uint8_t offset, ns3::Ipv6Header const & ipv6Header, ns3::Ipv6Address dst, uint8_t * nextHeader, bool & isDropped) [member function]
+    ## ipv6-extension.h (module 'internet'): uint8_t ns3::Ipv6ExtensionHopByHop::Process(ns3::Ptr<ns3::Packet> & packet, uint8_t offset, ns3::Ipv6Header const & ipv6Header, ns3::Ipv6Address dst, uint8_t * nextHeader, bool & stopProcessing, bool & isDropped, ns3::Ipv6L3Protocol::DropReason & dropReason) [member function]
     cls.add_method('Process', 
                    'uint8_t', 
-                   [param('ns3::Ptr< ns3::Packet > &', 'packet'), param('uint8_t', 'offset'), param('ns3::Ipv6Header const &', 'ipv6Header'), param('ns3::Ipv6Address', 'dst'), param('uint8_t *', 'nextHeader'), param('bool &', 'isDropped')], 
+                   [param('ns3::Ptr< ns3::Packet > &', 'packet'), param('uint8_t', 'offset'), param('ns3::Ipv6Header const &', 'ipv6Header'), param('ns3::Ipv6Address', 'dst'), param('uint8_t *', 'nextHeader'), param('bool &', 'stopProcessing'), param('bool &', 'isDropped'), param('ns3::Ipv6L3Protocol::DropReason &', 'dropReason')], 
                    is_virtual=True)
     ## ipv6-extension.h (module 'internet'): ns3::Ipv6ExtensionHopByHop::EXT_NUMBER [variable]
     cls.add_static_attribute('EXT_NUMBER', 'uint8_t const', is_const=True)
@@ -12956,10 +13212,10 @@
                    'uint8_t', 
                    [], 
                    is_const=True, is_virtual=True)
-    ## ipv6-extension.h (module 'internet'): uint8_t ns3::Ipv6ExtensionRouting::Process(ns3::Ptr<ns3::Packet> & packet, uint8_t offset, ns3::Ipv6Header const & ipv6Header, ns3::Ipv6Address dst, uint8_t * nextHeader, bool & isDropped) [member function]
+    ## ipv6-extension.h (module 'internet'): uint8_t ns3::Ipv6ExtensionRouting::Process(ns3::Ptr<ns3::Packet> & packet, uint8_t offset, ns3::Ipv6Header const & ipv6Header, ns3::Ipv6Address dst, uint8_t * nextHeader, bool & stopProcessing, bool & isDropped, ns3::Ipv6L3Protocol::DropReason & dropReason) [member function]
     cls.add_method('Process', 
                    'uint8_t', 
-                   [param('ns3::Ptr< ns3::Packet > &', 'packet'), param('uint8_t', 'offset'), param('ns3::Ipv6Header const &', 'ipv6Header'), param('ns3::Ipv6Address', 'dst'), param('uint8_t *', 'nextHeader'), param('bool &', 'isDropped')], 
+                   [param('ns3::Ptr< ns3::Packet > &', 'packet'), param('uint8_t', 'offset'), param('ns3::Ipv6Header const &', 'ipv6Header'), param('ns3::Ipv6Address', 'dst'), param('uint8_t *', 'nextHeader'), param('bool &', 'stopProcessing'), param('bool &', 'isDropped'), param('ns3::Ipv6L3Protocol::DropReason &', 'dropReason')], 
                    is_virtual=True)
     ## ipv6-extension.h (module 'internet'): ns3::Ipv6ExtensionRouting::EXT_NUMBER [variable]
     cls.add_static_attribute('EXT_NUMBER', 'uint8_t const', is_const=True)
@@ -13169,7 +13425,7 @@
     cls.add_method('GetProtocol', 
                    'ns3::Ptr< ns3::IpL4Protocol >', 
                    [param('int', 'protocolNumber')], 
-                   is_const=True)
+                   is_const=True, is_virtual=True)
     ## ipv6-l3-protocol.h (module 'internet'): ns3::Ptr<ns3::Socket> ns3::Ipv6L3Protocol::CreateRawSocket() [member function]
     cls.add_method('CreateRawSocket', 
                    'ns3::Ptr< ns3::Socket >', 
@@ -13304,6 +13560,11 @@
                    'void', 
                    [param('uint32_t', 'i'), param('bool', 'val')], 
                    is_virtual=True)
+    ## ipv6-l3-protocol.h (module 'internet'): ns3::Ipv6Address ns3::Ipv6L3Protocol::SourceAddressSelection(uint32_t interface, ns3::Ipv6Address dest) [member function]
+    cls.add_method('SourceAddressSelection', 
+                   'ns3::Ipv6Address', 
+                   [param('uint32_t', 'interface'), param('ns3::Ipv6Address', 'dest')], 
+                   is_virtual=True)
     ## ipv6-l3-protocol.h (module 'internet'): ns3::Ptr<ns3::NetDevice> ns3::Ipv6L3Protocol::GetNetDevice(uint32_t i) [member function]
     cls.add_method('GetNetDevice', 
                    'ns3::Ptr< ns3::NetDevice >', 
@@ -13332,6 +13593,11 @@
                    'void', 
                    [], 
                    is_virtual=True)
+    ## ipv6-l3-protocol.h (module 'internet'): void ns3::Ipv6L3Protocol::ReportDrop(ns3::Ipv6Header ipHeader, ns3::Ptr<ns3::Packet> p, ns3::Ipv6L3Protocol::DropReason dropReason) [member function]
+    cls.add_method('ReportDrop', 
+                   'void', 
+                   [param('ns3::Ipv6Header', 'ipHeader'), param('ns3::Ptr< ns3::Packet >', 'p'), param('ns3::Ipv6L3Protocol::DropReason', 'dropReason')], 
+                   is_virtual=True)
     ## ipv6-l3-protocol.h (module 'internet'): void ns3::Ipv6L3Protocol::DoDispose() [member function]
     cls.add_method('DoDispose', 
                    'void', 
@@ -14596,10 +14862,10 @@
                    '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')])
     return
 
 def register_Ns3ParetoRandomVariable_methods(root_module, cls):
@@ -14672,6 +14938,104 @@
                    is_const=True, is_virtual=True)
     return
 
+def register_Ns3RipNg_methods(root_module, cls):
+    ## ripng.h (module 'internet'): ns3::RipNg::RipNg(ns3::RipNg const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::RipNg const &', 'arg0')])
+    ## ripng.h (module 'internet'): ns3::RipNg::RipNg() [constructor]
+    cls.add_constructor([])
+    ## ripng.h (module 'internet'): void ns3::RipNg::AddDefaultRouteTo(ns3::Ipv6Address nextHop, uint32_t interface) [member function]
+    cls.add_method('AddDefaultRouteTo', 
+                   'void', 
+                   [param('ns3::Ipv6Address', 'nextHop'), param('uint32_t', 'interface')])
+    ## ripng.h (module 'internet'): int64_t ns3::RipNg::AssignStreams(int64_t stream) [member function]
+    cls.add_method('AssignStreams', 
+                   'int64_t', 
+                   [param('int64_t', 'stream')])
+    ## ripng.h (module 'internet'): std::set<unsigned int, std::less<unsigned int>, std::allocator<unsigned int> > ns3::RipNg::GetInterfaceExclusions() const [member function]
+    cls.add_method('GetInterfaceExclusions', 
+                   'std::set< unsigned int >', 
+                   [], 
+                   is_const=True)
+    ## ripng.h (module 'internet'): uint8_t ns3::RipNg::GetInterfaceMetric(uint32_t interface) const [member function]
+    cls.add_method('GetInterfaceMetric', 
+                   'uint8_t', 
+                   [param('uint32_t', 'interface')], 
+                   is_const=True)
+    ## ripng.h (module 'internet'): static ns3::TypeId ns3::RipNg::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## ripng.h (module 'internet'): void ns3::RipNg::NotifyAddAddress(uint32_t interface, ns3::Ipv6InterfaceAddress address) [member function]
+    cls.add_method('NotifyAddAddress', 
+                   'void', 
+                   [param('uint32_t', 'interface'), param('ns3::Ipv6InterfaceAddress', 'address')], 
+                   is_virtual=True)
+    ## ripng.h (module 'internet'): void ns3::RipNg::NotifyAddRoute(ns3::Ipv6Address dst, ns3::Ipv6Prefix mask, ns3::Ipv6Address nextHop, uint32_t interface, ns3::Ipv6Address prefixToUse=ns3::Ipv6Address::GetZero( )) [member function]
+    cls.add_method('NotifyAddRoute', 
+                   'void', 
+                   [param('ns3::Ipv6Address', 'dst'), param('ns3::Ipv6Prefix', 'mask'), param('ns3::Ipv6Address', 'nextHop'), param('uint32_t', 'interface'), param('ns3::Ipv6Address', 'prefixToUse', default_value='ns3::Ipv6Address::GetZero( )')], 
+                   is_virtual=True)
+    ## ripng.h (module 'internet'): void ns3::RipNg::NotifyInterfaceDown(uint32_t interface) [member function]
+    cls.add_method('NotifyInterfaceDown', 
+                   'void', 
+                   [param('uint32_t', 'interface')], 
+                   is_virtual=True)
+    ## ripng.h (module 'internet'): void ns3::RipNg::NotifyInterfaceUp(uint32_t interface) [member function]
+    cls.add_method('NotifyInterfaceUp', 
+                   'void', 
+                   [param('uint32_t', 'interface')], 
+                   is_virtual=True)
+    ## ripng.h (module 'internet'): void ns3::RipNg::NotifyRemoveAddress(uint32_t interface, ns3::Ipv6InterfaceAddress address) [member function]
+    cls.add_method('NotifyRemoveAddress', 
+                   'void', 
+                   [param('uint32_t', 'interface'), param('ns3::Ipv6InterfaceAddress', 'address')], 
+                   is_virtual=True)
+    ## ripng.h (module 'internet'): void ns3::RipNg::NotifyRemoveRoute(ns3::Ipv6Address dst, ns3::Ipv6Prefix mask, ns3::Ipv6Address nextHop, uint32_t interface, ns3::Ipv6Address prefixToUse=ns3::Ipv6Address::GetZero( )) [member function]
+    cls.add_method('NotifyRemoveRoute', 
+                   'void', 
+                   [param('ns3::Ipv6Address', 'dst'), param('ns3::Ipv6Prefix', 'mask'), param('ns3::Ipv6Address', 'nextHop'), param('uint32_t', 'interface'), param('ns3::Ipv6Address', 'prefixToUse', default_value='ns3::Ipv6Address::GetZero( )')], 
+                   is_virtual=True)
+    ## ripng.h (module 'internet'): void ns3::RipNg::PrintRoutingTable(ns3::Ptr<ns3::OutputStreamWrapper> stream) const [member function]
+    cls.add_method('PrintRoutingTable', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream')], 
+                   is_const=True, is_virtual=True)
+    ## ripng.h (module 'internet'): bool ns3::RipNg::RouteInput(ns3::Ptr<ns3::Packet const> p, ns3::Ipv6Header const & header, ns3::Ptr<const ns3::NetDevice> idev, ns3::Callback<void,ns3::Ptr<const ns3::NetDevice>,ns3::Ptr<ns3::Ipv6Route>,ns3::Ptr<const ns3::Packet>,const ns3::Ipv6Header&,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> ucb, ns3::Callback<void,ns3::Ptr<const ns3::NetDevice>,ns3::Ptr<ns3::Ipv6MulticastRoute>,ns3::Ptr<const ns3::Packet>,const ns3::Ipv6Header&,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> mcb, ns3::Callback<void,ns3::Ptr<const ns3::Packet>,const ns3::Ipv6Header&,unsigned int,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> lcb, ns3::Callback<void,ns3::Ptr<const ns3::Packet>,const ns3::Ipv6Header&,ns3::Socket::SocketErrno,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> ecb) [member function]
+    cls.add_method('RouteInput', 
+                   'bool', 
+                   [param('ns3::Ptr< ns3::Packet const >', 'p'), param('ns3::Ipv6Header const &', 'header'), param('ns3::Ptr< ns3::NetDevice const >', 'idev'), param('ns3::Callback< void, ns3::Ptr< ns3::NetDevice const >, ns3::Ptr< ns3::Ipv6Route >, ns3::Ptr< ns3::Packet const >, ns3::Ipv6Header const &, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'ucb'), param('ns3::Callback< void, ns3::Ptr< ns3::NetDevice const >, ns3::Ptr< ns3::Ipv6MulticastRoute >, ns3::Ptr< ns3::Packet const >, ns3::Ipv6Header const &, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'mcb'), param('ns3::Callback< void, ns3::Ptr< ns3::Packet const >, ns3::Ipv6Header const &, unsigned int, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'lcb'), param('ns3::Callback< void, ns3::Ptr< ns3::Packet const >, ns3::Ipv6Header const &, ns3::Socket::SocketErrno, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'ecb')], 
+                   is_virtual=True)
+    ## ripng.h (module 'internet'): ns3::Ptr<ns3::Ipv6Route> ns3::RipNg::RouteOutput(ns3::Ptr<ns3::Packet> p, ns3::Ipv6Header const & header, ns3::Ptr<ns3::NetDevice> oif, ns3::Socket::SocketErrno & sockerr) [member function]
+    cls.add_method('RouteOutput', 
+                   'ns3::Ptr< ns3::Ipv6Route >', 
+                   [param('ns3::Ptr< ns3::Packet >', 'p'), param('ns3::Ipv6Header const &', 'header'), param('ns3::Ptr< ns3::NetDevice >', 'oif'), param('ns3::Socket::SocketErrno &', 'sockerr')], 
+                   is_virtual=True)
+    ## ripng.h (module 'internet'): void ns3::RipNg::SetInterfaceExclusions(std::set<unsigned int, std::less<unsigned int>, std::allocator<unsigned int> > exceptions) [member function]
+    cls.add_method('SetInterfaceExclusions', 
+                   'void', 
+                   [param('std::set< unsigned int >', 'exceptions')])
+    ## ripng.h (module 'internet'): void ns3::RipNg::SetInterfaceMetric(uint32_t interface, uint8_t metric) [member function]
+    cls.add_method('SetInterfaceMetric', 
+                   'void', 
+                   [param('uint32_t', 'interface'), param('uint8_t', 'metric')])
+    ## ripng.h (module 'internet'): void ns3::RipNg::SetIpv6(ns3::Ptr<ns3::Ipv6> ipv6) [member function]
+    cls.add_method('SetIpv6', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Ipv6 >', 'ipv6')], 
+                   is_virtual=True)
+    ## ripng.h (module 'internet'): void ns3::RipNg::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    ## ripng.h (module 'internet'): void ns3::RipNg::DoInitialize() [member function]
+    cls.add_method('DoInitialize', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    return
+
 def register_Ns3TcpL4Protocol_methods(root_module, cls):
     ## tcp-l4-protocol.h (module 'internet'): ns3::TcpL4Protocol::PROT_NUMBER [variable]
     cls.add_static_attribute('PROT_NUMBER', 'uint8_t const', is_const=True)
@@ -15975,10 +16339,10 @@
                    'uint8_t', 
                    [], 
                    is_const=True, is_virtual=True)
-    ## ipv6-extension.h (module 'internet'): uint8_t ns3::Ipv6ExtensionLooseRouting::Process(ns3::Ptr<ns3::Packet> & packet, uint8_t offset, ns3::Ipv6Header const & ipv6Header, ns3::Ipv6Address dst, uint8_t * nextHeader, bool & isDropped) [member function]
+    ## ipv6-extension.h (module 'internet'): uint8_t ns3::Ipv6ExtensionLooseRouting::Process(ns3::Ptr<ns3::Packet> & packet, uint8_t offset, ns3::Ipv6Header const & ipv6Header, ns3::Ipv6Address dst, uint8_t * nextHeader, bool & stopProcessing, bool & isDropped, ns3::Ipv6L3Protocol::DropReason & dropReason) [member function]
     cls.add_method('Process', 
                    'uint8_t', 
-                   [param('ns3::Ptr< ns3::Packet > &', 'packet'), param('uint8_t', 'offset'), param('ns3::Ipv6Header const &', 'ipv6Header'), param('ns3::Ipv6Address', 'dst'), param('uint8_t *', 'nextHeader'), param('bool &', 'isDropped')], 
+                   [param('ns3::Ptr< ns3::Packet > &', 'packet'), param('uint8_t', 'offset'), param('ns3::Ipv6Header const &', 'ipv6Header'), param('ns3::Ipv6Address', 'dst'), param('uint8_t *', 'nextHeader'), param('bool &', 'stopProcessing'), param('bool &', 'isDropped'), param('ns3::Ipv6L3Protocol::DropReason &', 'dropReason')], 
                    is_virtual=True)
     ## ipv6-extension.h (module 'internet'): ns3::Ipv6ExtensionLooseRouting::TYPE_ROUTING [variable]
     cls.add_static_attribute('TYPE_ROUTING', 'uint8_t const', is_const=True)
diff -Naur ns-3.19/src/internet/bindings/modulegen__gcc_LP64.py ns-3.20/src/internet/bindings/modulegen__gcc_LP64.py
--- ns-3.19/src/internet/bindings/modulegen__gcc_LP64.py	2014-06-17 10:34:00.456636522 -0700
+++ ns-3.20/src/internet/bindings/modulegen__gcc_LP64.py	2014-06-17 10:33:13.777996857 -0700
@@ -203,13 +203,19 @@
     ## 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'], 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_PRISM_HEADER', 'DLT_IEEE802_11_RADIO', 'DLT_IEEE802_15_4'], 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]
     module.add_class('PcapHelperForIpv4', allow_subclassing=True)
     ## internet-trace-helper.h (module 'internet'): ns3::PcapHelperForIpv6 [class]
     module.add_class('PcapHelperForIpv6', allow_subclassing=True)
+    ## ripng-helper.h (module 'internet'): ns3::RipNgHelper [class]
+    module.add_class('RipNgHelper', parent=root_module['ns3::Ipv6RoutingHelper'])
+    ## ripng.h (module 'internet'): ns3::RipNgRoutingTableEntry [class]
+    module.add_class('RipNgRoutingTableEntry', parent=root_module['ns3::Ipv6RoutingTableEntry'])
+    ## ripng.h (module 'internet'): ns3::RipNgRoutingTableEntry::Status_e [enumeration]
+    module.add_enum('Status_e', ['RIPNG_VALID', 'RIPNG_INVALID'], outer_class=root_module['ns3::RipNgRoutingTableEntry'])
     ## rtt-estimator.h (module 'internet'): ns3::RttHistory [class]
     module.add_class('RttHistory')
     ## global-route-manager-impl.h (module 'internet'): ns3::SPFVertex [class]
@@ -226,6 +232,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')
     ## timer.h (module 'core'): ns3::Timer [class]
     module.add_class('Timer', import_from_module='ns.core')
     ## timer.h (module 'core'): ns3::Timer::DestroyPolicy [enumeration]
@@ -256,6 +264,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]
@@ -360,6 +370,12 @@
     module.add_class('PcapFileWrapper', import_from_module='ns.network', parent=root_module['ns3::Object'])
     ## random-variable-stream.h (module 'core'): ns3::RandomVariableStream [class]
     module.add_class('RandomVariableStream', import_from_module='ns.core', parent=root_module['ns3::Object'])
+    ## ripng-header.h (module 'internet'): ns3::RipNgHeader [class]
+    module.add_class('RipNgHeader', parent=root_module['ns3::Header'])
+    ## ripng-header.h (module 'internet'): ns3::RipNgHeader::Command_e [enumeration]
+    module.add_enum('Command_e', ['REQUEST', 'RESPONSE'], outer_class=root_module['ns3::RipNgHeader'])
+    ## ripng-header.h (module 'internet'): ns3::RipNgRte [class]
+    module.add_class('RipNgRte', parent=root_module['ns3::Header'])
     ## rtt-estimator.h (module 'internet'): ns3::RttEstimator [class]
     module.add_class('RttEstimator', parent=root_module['ns3::Object'])
     ## rtt-estimator.h (module 'internet'): ns3::RttMeanDeviation [class]
@@ -597,7 +613,7 @@
     ## ipv6-l3-protocol.h (module 'internet'): ns3::Ipv6L3Protocol [class]
     module.add_class('Ipv6L3Protocol', parent=root_module['ns3::Ipv6'])
     ## ipv6-l3-protocol.h (module 'internet'): ns3::Ipv6L3Protocol::DropReason [enumeration]
-    module.add_enum('DropReason', ['DROP_TTL_EXPIRED', 'DROP_NO_ROUTE', 'DROP_INTERFACE_DOWN', 'DROP_ROUTE_ERROR', 'DROP_UNKNOWN_PROTOCOL'], outer_class=root_module['ns3::Ipv6L3Protocol'])
+    module.add_enum('DropReason', ['DROP_TTL_EXPIRED', 'DROP_NO_ROUTE', 'DROP_INTERFACE_DOWN', 'DROP_ROUTE_ERROR', 'DROP_UNKNOWN_PROTOCOL', 'DROP_UNKNOWN_OPTION', 'DROP_MALFORMED_HEADER', 'DROP_FRAGMENT_TIMEOUT'], outer_class=root_module['ns3::Ipv6L3Protocol'])
     ## ipv6-route.h (module 'internet'): ns3::Ipv6MulticastRoute [class]
     module.add_class('Ipv6MulticastRoute', parent=root_module['ns3::SimpleRefCount< ns3::Ipv6MulticastRoute, ns3::empty, ns3::DefaultDeleter<ns3::Ipv6MulticastRoute> >'])
     ## ipv6-pmtu-cache.h (module 'internet'): ns3::Ipv6PmtuCache [class]
@@ -646,6 +662,10 @@
     module.add_class('ParetoRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
     ## probe.h (module 'stats'): ns3::Probe [class]
     module.add_class('Probe', import_from_module='ns.stats', parent=root_module['ns3::DataCollectionObject'])
+    ## ripng.h (module 'internet'): ns3::RipNg [class]
+    module.add_class('RipNg', parent=root_module['ns3::Ipv6RoutingProtocol'])
+    ## ripng.h (module 'internet'): ns3::RipNg::SplitHorizonType_e [enumeration]
+    module.add_enum('SplitHorizonType_e', ['NO_SPLIT_HORIZON', 'SPLIT_HORIZON', 'POISON_REVERSE'], outer_class=root_module['ns3::RipNg'])
     ## tcp-l4-protocol.h (module 'internet'): ns3::TcpL4Protocol [class]
     module.add_class('TcpL4Protocol', parent=root_module['ns3::IpL4Protocol'])
     ## tcp-newreno.h (module 'internet'): ns3::TcpNewReno [class]
@@ -690,21 +710,26 @@
     module.add_class('Ipv6PacketProbe', parent=root_module['ns3::Probe'])
     ## loopback-net-device.h (module 'internet'): ns3::LoopbackNetDevice [class]
     module.add_class('LoopbackNetDevice', parent=root_module['ns3::NetDevice'])
-    module.add_container('std::vector< unsigned int >', 'unsigned int', container_type='vector')
-    module.add_container('std::vector< bool >', 'bool', container_type='vector')
-    module.add_container('std::map< ns3::SequenceNumber< unsigned int, int >, ns3::Ptr< ns3::Packet > >', ('ns3::SequenceNumber< unsigned int, int >', 'ns3::Ptr< ns3::Packet >'), container_type='map')
-    module.add_container('std::list< ns3::Ptr< ns3::Packet > >', 'ns3::Ptr< ns3::Packet >', container_type='list')
-    module.add_container('std::map< unsigned int, unsigned int >', ('unsigned int', 'unsigned int'), container_type='map')
-    module.add_container('std::vector< ns3::Ipv6Address >', 'ns3::Ipv6Address', container_type='vector')
-    typehandlers.add_type_alias('ns3::SequenceNumber< short unsigned int, short int >', 'ns3::SequenceNumber16')
-    typehandlers.add_type_alias('ns3::SequenceNumber< short unsigned int, short int >*', 'ns3::SequenceNumber16*')
-    typehandlers.add_type_alias('ns3::SequenceNumber< short unsigned int, short int >&', 'ns3::SequenceNumber16&')
-    typehandlers.add_type_alias('ns3::SequenceNumber< unsigned int, int >', 'ns3::SequenceNumber32')
-    typehandlers.add_type_alias('ns3::SequenceNumber< unsigned int, int >*', 'ns3::SequenceNumber32*')
-    typehandlers.add_type_alias('ns3::SequenceNumber< unsigned int, int >&', 'ns3::SequenceNumber32&')
-    typehandlers.add_type_alias('std::deque< ns3::RttHistory, std::allocator< ns3::RttHistory > >', 'ns3::RttHistory_t')
-    typehandlers.add_type_alias('std::deque< ns3::RttHistory, std::allocator< ns3::RttHistory > >*', 'ns3::RttHistory_t*')
-    typehandlers.add_type_alias('std::deque< ns3::RttHistory, std::allocator< ns3::RttHistory > >&', 'ns3::RttHistory_t&')
+    module.add_container('std::vector< unsigned int >', 'unsigned int', container_type=u'vector')
+    module.add_container('std::vector< bool >', 'bool', container_type=u'vector')
+    module.add_container('std::list< ns3::RipNgRte >', 'ns3::RipNgRte', container_type=u'list')
+    module.add_container('std::map< ns3::SequenceNumber< unsigned int, int >, ns3::Ptr< ns3::Packet > >', ('ns3::SequenceNumber< unsigned int, int >', 'ns3::Ptr< ns3::Packet >'), container_type=u'map')
+    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')
+    module.add_container('std::vector< ns3::Ipv6Address >', 'ns3::Ipv6Address', container_type=u'vector')
+    module.add_container('std::set< unsigned int >', 'unsigned int', container_type=u'set')
+    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'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'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&')
     
     ## Register a nested module for the namespace FatalImpl
     
@@ -733,12 +758,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('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('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(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&')
+    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&')
     
     ## Register a nested module for the namespace Function
     
@@ -835,6 +860,8 @@
     register_Ns3PcapHelperForDevice_methods(root_module, root_module['ns3::PcapHelperForDevice'])
     register_Ns3PcapHelperForIpv4_methods(root_module, root_module['ns3::PcapHelperForIpv4'])
     register_Ns3PcapHelperForIpv6_methods(root_module, root_module['ns3::PcapHelperForIpv6'])
+    register_Ns3RipNgHelper_methods(root_module, root_module['ns3::RipNgHelper'])
+    register_Ns3RipNgRoutingTableEntry_methods(root_module, root_module['ns3::RipNgRoutingTableEntry'])
     register_Ns3RttHistory_methods(root_module, root_module['ns3::RttHistory'])
     register_Ns3SPFVertex_methods(root_module, root_module['ns3::SPFVertex'])
     register_Ns3SequenceNumber32_methods(root_module, root_module['ns3::SequenceNumber32'])
@@ -842,6 +869,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_Ns3Timer_methods(root_module, root_module['ns3::Timer'])
     register_Ns3TimerImpl_methods(root_module, root_module['ns3::TimerImpl'])
     register_Ns3TracedValue__Double_methods(root_module, root_module['ns3::TracedValue< double >'])
@@ -894,6 +922,8 @@
     register_Ns3ObjectAggregateIterator_methods(root_module, root_module['ns3::Object::AggregateIterator'])
     register_Ns3PcapFileWrapper_methods(root_module, root_module['ns3::PcapFileWrapper'])
     register_Ns3RandomVariableStream_methods(root_module, root_module['ns3::RandomVariableStream'])
+    register_Ns3RipNgHeader_methods(root_module, root_module['ns3::RipNgHeader'])
+    register_Ns3RipNgRte_methods(root_module, root_module['ns3::RipNgRte'])
     register_Ns3RttEstimator_methods(root_module, root_module['ns3::RttEstimator'])
     register_Ns3RttMeanDeviation_methods(root_module, root_module['ns3::RttMeanDeviation'])
     register_Ns3SequentialRandomVariable_methods(root_module, root_module['ns3::SequentialRandomVariable'])
@@ -1024,6 +1054,7 @@
     register_Ns3Packet_methods(root_module, root_module['ns3::Packet'])
     register_Ns3ParetoRandomVariable_methods(root_module, root_module['ns3::ParetoRandomVariable'])
     register_Ns3Probe_methods(root_module, root_module['ns3::Probe'])
+    register_Ns3RipNg_methods(root_module, root_module['ns3::RipNg'])
     register_Ns3TcpL4Protocol_methods(root_module, root_module['ns3::TcpL4Protocol'])
     register_Ns3TcpNewReno_methods(root_module, root_module['ns3::TcpNewReno'])
     register_Ns3TcpReno_methods(root_module, root_module['ns3::TcpReno'])
@@ -1537,6 +1568,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', 
@@ -1549,6 +1584,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', 
@@ -3226,6 +3265,11 @@
                    'ns3::Ipv6InterfaceAddress::State_e', 
                    [], 
                    is_const=True)
+    ## ipv6-interface-address.h (module 'internet'): bool ns3::Ipv6InterfaceAddress::IsInSameSubnet(ns3::Ipv6Address b) const [member function]
+    cls.add_method('IsInSameSubnet', 
+                   'bool', 
+                   [param('ns3::Ipv6Address', 'b')], 
+                   is_const=True)
     ## ipv6-interface-address.h (module 'internet'): void ns3::Ipv6InterfaceAddress::SetAddress(ns3::Ipv6Address address) [member function]
     cls.add_method('SetAddress', 
                    'void', 
@@ -4322,6 +4366,91 @@
                    is_pure_virtual=True, is_virtual=True)
     return
 
+def register_Ns3RipNgHelper_methods(root_module, cls):
+    ## ripng-helper.h (module 'internet'): ns3::RipNgHelper::RipNgHelper() [constructor]
+    cls.add_constructor([])
+    ## ripng-helper.h (module 'internet'): ns3::RipNgHelper::RipNgHelper(ns3::RipNgHelper const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::RipNgHelper const &', 'arg0')])
+    ## ripng-helper.h (module 'internet'): ns3::RipNgHelper * ns3::RipNgHelper::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::RipNgHelper *', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## ripng-helper.h (module 'internet'): ns3::Ptr<ns3::Ipv6RoutingProtocol> ns3::RipNgHelper::Create(ns3::Ptr<ns3::Node> node) const [member function]
+    cls.add_method('Create', 
+                   'ns3::Ptr< ns3::Ipv6RoutingProtocol >', 
+                   [param('ns3::Ptr< ns3::Node >', 'node')], 
+                   is_const=True, is_virtual=True)
+    ## ripng-helper.h (module 'internet'): void ns3::RipNgHelper::Set(std::string name, ns3::AttributeValue const & value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('std::string', 'name'), param('ns3::AttributeValue const &', 'value')])
+    ## ripng-helper.h (module 'internet'): int64_t ns3::RipNgHelper::AssignStreams(ns3::NodeContainer c, int64_t stream) [member function]
+    cls.add_method('AssignStreams', 
+                   'int64_t', 
+                   [param('ns3::NodeContainer', 'c'), param('int64_t', 'stream')])
+    ## ripng-helper.h (module 'internet'): void ns3::RipNgHelper::SetDefaultRouter(ns3::Ptr<ns3::Node> node, ns3::Ipv6Address nextHop, uint32_t interface) [member function]
+    cls.add_method('SetDefaultRouter', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Node >', 'node'), param('ns3::Ipv6Address', 'nextHop'), param('uint32_t', 'interface')])
+    ## ripng-helper.h (module 'internet'): void ns3::RipNgHelper::ExcludeInterface(ns3::Ptr<ns3::Node> node, uint32_t interface) [member function]
+    cls.add_method('ExcludeInterface', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Node >', 'node'), param('uint32_t', 'interface')])
+    ## ripng-helper.h (module 'internet'): void ns3::RipNgHelper::SetInterfaceMetric(ns3::Ptr<ns3::Node> node, uint32_t interface, uint8_t metric) [member function]
+    cls.add_method('SetInterfaceMetric', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Node >', 'node'), param('uint32_t', 'interface'), param('uint8_t', 'metric')])
+    return
+
+def register_Ns3RipNgRoutingTableEntry_methods(root_module, cls):
+    cls.add_output_stream_operator()
+    ## ripng.h (module 'internet'): ns3::RipNgRoutingTableEntry::RipNgRoutingTableEntry(ns3::RipNgRoutingTableEntry const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::RipNgRoutingTableEntry const &', 'arg0')])
+    ## ripng.h (module 'internet'): ns3::RipNgRoutingTableEntry::RipNgRoutingTableEntry() [constructor]
+    cls.add_constructor([])
+    ## ripng.h (module 'internet'): ns3::RipNgRoutingTableEntry::RipNgRoutingTableEntry(ns3::Ipv6Address network, ns3::Ipv6Prefix networkPrefix, ns3::Ipv6Address nextHop, uint32_t interface, ns3::Ipv6Address prefixToUse) [constructor]
+    cls.add_constructor([param('ns3::Ipv6Address', 'network'), param('ns3::Ipv6Prefix', 'networkPrefix'), param('ns3::Ipv6Address', 'nextHop'), param('uint32_t', 'interface'), param('ns3::Ipv6Address', 'prefixToUse')])
+    ## ripng.h (module 'internet'): ns3::RipNgRoutingTableEntry::RipNgRoutingTableEntry(ns3::Ipv6Address network, ns3::Ipv6Prefix networkPrefix, uint32_t interface) [constructor]
+    cls.add_constructor([param('ns3::Ipv6Address', 'network'), param('ns3::Ipv6Prefix', 'networkPrefix'), param('uint32_t', 'interface')])
+    ## ripng.h (module 'internet'): uint8_t ns3::RipNgRoutingTableEntry::GetRouteMetric() const [member function]
+    cls.add_method('GetRouteMetric', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## ripng.h (module 'internet'): ns3::RipNgRoutingTableEntry::Status_e ns3::RipNgRoutingTableEntry::GetRouteStatus() const [member function]
+    cls.add_method('GetRouteStatus', 
+                   'ns3::RipNgRoutingTableEntry::Status_e', 
+                   [], 
+                   is_const=True)
+    ## ripng.h (module 'internet'): uint16_t ns3::RipNgRoutingTableEntry::GetRouteTag() const [member function]
+    cls.add_method('GetRouteTag', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## ripng.h (module 'internet'): bool ns3::RipNgRoutingTableEntry::IsRouteChanged() const [member function]
+    cls.add_method('IsRouteChanged', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## ripng.h (module 'internet'): void ns3::RipNgRoutingTableEntry::SetRouteChanged(bool changed) [member function]
+    cls.add_method('SetRouteChanged', 
+                   'void', 
+                   [param('bool', 'changed')])
+    ## ripng.h (module 'internet'): void ns3::RipNgRoutingTableEntry::SetRouteMetric(uint8_t routeMetric) [member function]
+    cls.add_method('SetRouteMetric', 
+                   'void', 
+                   [param('uint8_t', 'routeMetric')])
+    ## ripng.h (module 'internet'): void ns3::RipNgRoutingTableEntry::SetRouteStatus(ns3::RipNgRoutingTableEntry::Status_e status) [member function]
+    cls.add_method('SetRouteStatus', 
+                   'void', 
+                   [param('ns3::RipNgRoutingTableEntry::Status_e', 'status')])
+    ## ripng.h (module 'internet'): void ns3::RipNgRoutingTableEntry::SetRouteTag(uint16_t routeTag) [member function]
+    cls.add_method('SetRouteTag', 
+                   'void', 
+                   [param('uint16_t', 'routeTag')])
+    return
+
 def register_Ns3RttHistory_methods(root_module, cls):
     ## rtt-estimator.h (module 'internet'): ns3::RttHistory::RttHistory(ns3::SequenceNumber32 s, uint32_t c, ns3::Time t) [constructor]
     cls.add_constructor([param('ns3::SequenceNumber32', 's'), param('uint32_t', 'c'), param('ns3::Time', 't')])
@@ -4453,11 +4582,11 @@
 
 def register_Ns3SequenceNumber32_methods(root_module, cls):
     cls.add_binary_comparison_operator('!=')
-    cls.add_binary_numeric_operator('+', root_module['ns3::SequenceNumber32'], root_module['ns3::SequenceNumber32'], param('ns3::SequenceNumber< unsigned int, int > const &', 'right'))
-    cls.add_binary_numeric_operator('+', root_module['ns3::SequenceNumber32'], root_module['ns3::SequenceNumber32'], param('int', 'right'))
-    cls.add_inplace_numeric_operator('+=', param('int', 'right'))
-    cls.add_binary_numeric_operator('-', root_module['ns3::SequenceNumber32'], root_module['ns3::SequenceNumber32'], param('int', 'right'))
-    cls.add_inplace_numeric_operator('-=', param('int', 'right'))
+    cls.add_binary_numeric_operator('+', root_module['ns3::SequenceNumber32'], root_module['ns3::SequenceNumber32'], param('ns3::SequenceNumber< unsigned int, int > const &', u'right'))
+    cls.add_binary_numeric_operator('+', root_module['ns3::SequenceNumber32'], root_module['ns3::SequenceNumber32'], param('int', u'right'))
+    cls.add_inplace_numeric_operator('+=', param('int', u'right'))
+    cls.add_binary_numeric_operator('-', root_module['ns3::SequenceNumber32'], root_module['ns3::SequenceNumber32'], param('int', u'right'))
+    cls.add_inplace_numeric_operator('-=', param('int', u'right'))
     cls.add_binary_comparison_operator('<')
     cls.add_binary_comparison_operator('<=')
     cls.add_binary_comparison_operator('==')
@@ -4663,6 +4792,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_Ns3Timer_methods(root_module, cls):
     ## timer.h (module 'core'): ns3::Timer::Timer(ns3::Timer const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::Timer const &', 'arg0')])
@@ -5082,61 +5219,17 @@
 def register_Ns3Int64x64_t_methods(root_module, cls):
     cls.add_binary_comparison_operator('<=')
     cls.add_binary_comparison_operator('!=')
-    cls.add_inplace_numeric_operator('+=', 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 &', '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_inplace_numeric_operator('+=', 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_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_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_output_stream_operator()
     cls.add_binary_comparison_operator('==')
     cls.add_binary_comparison_operator('>=')
@@ -5144,6 +5237,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]
@@ -5184,6 +5279,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):
@@ -7524,6 +7621,143 @@
                    is_const=True, visibility='protected')
     return
 
+def register_Ns3RipNgHeader_methods(root_module, cls):
+    ## ripng-header.h (module 'internet'): ns3::RipNgHeader::RipNgHeader(ns3::RipNgHeader const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::RipNgHeader const &', 'arg0')])
+    ## ripng-header.h (module 'internet'): ns3::RipNgHeader::RipNgHeader() [constructor]
+    cls.add_constructor([])
+    ## ripng-header.h (module 'internet'): void ns3::RipNgHeader::AddRte(ns3::RipNgRte rte) [member function]
+    cls.add_method('AddRte', 
+                   'void', 
+                   [param('ns3::RipNgRte', 'rte')])
+    ## ripng-header.h (module 'internet'): void ns3::RipNgHeader::ClearRtes() [member function]
+    cls.add_method('ClearRtes', 
+                   'void', 
+                   [])
+    ## ripng-header.h (module 'internet'): uint32_t ns3::RipNgHeader::Deserialize(ns3::Buffer::Iterator start) [member function]
+    cls.add_method('Deserialize', 
+                   'uint32_t', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_virtual=True)
+    ## ripng-header.h (module 'internet'): ns3::RipNgHeader::Command_e ns3::RipNgHeader::GetCommand() const [member function]
+    cls.add_method('GetCommand', 
+                   'ns3::RipNgHeader::Command_e', 
+                   [], 
+                   is_const=True)
+    ## ripng-header.h (module 'internet'): ns3::TypeId ns3::RipNgHeader::GetInstanceTypeId() const [member function]
+    cls.add_method('GetInstanceTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## ripng-header.h (module 'internet'): std::list<ns3::RipNgRte, std::allocator<ns3::RipNgRte> > ns3::RipNgHeader::GetRteList() const [member function]
+    cls.add_method('GetRteList', 
+                   'std::list< ns3::RipNgRte >', 
+                   [], 
+                   is_const=True)
+    ## ripng-header.h (module 'internet'): uint16_t ns3::RipNgHeader::GetRteNumber() const [member function]
+    cls.add_method('GetRteNumber', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## ripng-header.h (module 'internet'): uint32_t ns3::RipNgHeader::GetSerializedSize() const [member function]
+    cls.add_method('GetSerializedSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## ripng-header.h (module 'internet'): static ns3::TypeId ns3::RipNgHeader::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## ripng-header.h (module 'internet'): void ns3::RipNgHeader::Print(std::ostream & os) const [member function]
+    cls.add_method('Print', 
+                   'void', 
+                   [param('std::ostream &', 'os')], 
+                   is_const=True, is_virtual=True)
+    ## ripng-header.h (module 'internet'): void ns3::RipNgHeader::Serialize(ns3::Buffer::Iterator start) const [member function]
+    cls.add_method('Serialize', 
+                   'void', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_const=True, is_virtual=True)
+    ## ripng-header.h (module 'internet'): void ns3::RipNgHeader::SetCommand(ns3::RipNgHeader::Command_e command) [member function]
+    cls.add_method('SetCommand', 
+                   'void', 
+                   [param('ns3::RipNgHeader::Command_e', 'command')])
+    return
+
+def register_Ns3RipNgRte_methods(root_module, cls):
+    ## ripng-header.h (module 'internet'): ns3::RipNgRte::RipNgRte(ns3::RipNgRte const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::RipNgRte const &', 'arg0')])
+    ## ripng-header.h (module 'internet'): ns3::RipNgRte::RipNgRte() [constructor]
+    cls.add_constructor([])
+    ## ripng-header.h (module 'internet'): uint32_t ns3::RipNgRte::Deserialize(ns3::Buffer::Iterator start) [member function]
+    cls.add_method('Deserialize', 
+                   'uint32_t', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_virtual=True)
+    ## ripng-header.h (module 'internet'): ns3::TypeId ns3::RipNgRte::GetInstanceTypeId() const [member function]
+    cls.add_method('GetInstanceTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## ripng-header.h (module 'internet'): ns3::Ipv6Address ns3::RipNgRte::GetPrefix() const [member function]
+    cls.add_method('GetPrefix', 
+                   'ns3::Ipv6Address', 
+                   [], 
+                   is_const=True)
+    ## ripng-header.h (module 'internet'): uint8_t ns3::RipNgRte::GetPrefixLen() const [member function]
+    cls.add_method('GetPrefixLen', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## ripng-header.h (module 'internet'): uint8_t ns3::RipNgRte::GetRouteMetric() const [member function]
+    cls.add_method('GetRouteMetric', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## ripng-header.h (module 'internet'): uint16_t ns3::RipNgRte::GetRouteTag() const [member function]
+    cls.add_method('GetRouteTag', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## ripng-header.h (module 'internet'): uint32_t ns3::RipNgRte::GetSerializedSize() const [member function]
+    cls.add_method('GetSerializedSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## ripng-header.h (module 'internet'): static ns3::TypeId ns3::RipNgRte::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## ripng-header.h (module 'internet'): void ns3::RipNgRte::Print(std::ostream & os) const [member function]
+    cls.add_method('Print', 
+                   'void', 
+                   [param('std::ostream &', 'os')], 
+                   is_const=True, is_virtual=True)
+    ## ripng-header.h (module 'internet'): void ns3::RipNgRte::Serialize(ns3::Buffer::Iterator start) const [member function]
+    cls.add_method('Serialize', 
+                   'void', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_const=True, is_virtual=True)
+    ## ripng-header.h (module 'internet'): void ns3::RipNgRte::SetPrefix(ns3::Ipv6Address prefix) [member function]
+    cls.add_method('SetPrefix', 
+                   'void', 
+                   [param('ns3::Ipv6Address', 'prefix')])
+    ## ripng-header.h (module 'internet'): void ns3::RipNgRte::SetPrefixLen(uint8_t prefixLen) [member function]
+    cls.add_method('SetPrefixLen', 
+                   'void', 
+                   [param('uint8_t', 'prefixLen')])
+    ## ripng-header.h (module 'internet'): void ns3::RipNgRte::SetRouteMetric(uint8_t routeMetric) [member function]
+    cls.add_method('SetRouteMetric', 
+                   'void', 
+                   [param('uint8_t', 'routeMetric')])
+    ## ripng-header.h (module 'internet'): void ns3::RipNgRte::SetRouteTag(uint16_t routeTag) [member function]
+    cls.add_method('SetRouteTag', 
+                   'void', 
+                   [param('uint16_t', 'routeTag')])
+    return
+
 def register_Ns3RttEstimator_methods(root_module, cls):
     ## rtt-estimator.h (module 'internet'): ns3::RttEstimator::RttEstimator() [constructor]
     cls.add_constructor([])
@@ -9547,12 +9781,14 @@
 def register_Ns3Time_methods(root_module, cls):
     cls.add_binary_comparison_operator('<=')
     cls.add_binary_comparison_operator('!=')
-    cls.add_inplace_numeric_operator('+=', 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('ns3::Time const &', 'right'))
+    cls.add_inplace_numeric_operator('+=', 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_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_inplace_numeric_operator('-=', param('ns3::Time const &', '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('>=')
@@ -9578,6 +9814,11 @@
     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', 
@@ -11746,6 +11987,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', 
@@ -12366,6 +12612,11 @@
                    'ns3::Ptr< ns3::NetDevice >', 
                    [param('uint32_t', 'interface')], 
                    is_pure_virtual=True, is_virtual=True)
+    ## ipv6.h (module 'internet'): ns3::Ptr<ns3::IpL4Protocol> ns3::Ipv6::GetProtocol(int protocolNumber) const [member function]
+    cls.add_method('GetProtocol', 
+                   'ns3::Ptr< ns3::IpL4Protocol >', 
+                   [param('int', 'protocolNumber')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## ipv6.h (module 'internet'): ns3::Ptr<ns3::Ipv6RoutingProtocol> ns3::Ipv6::GetRoutingProtocol() const [member function]
     cls.add_method('GetRoutingProtocol', 
                    'ns3::Ptr< ns3::Ipv6RoutingProtocol >', 
@@ -12436,6 +12687,11 @@
                    'void', 
                    [param('uint32_t', 'interface')], 
                    is_pure_virtual=True, is_virtual=True)
+    ## ipv6.h (module 'internet'): ns3::Ipv6Address ns3::Ipv6::SourceAddressSelection(uint32_t interface, ns3::Ipv6Address dest) [member function]
+    cls.add_method('SourceAddressSelection', 
+                   'ns3::Ipv6Address', 
+                   [param('uint32_t', 'interface'), param('ns3::Ipv6Address', 'dest')], 
+                   is_pure_virtual=True, is_virtual=True)
     ## ipv6.h (module 'internet'): ns3::Ipv6::IF_ANY [variable]
     cls.add_static_attribute('IF_ANY', 'uint32_t const', is_const=True)
     ## ipv6.h (module 'internet'): bool ns3::Ipv6::GetIpForward() const [member function]
@@ -12524,15 +12780,15 @@
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
-    ## ipv6-extension.h (module 'internet'): uint8_t ns3::Ipv6Extension::Process(ns3::Ptr<ns3::Packet> & packet, uint8_t offset, ns3::Ipv6Header const & ipv6Header, ns3::Ipv6Address dst, uint8_t * nextHeader, bool & isDropped) [member function]
+    ## ipv6-extension.h (module 'internet'): uint8_t ns3::Ipv6Extension::Process(ns3::Ptr<ns3::Packet> & packet, uint8_t offset, ns3::Ipv6Header const & ipv6Header, ns3::Ipv6Address dst, uint8_t * nextHeader, bool & stopProcessing, bool & isDropped, ns3::Ipv6L3Protocol::DropReason & dropReason) [member function]
     cls.add_method('Process', 
                    'uint8_t', 
-                   [param('ns3::Ptr< ns3::Packet > &', 'packet'), param('uint8_t', 'offset'), param('ns3::Ipv6Header const &', 'ipv6Header'), param('ns3::Ipv6Address', 'dst'), param('uint8_t *', 'nextHeader'), param('bool &', 'isDropped')], 
+                   [param('ns3::Ptr< ns3::Packet > &', 'packet'), param('uint8_t', 'offset'), param('ns3::Ipv6Header const &', 'ipv6Header'), param('ns3::Ipv6Address', 'dst'), param('uint8_t *', 'nextHeader'), param('bool &', 'stopProcessing'), param('bool &', 'isDropped'), param('ns3::Ipv6L3Protocol::DropReason &', 'dropReason')], 
                    is_pure_virtual=True, is_virtual=True)
-    ## ipv6-extension.h (module 'internet'): uint8_t ns3::Ipv6Extension::ProcessOptions(ns3::Ptr<ns3::Packet> & packet, uint8_t offset, uint8_t length, ns3::Ipv6Header const & ipv6Header, ns3::Ipv6Address dst, uint8_t * nextHeader, bool & isDropped) [member function]
+    ## ipv6-extension.h (module 'internet'): uint8_t ns3::Ipv6Extension::ProcessOptions(ns3::Ptr<ns3::Packet> & packet, uint8_t offset, uint8_t length, ns3::Ipv6Header const & ipv6Header, ns3::Ipv6Address dst, uint8_t * nextHeader, bool & stopProcessing, bool & isDropped, ns3::Ipv6L3Protocol::DropReason & dropReason) [member function]
     cls.add_method('ProcessOptions', 
                    'uint8_t', 
-                   [param('ns3::Ptr< ns3::Packet > &', 'packet'), param('uint8_t', 'offset'), param('uint8_t', 'length'), param('ns3::Ipv6Header const &', 'ipv6Header'), param('ns3::Ipv6Address', 'dst'), param('uint8_t *', 'nextHeader'), param('bool &', 'isDropped')], 
+                   [param('ns3::Ptr< ns3::Packet > &', 'packet'), param('uint8_t', 'offset'), param('uint8_t', 'length'), param('ns3::Ipv6Header const &', 'ipv6Header'), param('ns3::Ipv6Address', 'dst'), param('uint8_t *', 'nextHeader'), param('bool &', 'stopProcessing'), param('bool &', 'isDropped'), param('ns3::Ipv6L3Protocol::DropReason &', 'dropReason')], 
                    is_virtual=True)
     ## ipv6-extension.h (module 'internet'): void ns3::Ipv6Extension::SetNode(ns3::Ptr<ns3::Node> node) [member function]
     cls.add_method('SetNode', 
@@ -12555,10 +12811,10 @@
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
-    ## ipv6-extension.h (module 'internet'): uint8_t ns3::Ipv6ExtensionAH::Process(ns3::Ptr<ns3::Packet> & packet, uint8_t offset, ns3::Ipv6Header const & ipv6Header, ns3::Ipv6Address dst, uint8_t * nextHeader, bool & isDropped) [member function]
+    ## ipv6-extension.h (module 'internet'): uint8_t ns3::Ipv6ExtensionAH::Process(ns3::Ptr<ns3::Packet> & packet, uint8_t offset, ns3::Ipv6Header const & ipv6Header, ns3::Ipv6Address dst, uint8_t * nextHeader, bool & stopProcessing, bool & isDropped, ns3::Ipv6L3Protocol::DropReason & dropReason) [member function]
     cls.add_method('Process', 
                    'uint8_t', 
-                   [param('ns3::Ptr< ns3::Packet > &', 'packet'), param('uint8_t', 'offset'), param('ns3::Ipv6Header const &', 'ipv6Header'), param('ns3::Ipv6Address', 'dst'), param('uint8_t *', 'nextHeader'), param('bool &', 'isDropped')], 
+                   [param('ns3::Ptr< ns3::Packet > &', 'packet'), param('uint8_t', 'offset'), param('ns3::Ipv6Header const &', 'ipv6Header'), param('ns3::Ipv6Address', 'dst'), param('uint8_t *', 'nextHeader'), param('bool &', 'stopProcessing'), param('bool &', 'isDropped'), param('ns3::Ipv6L3Protocol::DropReason &', 'dropReason')], 
                    is_virtual=True)
     ## ipv6-extension.h (module 'internet'): ns3::Ipv6ExtensionAH::EXT_NUMBER [variable]
     cls.add_static_attribute('EXT_NUMBER', 'uint8_t const', is_const=True)
@@ -12649,10 +12905,10 @@
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
-    ## ipv6-extension.h (module 'internet'): uint8_t ns3::Ipv6ExtensionDestination::Process(ns3::Ptr<ns3::Packet> & packet, uint8_t offset, ns3::Ipv6Header const & ipv6Header, ns3::Ipv6Address dst, uint8_t * nextHeader, bool & isDropped) [member function]
+    ## ipv6-extension.h (module 'internet'): uint8_t ns3::Ipv6ExtensionDestination::Process(ns3::Ptr<ns3::Packet> & packet, uint8_t offset, ns3::Ipv6Header const & ipv6Header, ns3::Ipv6Address dst, uint8_t * nextHeader, bool & stopProcessing, bool & isDropped, ns3::Ipv6L3Protocol::DropReason & dropReason) [member function]
     cls.add_method('Process', 
                    'uint8_t', 
-                   [param('ns3::Ptr< ns3::Packet > &', 'packet'), param('uint8_t', 'offset'), param('ns3::Ipv6Header const &', 'ipv6Header'), param('ns3::Ipv6Address', 'dst'), param('uint8_t *', 'nextHeader'), param('bool &', 'isDropped')], 
+                   [param('ns3::Ptr< ns3::Packet > &', 'packet'), param('uint8_t', 'offset'), param('ns3::Ipv6Header const &', 'ipv6Header'), param('ns3::Ipv6Address', 'dst'), param('uint8_t *', 'nextHeader'), param('bool &', 'stopProcessing'), param('bool &', 'isDropped'), param('ns3::Ipv6L3Protocol::DropReason &', 'dropReason')], 
                    is_virtual=True)
     ## ipv6-extension.h (module 'internet'): ns3::Ipv6ExtensionDestination::EXT_NUMBER [variable]
     cls.add_static_attribute('EXT_NUMBER', 'uint8_t const', is_const=True)
@@ -12710,10 +12966,10 @@
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
-    ## ipv6-extension.h (module 'internet'): uint8_t ns3::Ipv6ExtensionESP::Process(ns3::Ptr<ns3::Packet> & packet, uint8_t offset, ns3::Ipv6Header const & ipv6Header, ns3::Ipv6Address dst, uint8_t * nextHeader, bool & isDropped) [member function]
+    ## ipv6-extension.h (module 'internet'): uint8_t ns3::Ipv6ExtensionESP::Process(ns3::Ptr<ns3::Packet> & packet, uint8_t offset, ns3::Ipv6Header const & ipv6Header, ns3::Ipv6Address dst, uint8_t * nextHeader, bool & stopProcessing, bool & isDropped, ns3::Ipv6L3Protocol::DropReason & dropReason) [member function]
     cls.add_method('Process', 
                    'uint8_t', 
-                   [param('ns3::Ptr< ns3::Packet > &', 'packet'), param('uint8_t', 'offset'), param('ns3::Ipv6Header const &', 'ipv6Header'), param('ns3::Ipv6Address', 'dst'), param('uint8_t *', 'nextHeader'), param('bool &', 'isDropped')], 
+                   [param('ns3::Ptr< ns3::Packet > &', 'packet'), param('uint8_t', 'offset'), param('ns3::Ipv6Header const &', 'ipv6Header'), param('ns3::Ipv6Address', 'dst'), param('uint8_t *', 'nextHeader'), param('bool &', 'stopProcessing'), param('bool &', 'isDropped'), param('ns3::Ipv6L3Protocol::DropReason &', 'dropReason')], 
                    is_virtual=True)
     ## ipv6-extension.h (module 'internet'): ns3::Ipv6ExtensionESP::EXT_NUMBER [variable]
     cls.add_static_attribute('EXT_NUMBER', 'uint8_t const', is_const=True)
@@ -12775,10 +13031,10 @@
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
-    ## ipv6-extension.h (module 'internet'): uint8_t ns3::Ipv6ExtensionFragment::Process(ns3::Ptr<ns3::Packet> & packet, uint8_t offset, ns3::Ipv6Header const & ipv6Header, ns3::Ipv6Address dst, uint8_t * nextHeader, bool & isDropped) [member function]
+    ## ipv6-extension.h (module 'internet'): uint8_t ns3::Ipv6ExtensionFragment::Process(ns3::Ptr<ns3::Packet> & packet, uint8_t offset, ns3::Ipv6Header const & ipv6Header, ns3::Ipv6Address dst, uint8_t * nextHeader, bool & stopProcessing, bool & isDropped, ns3::Ipv6L3Protocol::DropReason & dropReason) [member function]
     cls.add_method('Process', 
                    'uint8_t', 
-                   [param('ns3::Ptr< ns3::Packet > &', 'packet'), param('uint8_t', 'offset'), param('ns3::Ipv6Header const &', 'ipv6Header'), param('ns3::Ipv6Address', 'dst'), param('uint8_t *', 'nextHeader'), param('bool &', 'isDropped')], 
+                   [param('ns3::Ptr< ns3::Packet > &', 'packet'), param('uint8_t', 'offset'), param('ns3::Ipv6Header const &', 'ipv6Header'), param('ns3::Ipv6Address', 'dst'), param('uint8_t *', 'nextHeader'), param('bool &', 'stopProcessing'), param('bool &', 'isDropped'), param('ns3::Ipv6L3Protocol::DropReason &', 'dropReason')], 
                    is_virtual=True)
     ## ipv6-extension.h (module 'internet'): ns3::Ipv6ExtensionFragment::EXT_NUMBER [variable]
     cls.add_static_attribute('EXT_NUMBER', 'uint8_t const', is_const=True)
@@ -12868,10 +13124,10 @@
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
-    ## ipv6-extension.h (module 'internet'): uint8_t ns3::Ipv6ExtensionHopByHop::Process(ns3::Ptr<ns3::Packet> & packet, uint8_t offset, ns3::Ipv6Header const & ipv6Header, ns3::Ipv6Address dst, uint8_t * nextHeader, bool & isDropped) [member function]
+    ## ipv6-extension.h (module 'internet'): uint8_t ns3::Ipv6ExtensionHopByHop::Process(ns3::Ptr<ns3::Packet> & packet, uint8_t offset, ns3::Ipv6Header const & ipv6Header, ns3::Ipv6Address dst, uint8_t * nextHeader, bool & stopProcessing, bool & isDropped, ns3::Ipv6L3Protocol::DropReason & dropReason) [member function]
     cls.add_method('Process', 
                    'uint8_t', 
-                   [param('ns3::Ptr< ns3::Packet > &', 'packet'), param('uint8_t', 'offset'), param('ns3::Ipv6Header const &', 'ipv6Header'), param('ns3::Ipv6Address', 'dst'), param('uint8_t *', 'nextHeader'), param('bool &', 'isDropped')], 
+                   [param('ns3::Ptr< ns3::Packet > &', 'packet'), param('uint8_t', 'offset'), param('ns3::Ipv6Header const &', 'ipv6Header'), param('ns3::Ipv6Address', 'dst'), param('uint8_t *', 'nextHeader'), param('bool &', 'stopProcessing'), param('bool &', 'isDropped'), param('ns3::Ipv6L3Protocol::DropReason &', 'dropReason')], 
                    is_virtual=True)
     ## ipv6-extension.h (module 'internet'): ns3::Ipv6ExtensionHopByHop::EXT_NUMBER [variable]
     cls.add_static_attribute('EXT_NUMBER', 'uint8_t const', is_const=True)
@@ -12956,10 +13212,10 @@
                    'uint8_t', 
                    [], 
                    is_const=True, is_virtual=True)
-    ## ipv6-extension.h (module 'internet'): uint8_t ns3::Ipv6ExtensionRouting::Process(ns3::Ptr<ns3::Packet> & packet, uint8_t offset, ns3::Ipv6Header const & ipv6Header, ns3::Ipv6Address dst, uint8_t * nextHeader, bool & isDropped) [member function]
+    ## ipv6-extension.h (module 'internet'): uint8_t ns3::Ipv6ExtensionRouting::Process(ns3::Ptr<ns3::Packet> & packet, uint8_t offset, ns3::Ipv6Header const & ipv6Header, ns3::Ipv6Address dst, uint8_t * nextHeader, bool & stopProcessing, bool & isDropped, ns3::Ipv6L3Protocol::DropReason & dropReason) [member function]
     cls.add_method('Process', 
                    'uint8_t', 
-                   [param('ns3::Ptr< ns3::Packet > &', 'packet'), param('uint8_t', 'offset'), param('ns3::Ipv6Header const &', 'ipv6Header'), param('ns3::Ipv6Address', 'dst'), param('uint8_t *', 'nextHeader'), param('bool &', 'isDropped')], 
+                   [param('ns3::Ptr< ns3::Packet > &', 'packet'), param('uint8_t', 'offset'), param('ns3::Ipv6Header const &', 'ipv6Header'), param('ns3::Ipv6Address', 'dst'), param('uint8_t *', 'nextHeader'), param('bool &', 'stopProcessing'), param('bool &', 'isDropped'), param('ns3::Ipv6L3Protocol::DropReason &', 'dropReason')], 
                    is_virtual=True)
     ## ipv6-extension.h (module 'internet'): ns3::Ipv6ExtensionRouting::EXT_NUMBER [variable]
     cls.add_static_attribute('EXT_NUMBER', 'uint8_t const', is_const=True)
@@ -13169,7 +13425,7 @@
     cls.add_method('GetProtocol', 
                    'ns3::Ptr< ns3::IpL4Protocol >', 
                    [param('int', 'protocolNumber')], 
-                   is_const=True)
+                   is_const=True, is_virtual=True)
     ## ipv6-l3-protocol.h (module 'internet'): ns3::Ptr<ns3::Socket> ns3::Ipv6L3Protocol::CreateRawSocket() [member function]
     cls.add_method('CreateRawSocket', 
                    'ns3::Ptr< ns3::Socket >', 
@@ -13304,6 +13560,11 @@
                    'void', 
                    [param('uint32_t', 'i'), param('bool', 'val')], 
                    is_virtual=True)
+    ## ipv6-l3-protocol.h (module 'internet'): ns3::Ipv6Address ns3::Ipv6L3Protocol::SourceAddressSelection(uint32_t interface, ns3::Ipv6Address dest) [member function]
+    cls.add_method('SourceAddressSelection', 
+                   'ns3::Ipv6Address', 
+                   [param('uint32_t', 'interface'), param('ns3::Ipv6Address', 'dest')], 
+                   is_virtual=True)
     ## ipv6-l3-protocol.h (module 'internet'): ns3::Ptr<ns3::NetDevice> ns3::Ipv6L3Protocol::GetNetDevice(uint32_t i) [member function]
     cls.add_method('GetNetDevice', 
                    'ns3::Ptr< ns3::NetDevice >', 
@@ -13332,6 +13593,11 @@
                    'void', 
                    [], 
                    is_virtual=True)
+    ## ipv6-l3-protocol.h (module 'internet'): void ns3::Ipv6L3Protocol::ReportDrop(ns3::Ipv6Header ipHeader, ns3::Ptr<ns3::Packet> p, ns3::Ipv6L3Protocol::DropReason dropReason) [member function]
+    cls.add_method('ReportDrop', 
+                   'void', 
+                   [param('ns3::Ipv6Header', 'ipHeader'), param('ns3::Ptr< ns3::Packet >', 'p'), param('ns3::Ipv6L3Protocol::DropReason', 'dropReason')], 
+                   is_virtual=True)
     ## ipv6-l3-protocol.h (module 'internet'): void ns3::Ipv6L3Protocol::DoDispose() [member function]
     cls.add_method('DoDispose', 
                    'void', 
@@ -14596,10 +14862,10 @@
                    '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')])
     return
 
 def register_Ns3ParetoRandomVariable_methods(root_module, cls):
@@ -14672,6 +14938,104 @@
                    is_const=True, is_virtual=True)
     return
 
+def register_Ns3RipNg_methods(root_module, cls):
+    ## ripng.h (module 'internet'): ns3::RipNg::RipNg(ns3::RipNg const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::RipNg const &', 'arg0')])
+    ## ripng.h (module 'internet'): ns3::RipNg::RipNg() [constructor]
+    cls.add_constructor([])
+    ## ripng.h (module 'internet'): void ns3::RipNg::AddDefaultRouteTo(ns3::Ipv6Address nextHop, uint32_t interface) [member function]
+    cls.add_method('AddDefaultRouteTo', 
+                   'void', 
+                   [param('ns3::Ipv6Address', 'nextHop'), param('uint32_t', 'interface')])
+    ## ripng.h (module 'internet'): int64_t ns3::RipNg::AssignStreams(int64_t stream) [member function]
+    cls.add_method('AssignStreams', 
+                   'int64_t', 
+                   [param('int64_t', 'stream')])
+    ## ripng.h (module 'internet'): std::set<unsigned int, std::less<unsigned int>, std::allocator<unsigned int> > ns3::RipNg::GetInterfaceExclusions() const [member function]
+    cls.add_method('GetInterfaceExclusions', 
+                   'std::set< unsigned int >', 
+                   [], 
+                   is_const=True)
+    ## ripng.h (module 'internet'): uint8_t ns3::RipNg::GetInterfaceMetric(uint32_t interface) const [member function]
+    cls.add_method('GetInterfaceMetric', 
+                   'uint8_t', 
+                   [param('uint32_t', 'interface')], 
+                   is_const=True)
+    ## ripng.h (module 'internet'): static ns3::TypeId ns3::RipNg::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## ripng.h (module 'internet'): void ns3::RipNg::NotifyAddAddress(uint32_t interface, ns3::Ipv6InterfaceAddress address) [member function]
+    cls.add_method('NotifyAddAddress', 
+                   'void', 
+                   [param('uint32_t', 'interface'), param('ns3::Ipv6InterfaceAddress', 'address')], 
+                   is_virtual=True)
+    ## ripng.h (module 'internet'): void ns3::RipNg::NotifyAddRoute(ns3::Ipv6Address dst, ns3::Ipv6Prefix mask, ns3::Ipv6Address nextHop, uint32_t interface, ns3::Ipv6Address prefixToUse=ns3::Ipv6Address::GetZero( )) [member function]
+    cls.add_method('NotifyAddRoute', 
+                   'void', 
+                   [param('ns3::Ipv6Address', 'dst'), param('ns3::Ipv6Prefix', 'mask'), param('ns3::Ipv6Address', 'nextHop'), param('uint32_t', 'interface'), param('ns3::Ipv6Address', 'prefixToUse', default_value='ns3::Ipv6Address::GetZero( )')], 
+                   is_virtual=True)
+    ## ripng.h (module 'internet'): void ns3::RipNg::NotifyInterfaceDown(uint32_t interface) [member function]
+    cls.add_method('NotifyInterfaceDown', 
+                   'void', 
+                   [param('uint32_t', 'interface')], 
+                   is_virtual=True)
+    ## ripng.h (module 'internet'): void ns3::RipNg::NotifyInterfaceUp(uint32_t interface) [member function]
+    cls.add_method('NotifyInterfaceUp', 
+                   'void', 
+                   [param('uint32_t', 'interface')], 
+                   is_virtual=True)
+    ## ripng.h (module 'internet'): void ns3::RipNg::NotifyRemoveAddress(uint32_t interface, ns3::Ipv6InterfaceAddress address) [member function]
+    cls.add_method('NotifyRemoveAddress', 
+                   'void', 
+                   [param('uint32_t', 'interface'), param('ns3::Ipv6InterfaceAddress', 'address')], 
+                   is_virtual=True)
+    ## ripng.h (module 'internet'): void ns3::RipNg::NotifyRemoveRoute(ns3::Ipv6Address dst, ns3::Ipv6Prefix mask, ns3::Ipv6Address nextHop, uint32_t interface, ns3::Ipv6Address prefixToUse=ns3::Ipv6Address::GetZero( )) [member function]
+    cls.add_method('NotifyRemoveRoute', 
+                   'void', 
+                   [param('ns3::Ipv6Address', 'dst'), param('ns3::Ipv6Prefix', 'mask'), param('ns3::Ipv6Address', 'nextHop'), param('uint32_t', 'interface'), param('ns3::Ipv6Address', 'prefixToUse', default_value='ns3::Ipv6Address::GetZero( )')], 
+                   is_virtual=True)
+    ## ripng.h (module 'internet'): void ns3::RipNg::PrintRoutingTable(ns3::Ptr<ns3::OutputStreamWrapper> stream) const [member function]
+    cls.add_method('PrintRoutingTable', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream')], 
+                   is_const=True, is_virtual=True)
+    ## ripng.h (module 'internet'): bool ns3::RipNg::RouteInput(ns3::Ptr<ns3::Packet const> p, ns3::Ipv6Header const & header, ns3::Ptr<const ns3::NetDevice> idev, ns3::Callback<void,ns3::Ptr<const ns3::NetDevice>,ns3::Ptr<ns3::Ipv6Route>,ns3::Ptr<const ns3::Packet>,const ns3::Ipv6Header&,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> ucb, ns3::Callback<void,ns3::Ptr<const ns3::NetDevice>,ns3::Ptr<ns3::Ipv6MulticastRoute>,ns3::Ptr<const ns3::Packet>,const ns3::Ipv6Header&,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> mcb, ns3::Callback<void,ns3::Ptr<const ns3::Packet>,const ns3::Ipv6Header&,unsigned int,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> lcb, ns3::Callback<void,ns3::Ptr<const ns3::Packet>,const ns3::Ipv6Header&,ns3::Socket::SocketErrno,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> ecb) [member function]
+    cls.add_method('RouteInput', 
+                   'bool', 
+                   [param('ns3::Ptr< ns3::Packet const >', 'p'), param('ns3::Ipv6Header const &', 'header'), param('ns3::Ptr< ns3::NetDevice const >', 'idev'), param('ns3::Callback< void, ns3::Ptr< ns3::NetDevice const >, ns3::Ptr< ns3::Ipv6Route >, ns3::Ptr< ns3::Packet const >, ns3::Ipv6Header const &, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'ucb'), param('ns3::Callback< void, ns3::Ptr< ns3::NetDevice const >, ns3::Ptr< ns3::Ipv6MulticastRoute >, ns3::Ptr< ns3::Packet const >, ns3::Ipv6Header const &, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'mcb'), param('ns3::Callback< void, ns3::Ptr< ns3::Packet const >, ns3::Ipv6Header const &, unsigned int, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'lcb'), param('ns3::Callback< void, ns3::Ptr< ns3::Packet const >, ns3::Ipv6Header const &, ns3::Socket::SocketErrno, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'ecb')], 
+                   is_virtual=True)
+    ## ripng.h (module 'internet'): ns3::Ptr<ns3::Ipv6Route> ns3::RipNg::RouteOutput(ns3::Ptr<ns3::Packet> p, ns3::Ipv6Header const & header, ns3::Ptr<ns3::NetDevice> oif, ns3::Socket::SocketErrno & sockerr) [member function]
+    cls.add_method('RouteOutput', 
+                   'ns3::Ptr< ns3::Ipv6Route >', 
+                   [param('ns3::Ptr< ns3::Packet >', 'p'), param('ns3::Ipv6Header const &', 'header'), param('ns3::Ptr< ns3::NetDevice >', 'oif'), param('ns3::Socket::SocketErrno &', 'sockerr')], 
+                   is_virtual=True)
+    ## ripng.h (module 'internet'): void ns3::RipNg::SetInterfaceExclusions(std::set<unsigned int, std::less<unsigned int>, std::allocator<unsigned int> > exceptions) [member function]
+    cls.add_method('SetInterfaceExclusions', 
+                   'void', 
+                   [param('std::set< unsigned int >', 'exceptions')])
+    ## ripng.h (module 'internet'): void ns3::RipNg::SetInterfaceMetric(uint32_t interface, uint8_t metric) [member function]
+    cls.add_method('SetInterfaceMetric', 
+                   'void', 
+                   [param('uint32_t', 'interface'), param('uint8_t', 'metric')])
+    ## ripng.h (module 'internet'): void ns3::RipNg::SetIpv6(ns3::Ptr<ns3::Ipv6> ipv6) [member function]
+    cls.add_method('SetIpv6', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Ipv6 >', 'ipv6')], 
+                   is_virtual=True)
+    ## ripng.h (module 'internet'): void ns3::RipNg::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    ## ripng.h (module 'internet'): void ns3::RipNg::DoInitialize() [member function]
+    cls.add_method('DoInitialize', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    return
+
 def register_Ns3TcpL4Protocol_methods(root_module, cls):
     ## tcp-l4-protocol.h (module 'internet'): ns3::TcpL4Protocol::PROT_NUMBER [variable]
     cls.add_static_attribute('PROT_NUMBER', 'uint8_t const', is_const=True)
@@ -15975,10 +16339,10 @@
                    'uint8_t', 
                    [], 
                    is_const=True, is_virtual=True)
-    ## ipv6-extension.h (module 'internet'): uint8_t ns3::Ipv6ExtensionLooseRouting::Process(ns3::Ptr<ns3::Packet> & packet, uint8_t offset, ns3::Ipv6Header const & ipv6Header, ns3::Ipv6Address dst, uint8_t * nextHeader, bool & isDropped) [member function]
+    ## ipv6-extension.h (module 'internet'): uint8_t ns3::Ipv6ExtensionLooseRouting::Process(ns3::Ptr<ns3::Packet> & packet, uint8_t offset, ns3::Ipv6Header const & ipv6Header, ns3::Ipv6Address dst, uint8_t * nextHeader, bool & stopProcessing, bool & isDropped, ns3::Ipv6L3Protocol::DropReason & dropReason) [member function]
     cls.add_method('Process', 
                    'uint8_t', 
-                   [param('ns3::Ptr< ns3::Packet > &', 'packet'), param('uint8_t', 'offset'), param('ns3::Ipv6Header const &', 'ipv6Header'), param('ns3::Ipv6Address', 'dst'), param('uint8_t *', 'nextHeader'), param('bool &', 'isDropped')], 
+                   [param('ns3::Ptr< ns3::Packet > &', 'packet'), param('uint8_t', 'offset'), param('ns3::Ipv6Header const &', 'ipv6Header'), param('ns3::Ipv6Address', 'dst'), param('uint8_t *', 'nextHeader'), param('bool &', 'stopProcessing'), param('bool &', 'isDropped'), param('ns3::Ipv6L3Protocol::DropReason &', 'dropReason')], 
                    is_virtual=True)
     ## ipv6-extension.h (module 'internet'): ns3::Ipv6ExtensionLooseRouting::TYPE_ROUTING [variable]
     cls.add_static_attribute('TYPE_ROUTING', 'uint8_t const', is_const=True)
diff -Naur ns-3.19/src/internet/doc/ipv6.rst ns-3.20/src/internet/doc/ipv6.rst
--- ns-3.19/src/internet/doc/ipv6.rst	2014-06-17 10:34:00.458636507 -0700
+++ ns-3.20/src/internet/doc/ipv6.rst	2014-06-17 10:33:13.779996841 -0700
@@ -157,6 +157,33 @@
 all the nodes will also have a link-local address. Typically the first address on an 
 interface will be the link-local one, with the global address(es) being the following ones.
 
+Note that the global addesses will be derived from the MAC address. As a consequence, expect
+to have addresses similar to ``2001:db8::200:ff:fe00:1``.
+
+It is possible to repeat the above to assign more than one global address to a node.
+However, due to the ``Ipv6AddressHelper`` singleton nature, one should first assign all the
+adddresses of a network, then change the network base (``SetBase``), then do a new assignment.
+
+Alternatively, it is possible to assign a specific address to a node:
+
+::
+
+    Ptr<Node> n0 = CreateObject<Node> ();
+    NodeContainer net (n0);
+    CsmaHelper csma;
+    NetDeviceContainer ndc = csma.Install (net); 
+
+    NS_LOG_INFO ("Specifically Assign an IPv6 Address.");
+    Ipv6AddressHelper ipv6;
+    Ptr<NetDevice> device = ndc.Get (0);
+    Ptr<Node> node = device->GetNode ();
+    Ptr<Ipv6> ipv6proto = node->GetObject<Ipv6> ();
+    int32_t ifIndex = 0;
+    ifIndex = ipv6proto->GetInterfaceForDevice (device);
+    Ipv6InterfaceAddress ipv6Addr = Ipv6InterfaceAddress (Ipv6Address ("2001:db8:f00d:cafe::42"), Ipv6Prefix (64));
+    ipv6proto->AddAddress (ifIndex, ipv6Addr);
+
+
 Auto-generated IPv6 adddresses
 ##############################
 
diff -Naur ns-3.19/src/internet/doc/routing-overview.rst ns-3.20/src/internet/doc/routing-overview.rst
--- ns-3.19/src/internet/doc/routing-overview.rst	2014-06-17 10:34:00.459636499 -0700
+++ ns-3.20/src/internet/doc/routing-overview.rst	2014-06-17 10:33:13.780996834 -0700
@@ -215,7 +215,7 @@
 Unicast routing
 ***************
 
-There are presently seven unicast routing protocols defined for IPv4 and two for
+There are presently seven unicast routing protocols defined for IPv4 and three for
 IPv6:
 
 * class Ipv4StaticRouting (covering both unicast and multicast)
@@ -232,19 +232,20 @@
   stores source routes in a packet header field)
 * class Ipv6ListRouting (used to store a prioritized list of routing protocols)
 * class Ipv6StaticRouting 
+* class RipNg - the IPv6 RIPng protocol (:rfc:`2080`)
 
 In the future, this architecture should also allow someone to implement a
 Linux-like implementation with routing cache, or a Click modular router, but
 those are out of scope for now.
 
-Ipv4ListRouting
-+++++++++++++++
+Ipv[4,6]ListRouting
++++++++++++++++++++
 
-This section describes the current default |ns3| Ipv4RoutingProtocol. Typically,
+This section describes the current default |ns3| Ipv[4,6]RoutingProtocol. Typically,
 multiple routing protocols are supported in user space and coordinate to write a
 single forwarding table in the kernel. Presently in |ns3|, the implementation
 instead allows for multiple routing protocols to build/keep their own routing
-state, and the IPv4 implementation will query each one of these routing
+state, and the IP implementation will query each one of these routing
 protocols (in some order determined by the simulation author) until a route is
 found.  
 
@@ -254,23 +255,26 @@
 (e.g., source routing) is used to determine the next hop, and on-demand routing
 approaches where packets must be cached.  
 
-Ipv4ListRouting::AddRoutingProtocol
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+Ipv[4,6]4ListRouting::AddRoutingProtocol
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
-Class Ipv4ListRouting provides a pure virtual function declaration for the
-method that allows one to add a routing protocol::
+Classes Ipv4ListRouting and Ipv6ListRouting provides a pure virtual function declaration
+for the method that allows one to add a routing protocol::
 
   void AddRoutingProtocol (Ptr<Ipv4RoutingProtocol> routingProtocol,
                            int16_t priority);
 
-This method is implemented by class Ipv4ListRoutingImpl in the internet-stack
-module.
+  void AddRoutingProtocol (Ptr<Ipv6RoutingProtocol> routingProtocol,
+                           int16_t priority);
+
+These methods are implemented respectively by class Ipv4ListRoutingImpl and by class 
+Ipv6ListRoutingImpl in the internet module.
 
 The priority variable above governs the priority in which the routing protocols
 are inserted. Notice that it is a signed int.  By default in |ns3|, the helper
-classes will instantiate a Ipv4ListRoutingImpl object, and add to it an
-Ipv4StaticRoutingImpl object at priority zero.  Internally, a list of
-Ipv4RoutingProtocols is stored, and and the routing protocols are each consulted
+classes will instantiate a Ipv[4,6]ListRoutingImpl object, and add to it an
+Ipv[4,6]StaticRoutingImpl object at priority zero.  Internally, a list of
+Ipv[4,6]RoutingProtocols is stored, and and the routing protocols are each consulted
 in decreasing order of priority to see whether a match is found. Therefore, if
 you want your Ipv4RoutingProtocol to have priority lower than the static
 routing, insert it with priority less than 0; e.g.::
@@ -330,6 +334,116 @@
 notifications; i.e. the topology changes are due to loss/gain of connectivity
 over a wireless channel.
 
+RIPng
++++++
+
+This IPv6 routing protocol (:rfc:`2080`) is the evolution of the well-known 
+RIPv1 anf RIPv2 (see :rfc:`1058` and :rfc:`1723`) routing protocols for IPv4.
+
+The protocol is very simple, and it is normally suitable for flat, simple 
+network topologies.
+
+RIPng is strongly based on RIPv1 and RIPv2, and it have the very same goals and
+limitations. In particular, RIP considers any route with a metric equal or greater 
+than 16 as unreachable. As a consequence, the maximum number of hops is the
+network must be less than 15 (the number of routers is not set).
+Users are encouraged to read :rfc:`2080` and :rfc:`1058` to fully understand
+RIPng behaviour and limitations.
+
+
+Routing convergence
+~~~~~~~~~~~~~~~~~~~
+
+RIPng uses a Distance-Vector algorithm, and routes are updated according to
+the Bellman-Ford algorithm (sometimes known as Ford-Fulkerson algorithm).
+The algorithm has a convergence time of O(\|V\|*\|E\|) where \|V\| and \|E\| 
+are the number of vertices (routers) and edges (links) respectively.
+It should be stressed that the convergence time is the number of steps in
+the algorithm, and each step is triggered by a message.
+Since Triggered Updates (i.e., when a route is changed) have a 1-5 seconds 
+cooldown, the toplogy can require some time to be stabilized.
+
+Users should be aware that, during routing tables construction, the routers 
+might drop packets. Data traffic should be sent only after a time long
+enough to allow RIPng to build the network topology.
+Usually 80 seconds should be enough to have a suboptimal (but working)
+routing setup. This includes the time needed to propagate the routes to the
+most distant router (16 hops) with Triggered Updates.
+
+If the network topology is changed (e.g., a link is broken), the recovery 
+time might be quite high, and it might be even higher than the initial 
+setup time. Moreover, the network topology recovery is affected by
+the Split Horizoning strategy.
+
+The example ``examples/routing/ripng-simple-network.cc`` shows both the
+network setup and network recovery phases.
+
+Split Horizoning
+~~~~~~~~~~~~~~~~
+
+Split Horizon is a strategy to prevent routing instability. Three options are possible:
+
+* No Split Horizon
+* Split Horizon
+* Poison Reverse
+
+In the first case, routes are advertised on all the router's interfaces.
+In the second case, routers will not advertise a route on the interface
+from which it was learned.
+Poison Reverse will advertise the route on the interface from which it 
+was learned, but with a metric of 16 (infinity).
+For a full analysis of the three techniques, see :rfc:`1058`, section 2.2.
+
+The example ``ripng-simple-network.cc`` is based on the network toplogy
+described in the RFC, but it does not show the effect described there.
+
+The reason are the Triggered Updates, together with the fact that when a 
+router invalidates a route, it will immediately propagate the route 
+unreachability, thus preventing most of the issues described in the RFC.
+
+However, with complex toplogies, it is still possible to have route 
+instability phenomena similar to the one described in the RFC after a 
+link failure. As a consequence, all the considerations about Split Horizon
+remanins valid.
+
+
+Default routes
+~~~~~~~~~~~~~~
+
+RIPng protocol should be installed *only* on routers. As a consequence, 
+nodes will not know what is the default router.
+
+To overcome this limitation, users should either install the default route
+manually (e.g., by resorting to Ipv6StaticRouting), or by using RADVd.
+RADVd is available in |ns3| in the Applications module, and it is strongly 
+suggested.
+ 
+Protocol parameters and options
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+The RIPng |ns3| implementation allows to change all the timers associated 
+with route updates and routes lifetime.
+
+Moreover, users can change the interface metrics on a per-node basis.
+
+The type of Split Horizoning (to avoid routes back-propagation) can be 
+selected on a per-node basis, with the choices being "no split horizon", 
+"split horizon" and "poison reverse". See :rfc:`2080` for further details,
+and :rfc:`1058` for a complete discussion on the split horizoning strategies.
+
+Limitations
+~~~~~~~~~~~
+
+There is no support for the Next Hop option (:rfc:`2080`, Section 2.1.1).
+The Next Hop option is useful when RIPng is not being run on all of the 
+routers on a network.
+Support for this option may be considered in the future.
+
+There is no support for CIDR prefix aggregation. As a result, both routing 
+tables and route advertisements may be larger than necessary. 
+Prefix aggregation may be added in the future.
+
+
 .. _Multicast-routing:
 
 Multicast routing
diff -Naur ns-3.19/src/internet/helper/ipv6-address-helper.cc ns-3.20/src/internet/helper/ipv6-address-helper.cc
--- ns-3.19/src/internet/helper/ipv6-address-helper.cc	2014-06-17 10:34:00.468636430 -0700
+++ ns-3.20/src/internet/helper/ipv6-address-helper.cc	2014-06-17 10:33:13.789996764 -0700
@@ -34,8 +34,7 @@
 namespace ns3 
 {
 
-NS_LOG_COMPONENT_DEFINE ("Ipv6AddressHelper")
-  ;
+NS_LOG_COMPONENT_DEFINE ("Ipv6AddressHelper");
 
 Ipv6AddressHelper::Ipv6AddressHelper ()
 {
diff -Naur ns-3.19/src/internet/helper/ripng-helper.cc ns-3.20/src/internet/helper/ripng-helper.cc
--- ns-3.19/src/internet/helper/ripng-helper.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.20/src/internet/helper/ripng-helper.cc	2014-06-17 10:33:13.793996733 -0700
@@ -0,0 +1,182 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2014 Universita' di Firenze, Italy
+ *
+ * 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: Tommaso Pecorella <tommaso.pecorella@unifi.it>
+ */
+
+#include "ns3/node.h"
+#include "ns3/node-list.h"
+#include "ns3/ipv6-list-routing.h"
+#include "ns3/ripng.h"
+#include "ripng-helper.h"
+
+namespace ns3 {
+
+RipNgHelper::RipNgHelper ()
+{
+  m_factory.SetTypeId ("ns3::RipNg");
+}
+
+RipNgHelper::RipNgHelper (const RipNgHelper &o)
+  : m_factory (o.m_factory)
+{
+  m_interfaceExclusions = o.m_interfaceExclusions;
+  m_interfaceMetrics = o.m_interfaceMetrics;
+}
+
+RipNgHelper::~RipNgHelper ()
+{
+  m_interfaceExclusions.clear ();
+  m_interfaceMetrics.clear ();
+}
+
+RipNgHelper*
+RipNgHelper::Copy (void) const
+{
+  return new RipNgHelper (*this);
+}
+
+Ptr<Ipv6RoutingProtocol>
+RipNgHelper::Create (Ptr<Node> node) const
+{
+  Ptr<RipNg> ripng = m_factory.Create<RipNg> ();
+
+  std::map<Ptr<Node>, std::set<uint32_t> >::const_iterator it = m_interfaceExclusions.find (node);
+
+  if(it != m_interfaceExclusions.end ())
+    {
+      ripng->SetInterfaceExclusions (it->second);
+    }
+
+  std::map< Ptr<Node>, std::map<uint32_t, uint8_t> >::const_iterator iter = m_interfaceMetrics.find (node);
+
+  if(iter != m_interfaceMetrics.end ())
+    {
+      std::map<uint32_t, uint8_t>::const_iterator subiter;
+      for (subiter = iter->second.begin (); subiter != iter->second.end (); subiter++)
+        {
+          ripng->SetInterfaceMetric (subiter->first, subiter->second);
+        }
+    }
+
+  node->AggregateObject (ripng);
+  return ripng;
+}
+
+void
+RipNgHelper::Set (std::string name, const AttributeValue &value)
+{
+  m_factory.Set (name, value);
+}
+
+
+int64_t
+RipNgHelper::AssignStreams (NodeContainer c, int64_t stream)
+{
+  int64_t currentStream = stream;
+  Ptr<Node> node;
+  for (NodeContainer::Iterator i = c.Begin (); i != c.End (); ++i)
+    {
+      node = (*i);
+      Ptr<Ipv6> ipv6 = node->GetObject<Ipv6> ();
+      NS_ASSERT_MSG (ipv6, "Ipv6 not installed on node");
+      Ptr<Ipv6RoutingProtocol> proto = ipv6->GetRoutingProtocol ();
+      NS_ASSERT_MSG (proto, "Ipv6 routing not installed on node");
+      Ptr<RipNg> ripng = DynamicCast<RipNg> (proto);
+      if (ripng)
+        {
+          currentStream += ripng->AssignStreams (currentStream);
+          continue;
+        }
+      // RIPng may also be in a list
+      Ptr<Ipv6ListRouting> list = DynamicCast<Ipv6ListRouting> (proto);
+      if (list)
+        {
+          int16_t priority;
+          Ptr<Ipv6RoutingProtocol> listProto;
+          Ptr<RipNg> listRipng;
+          for (uint32_t i = 0; i < list->GetNRoutingProtocols (); i++)
+            {
+              listProto = list->GetRoutingProtocol (i, priority);
+              listRipng = DynamicCast<RipNg> (listProto);
+              if (listRipng)
+                {
+                  currentStream += listRipng->AssignStreams (currentStream);
+                  break;
+                }
+            }
+        }
+    }
+  return (currentStream - stream);
+}
+
+void RipNgHelper::SetDefaultRouter (Ptr<Node> node, Ipv6Address nextHop, uint32_t interface)
+{
+  Ptr<Ipv6> ipv6 = node->GetObject<Ipv6> ();
+  NS_ASSERT_MSG (ipv6, "Ipv6 not installed on node");
+  Ptr<Ipv6RoutingProtocol> proto = ipv6->GetRoutingProtocol ();
+  NS_ASSERT_MSG (proto, "Ipv6 routing not installed on node");
+  Ptr<RipNg> ripng = DynamicCast<RipNg> (proto);
+  if (ripng)
+    {
+      ripng->AddDefaultRouteTo (nextHop, interface);
+    }
+  // RIPng may also be in a list
+  Ptr<Ipv6ListRouting> list = DynamicCast<Ipv6ListRouting> (proto);
+  if (list)
+    {
+      int16_t priority;
+      Ptr<Ipv6RoutingProtocol> listProto;
+      Ptr<RipNg> listRipng;
+      for (uint32_t i = 0; i < list->GetNRoutingProtocols (); i++)
+        {
+          listProto = list->GetRoutingProtocol (i, priority);
+          listRipng = DynamicCast<RipNg> (listProto);
+          if (listRipng)
+            {
+              listRipng->AddDefaultRouteTo (nextHop, interface);
+              break;
+            }
+        }
+    }
+}
+
+void
+RipNgHelper::ExcludeInterface (Ptr<Node> node, uint32_t interface)
+{
+  std::map< Ptr<Node>, std::set<uint32_t> >::iterator it = m_interfaceExclusions.find (node);
+
+  if (it == m_interfaceExclusions.end ())
+    {
+      std::set<uint32_t> interfaces;
+      interfaces.insert (interface);
+
+      m_interfaceExclusions.insert (std::make_pair (node, interfaces));
+    }
+  else
+    {
+      it->second.insert (interface);
+    }
+}
+
+void RipNgHelper::SetInterfaceMetric (Ptr<Node> node, uint32_t interface, uint8_t metric)
+{
+  m_interfaceMetrics[node][interface] = metric;
+}
+
+}
+
diff -Naur ns-3.19/src/internet/helper/ripng-helper.h ns-3.20/src/internet/helper/ripng-helper.h
--- ns-3.19/src/internet/helper/ripng-helper.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.20/src/internet/helper/ripng-helper.h	2014-06-17 10:33:13.793996733 -0700
@@ -0,0 +1,148 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2014 Universita' di Firenze, Italy
+ *
+ * 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: Tommaso Pecorella <tommaso.pecorella@unifi.it>
+ */
+
+#ifndef RIPNG_HELPER_H
+#define RIPNG_HELPER_H
+
+#include "ns3/object-factory.h"
+#include "ns3/ipv6-routing-helper.h"
+#include "ns3/node-container.h"
+#include "ns3/node.h"
+
+namespace ns3 {
+
+/**
+ * \brief Helper class that adds RIPng routing to nodes.
+ *
+ * This class is expected to be used in conjunction with
+ * ns3::InternetStackHelper::SetRoutingHelper
+ *
+ */
+class RipNgHelper : public Ipv6RoutingHelper
+{
+public:
+  /*
+   * Construct an RipngHelper to make life easier while adding RIPng
+   * routing to nodes.
+   */
+  RipNgHelper ();
+
+  /**
+   * \brief Construct an RipngHelper from another previously
+   * initialized instance (Copy Constructor).
+   */
+  RipNgHelper (const RipNgHelper &);
+
+  virtual ~RipNgHelper ();
+
+  /**
+   * \returns pointer to clone of this Ipv4NixVectorHelper
+   *
+   * This method is mainly for internal use by the other helpers;
+   * clients are expected to free the dynamic memory allocated by this method
+   */
+  RipNgHelper* Copy (void) const;
+
+  /**
+   * \param node the node on which the routing protocol will run
+   * \returns a newly-created routing protocol
+   *
+   * This method will be called by ns3::InternetStackHelper::Install
+   */
+  virtual Ptr<Ipv6RoutingProtocol> Create (Ptr<Node> node) const;
+
+  /**
+   * \param name the name of the attribute to set
+   * \param value the value of the attribute to set.
+   *
+   * This method controls the attributes of ns3::Ripng
+   */
+  void Set (std::string name, const AttributeValue &value);
+
+  /**
+   * Assign a fixed random variable stream number to the random variables
+   * used by this model. Return the number of streams (possibly zero) that
+   * 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
+   */
+  int64_t AssignStreams (NodeContainer c, int64_t stream);
+
+  /**
+   * \brief Install a default route in the node.
+   *
+   * The traffic will be routed to the nextHop, located on the specified
+   * interface, unless a more specific route is found.
+   *
+   * \param node the node
+   * \param nextHop the next hop
+   * \param interface the network interface
+   */
+  void SetDefaultRouter (Ptr<Node> node, Ipv6Address nextHop, uint32_t interface);
+
+  /**
+   * \brief Exclude an interface from RIPng protocol.
+   *
+   * You have to call this function \a before installing RIPng in the nodes.
+   *
+   * Note: the exclusion means that RIPng will not be propagated on that interface.
+   * The network prefix on that interface will be still considered in RIPng.
+   *
+   * \param node the node
+   * \param interface the network interface to be excluded
+   */
+  void ExcludeInterface (Ptr<Node> node, uint32_t interface);
+
+  /**
+   * \brief Set a metric for an interface.
+   *
+   * You have to call this function \a before installing RIPng in the nodes.
+   *
+   * Note: RIPng will apply the metric on route message reception.
+   * As a consequence, interface metric should be set on the receiver.
+   *
+   * \param node the node
+   * \param interface the network interface
+   * \param metric the interface metric
+   */
+  void SetInterfaceMetric (Ptr<Node> node, uint32_t interface, uint8_t metric);
+
+private:
+  /**
+   * \brief Assignment operator declared private and not implemented to disallow
+   * assignment and prevent the compiler from happily inserting its own.
+   */
+  RipNgHelper &operator = (const RipNgHelper &o);
+
+  ObjectFactory m_factory; //|< Object Factory
+
+  std::map< Ptr<Node>, std::set<uint32_t> > m_interfaceExclusions; //!< Interface Exclusion set
+  std::map< Ptr<Node>, std::map<uint32_t, uint8_t> > m_interfaceMetrics; //!< Interface Metric set
+};
+
+} // namespace ns3
+
+
+#endif /* RIPNG_HELPER_H */
+
diff -Naur ns-3.19/src/internet/model/arp-cache.cc ns-3.20/src/internet/model/arp-cache.cc
--- ns-3.19/src/internet/model/arp-cache.cc	2014-06-17 10:34:00.472636399 -0700
+++ ns-3.20/src/internet/model/arp-cache.cc	2014-06-17 10:33:13.793996733 -0700
@@ -33,8 +33,7 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (ArpCache)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (ArpCache);
 
 TypeId 
 ArpCache::GetTypeId (void)
diff -Naur ns-3.19/src/internet/model/arp-header.cc ns-3.20/src/internet/model/arp-header.cc
--- ns-3.19/src/internet/model/arp-header.cc	2014-06-17 10:34:00.473636391 -0700
+++ ns-3.20/src/internet/model/arp-header.cc	2014-06-17 10:33:13.794996726 -0700
@@ -27,8 +27,7 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (ArpHeader)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (ArpHeader);
 
 void 
 ArpHeader::SetRequest (Address sourceHardwareAddress,
diff -Naur ns-3.19/src/internet/model/arp-l3-protocol.cc ns-3.20/src/internet/model/arp-l3-protocol.cc
--- ns-3.19/src/internet/model/arp-l3-protocol.cc	2014-06-17 10:34:00.474636383 -0700
+++ ns-3.20/src/internet/model/arp-l3-protocol.cc	2014-06-17 10:33:13.795996718 -0700
@@ -38,8 +38,7 @@
 
 const uint16_t ArpL3Protocol::PROT_NUMBER = 0x0806;
 
-NS_OBJECT_ENSURE_REGISTERED (ArpL3Protocol)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (ArpL3Protocol);
 
 TypeId 
 ArpL3Protocol::GetTypeId (void)
diff -Naur ns-3.19/src/internet/model/global-router-interface.cc ns-3.20/src/internet/model/global-router-interface.cc
--- ns-3.19/src/internet/model/global-router-interface.cc	2014-06-17 10:34:00.478636352 -0700
+++ ns-3.20/src/internet/model/global-router-interface.cc	2014-06-17 10:33:13.800996679 -0700
@@ -504,8 +504,7 @@
 //
 // ---------------------------------------------------------------------------
 
-NS_OBJECT_ENSURE_REGISTERED (GlobalRouter)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (GlobalRouter);
 
 TypeId 
 GlobalRouter::GetTypeId (void)
diff -Naur ns-3.19/src/internet/model/icmpv4.cc ns-3.20/src/internet/model/icmpv4.cc
--- ns-3.19/src/internet/model/icmpv4.cc	2014-06-17 10:34:00.481636330 -0700
+++ ns-3.20/src/internet/model/icmpv4.cc	2014-06-17 10:33:13.802996664 -0700
@@ -30,8 +30,7 @@
  *        Icmpv4Header
  ********************************************************/
 
-NS_OBJECT_ENSURE_REGISTERED (Icmpv4Header)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (Icmpv4Header);
 
 TypeId 
 Icmpv4Header::GetTypeId (void)
@@ -134,8 +133,7 @@
  *        Icmpv4Echo
  ********************************************************/
 
-NS_OBJECT_ENSURE_REGISTERED (Icmpv4Echo)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (Icmpv4Echo);
 
 void 
 Icmpv4Echo::SetIdentifier (uint16_t id)
@@ -272,8 +270,7 @@
  *        Icmpv4DestinationUnreachable
  ********************************************************/
 
-NS_OBJECT_ENSURE_REGISTERED (Icmpv4DestinationUnreachable)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (Icmpv4DestinationUnreachable);
 
 TypeId 
 Icmpv4DestinationUnreachable::GetTypeId (void)
@@ -396,8 +393,7 @@
  *        Icmpv4TimeExceeded
  ********************************************************/
 
-NS_OBJECT_ENSURE_REGISTERED (Icmpv4TimeExceeded)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (Icmpv4TimeExceeded);
 
 TypeId 
 Icmpv4TimeExceeded::GetTypeId (void)
diff -Naur ns-3.19/src/internet/model/icmpv4-l4-protocol.cc ns-3.20/src/internet/model/icmpv4-l4-protocol.cc
--- ns-3.19/src/internet/model/icmpv4-l4-protocol.cc	2014-06-17 10:34:00.480636337 -0700
+++ ns-3.20/src/internet/model/icmpv4-l4-protocol.cc	2014-06-17 10:33:13.801996672 -0700
@@ -11,11 +11,9 @@
 
 namespace ns3 {
 
-NS_LOG_COMPONENT_DEFINE ("Icmpv4L4Protocol")
-  ;
+NS_LOG_COMPONENT_DEFINE ("Icmpv4L4Protocol");
 
-NS_OBJECT_ENSURE_REGISTERED (Icmpv4L4Protocol)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (Icmpv4L4Protocol);
 
 // see rfc 792
 const uint8_t Icmpv4L4Protocol::PROT_NUMBER = 1;
diff -Naur ns-3.19/src/internet/model/icmpv6-header.cc ns-3.20/src/internet/model/icmpv6-header.cc
--- ns-3.19/src/internet/model/icmpv6-header.cc	2014-06-17 10:34:00.482636322 -0700
+++ ns-3.20/src/internet/model/icmpv6-header.cc	2014-06-17 10:33:13.803996656 -0700
@@ -31,8 +31,7 @@
 namespace ns3
 {
 
-NS_OBJECT_ENSURE_REGISTERED (Icmpv6Header)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (Icmpv6Header);
 
 TypeId Icmpv6Header::GetTypeId ()
 {
@@ -173,8 +172,7 @@
   m_checksum = ~(it.CalculateIpChecksum (40));
 }
 
-NS_OBJECT_ENSURE_REGISTERED (Icmpv6NS)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (Icmpv6NS);
 
 Icmpv6NS::Icmpv6NS ()
 {
@@ -296,8 +294,7 @@
   return GetSerializedSize ();
 }
 
-NS_OBJECT_ENSURE_REGISTERED (Icmpv6NA)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (Icmpv6NA);
 
 TypeId Icmpv6NA::GetTypeId ()
 {
@@ -480,8 +477,7 @@
   return GetSerializedSize ();
 }
 
-NS_OBJECT_ENSURE_REGISTERED (Icmpv6RA)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (Icmpv6RA);
 
 TypeId Icmpv6RA::GetTypeId ()
 {
@@ -700,8 +696,7 @@
   return GetSerializedSize ();
 }
 
-NS_OBJECT_ENSURE_REGISTERED (Icmpv6RS)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (Icmpv6RS);
 
 TypeId Icmpv6RS::GetTypeId ()
 {
@@ -791,8 +786,7 @@
   return GetSerializedSize ();
 }
 
-NS_OBJECT_ENSURE_REGISTERED (Icmpv6Redirection)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (Icmpv6Redirection);
 
 TypeId Icmpv6Redirection::GetTypeId ()
 {
@@ -922,8 +916,7 @@
   return GetSerializedSize ();
 }
 
-NS_OBJECT_ENSURE_REGISTERED (Icmpv6Echo)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (Icmpv6Echo);
 
 TypeId Icmpv6Echo::GetTypeId ()
 {
@@ -1040,8 +1033,7 @@
   return GetSerializedSize ();
 }
 
-NS_OBJECT_ENSURE_REGISTERED (Icmpv6DestinationUnreachable)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (Icmpv6DestinationUnreachable);
 
 TypeId Icmpv6DestinationUnreachable::GetTypeId ()
 {
@@ -1138,8 +1130,7 @@
   return GetSerializedSize ();
 }
 
-NS_OBJECT_ENSURE_REGISTERED (Icmpv6TooBig)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (Icmpv6TooBig);
 
 TypeId Icmpv6TooBig::GetTypeId ()
 {
@@ -1249,8 +1240,7 @@
   return GetSerializedSize ();
 }
 
-NS_OBJECT_ENSURE_REGISTERED (Icmpv6TimeExceeded)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (Icmpv6TimeExceeded);
 
 TypeId Icmpv6TimeExceeded::GetTypeId ()
 {
@@ -1349,8 +1339,7 @@
   return GetSerializedSize ();
 }
 
-NS_OBJECT_ENSURE_REGISTERED (Icmpv6ParameterError)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (Icmpv6ParameterError);
 
 TypeId Icmpv6ParameterError::GetTypeId ()
 {
@@ -1460,8 +1449,7 @@
   return GetSerializedSize ();
 }
 
-NS_OBJECT_ENSURE_REGISTERED (Icmpv6OptionHeader)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (Icmpv6OptionHeader);
 
 TypeId Icmpv6OptionHeader::GetTypeId ()
 {
@@ -1539,8 +1527,7 @@
   NS_LOG_FUNCTION (this << &start);
 }
 
-NS_OBJECT_ENSURE_REGISTERED (Icmpv6OptionMtu)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (Icmpv6OptionMtu);
 
 TypeId Icmpv6OptionMtu::GetTypeId ()
 {
@@ -1636,8 +1623,7 @@
   return GetSerializedSize ();
 }
 
-NS_OBJECT_ENSURE_REGISTERED (Icmpv6OptionPrefixInformation)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (Icmpv6OptionPrefixInformation);
 
 TypeId Icmpv6OptionPrefixInformation::GetTypeId ()
 {
@@ -1810,8 +1796,7 @@
   return GetSerializedSize ();
 }
 
-NS_OBJECT_ENSURE_REGISTERED (Icmpv6OptionLinkLayerAddress)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (Icmpv6OptionLinkLayerAddress);
 
 TypeId Icmpv6OptionLinkLayerAddress::GetTypeId ()
 {
@@ -1910,16 +1895,16 @@
 
   SetType (i.ReadU8 ());
   SetLength (i.ReadU8 ());
-  NS_ASSERT (GetLength () * 8 - 2 <= 32);
+  // -fstrict-overflow sensitive, see bug 1868
+  NS_ASSERT (GetLength () * 8 <= 32 + 2);
   i.Read (mac, (GetLength () * 8) - 2);
 
-  m_addr.CopyFrom (mac, (GetLength () * 8)-2);
+  m_addr.CopyFrom (mac, (GetLength () * 8) - 2);
 
   return GetSerializedSize ();
 }
 
-NS_OBJECT_ENSURE_REGISTERED (Icmpv6OptionRedirected)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (Icmpv6OptionRedirected);
 
 TypeId Icmpv6OptionRedirected::GetTypeId ()
 {
diff -Naur ns-3.19/src/internet/model/icmpv6-l4-protocol.cc ns-3.20/src/internet/model/icmpv6-l4-protocol.cc
--- ns-3.19/src/internet/model/icmpv6-l4-protocol.cc	2014-06-17 10:34:00.484636306 -0700
+++ ns-3.20/src/internet/model/icmpv6-l4-protocol.cc	2014-06-17 10:33:13.805996641 -0700
@@ -39,11 +39,9 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (Icmpv6L4Protocol)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (Icmpv6L4Protocol);
 
-NS_LOG_COMPONENT_DEFINE ("Icmpv6L4Protocol")
-  ;
+NS_LOG_COMPONENT_DEFINE ("Icmpv6L4Protocol");
 
 const uint8_t Icmpv6L4Protocol::PROT_NUMBER = 58;
 
@@ -272,11 +270,14 @@
 
   uint8_t nextHeader = ipHeader.GetNextHeader ();
 
-  Ptr<IpL4Protocol> l4 = ipv6->GetProtocol (nextHeader);
-  if (l4 != 0)
+  if (nextHeader != Icmpv6L4Protocol::PROT_NUMBER)
     {
-      l4->ReceiveIcmp (source, ipHeader.GetHopLimit (), icmp.GetType (), icmp.GetCode (),
-                       info, ipHeader.GetSourceAddress (), ipHeader.GetDestinationAddress (), payload);
+      Ptr<IpL4Protocol> l4 = ipv6->GetProtocol (nextHeader);
+      if (l4 != 0)
+        {
+          l4->ReceiveIcmp (source, ipHeader.GetHopLimit (), icmp.GetType (), icmp.GetCode (),
+                           info, ipHeader.GetSourceAddress (), ipHeader.GetDestinationAddress (), payload);
+        }
     }
 }
 
diff -Naur ns-3.19/src/internet/model/ip-l4-protocol.cc ns-3.20/src/internet/model/ip-l4-protocol.cc
--- ns-3.19/src/internet/model/ip-l4-protocol.cc	2014-06-17 10:34:00.484636306 -0700
+++ ns-3.20/src/internet/model/ip-l4-protocol.cc	2014-06-17 10:33:13.806996633 -0700
@@ -29,8 +29,7 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (IpL4Protocol)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (IpL4Protocol);
 
 TypeId 
 IpL4Protocol::GetTypeId (void)
diff -Naur ns-3.19/src/internet/model/ipv4.cc ns-3.20/src/internet/model/ipv4.cc
--- ns-3.19/src/internet/model/ipv4.cc	2014-06-17 10:34:00.501636175 -0700
+++ ns-3.20/src/internet/model/ipv4.cc	2014-06-17 10:33:13.823996502 -0700
@@ -28,8 +28,7 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (Ipv4)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (Ipv4);
 
 TypeId 
 Ipv4::GetTypeId (void)
diff -Naur ns-3.19/src/internet/model/ipv4-end-point-demux.cc ns-3.20/src/internet/model/ipv4-end-point-demux.cc
--- ns-3.19/src/internet/model/ipv4-end-point-demux.cc	2014-06-17 10:34:00.486636291 -0700
+++ ns-3.20/src/internet/model/ipv4-end-point-demux.cc	2014-06-17 10:33:13.808996618 -0700
@@ -24,8 +24,7 @@
 
 namespace ns3 {
 
-NS_LOG_COMPONENT_DEFINE ("Ipv4EndPointDemux")
-  ;
+NS_LOG_COMPONENT_DEFINE ("Ipv4EndPointDemux");
 
 Ipv4EndPointDemux::Ipv4EndPointDemux ()
   : m_ephemeral (49152), m_portLast (65535), m_portFirst (49152)
diff -Naur ns-3.19/src/internet/model/ipv4-global-routing.cc ns-3.20/src/internet/model/ipv4-global-routing.cc
--- ns-3.19/src/internet/model/ipv4-global-routing.cc	2014-06-17 10:34:00.488636275 -0700
+++ ns-3.20/src/internet/model/ipv4-global-routing.cc	2014-06-17 10:33:13.809996610 -0700
@@ -34,8 +34,7 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (Ipv4GlobalRouting)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (Ipv4GlobalRouting);
 
 TypeId 
 Ipv4GlobalRouting::GetTypeId (void)
diff -Naur ns-3.19/src/internet/model/ipv4.h ns-3.20/src/internet/model/ipv4.h
--- ns-3.19/src/internet/model/ipv4.h	2014-06-17 10:34:00.502636167 -0700
+++ ns-3.20/src/internet/model/ipv4.h	2014-06-17 10:33:13.823996502 -0700
@@ -24,7 +24,6 @@
 #include "ns3/object.h"
 #include "ns3/socket.h"
 #include "ns3/callback.h"
-#include "ns3/ip-l4-protocol.h"
 #include "ns3/ipv4-address.h"
 #include "ipv4-route.h"
 #include "ipv4-interface-address.h"
@@ -35,6 +34,8 @@
 class NetDevice;
 class Packet;
 class Ipv4RoutingProtocol;
+class IpL4Protocol;
+class Ipv4Header;
 
 /**
  * \ingroup internet
diff -Naur ns-3.19/src/internet/model/ipv4-header.cc ns-3.20/src/internet/model/ipv4-header.cc
--- ns-3.19/src/internet/model/ipv4-header.cc	2014-06-17 10:34:00.489636268 -0700
+++ ns-3.20/src/internet/model/ipv4-header.cc	2014-06-17 10:33:13.810996602 -0700
@@ -28,8 +28,7 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (Ipv4Header)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (Ipv4Header);
 
 Ipv4Header::Ipv4Header ()
   : m_calcChecksum (false),
@@ -247,7 +246,8 @@
 Ipv4Header::GetFragmentOffset (void) const
 {
   NS_LOG_FUNCTION (this);
-  if ((m_fragmentOffset+m_payloadSize+5*4) > 65535)
+  // -fstrict-overflow sensitive, see bug 1868
+  if ( m_fragmentOffset + m_payloadSize > 65535 - 5*4 )
     {
       NS_LOG_WARN("Fragment will exceed the maximum packet size once reassembled");
     }
diff -Naur ns-3.19/src/internet/model/ipv4-interface.cc ns-3.20/src/internet/model/ipv4-interface.cc
--- ns-3.19/src/internet/model/ipv4-interface.cc	2014-06-17 10:34:00.491636252 -0700
+++ ns-3.20/src/internet/model/ipv4-interface.cc	2014-06-17 10:33:13.812996587 -0700
@@ -34,8 +34,7 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (Ipv4Interface)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (Ipv4Interface);
 
 TypeId 
 Ipv4Interface::GetTypeId (void)
diff -Naur ns-3.19/src/internet/model/ipv4-l3-protocol.cc ns-3.20/src/internet/model/ipv4-l3-protocol.cc
--- ns-3.19/src/internet/model/ipv4-l3-protocol.cc	2014-06-17 10:34:00.493636237 -0700
+++ ns-3.20/src/internet/model/ipv4-l3-protocol.cc	2014-06-17 10:33:13.814996571 -0700
@@ -46,8 +46,7 @@
 
 const uint16_t Ipv4L3Protocol::PROT_NUMBER = 0x0800;
 
-NS_OBJECT_ENSURE_REGISTERED (Ipv4L3Protocol)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (Ipv4L3Protocol);
 
 TypeId 
 Ipv4L3Protocol::GetTypeId (void)
@@ -91,8 +90,6 @@
 }
 
 Ipv4L3Protocol::Ipv4L3Protocol()
-  : m_identification (0)
-
 {
   NS_LOG_FUNCTION (this);
 }
@@ -541,6 +538,35 @@
 }
 
 bool
+Ipv4L3Protocol::IsUnicast (Ipv4Address ad) const
+{
+  NS_LOG_FUNCTION (this << ad);
+
+  if (ad.IsBroadcast () || ad.IsMulticast ())
+    {
+      return false;
+    }
+  else
+    {
+      // check for subnet-broadcast
+      for (uint32_t ifaceIndex = 0; ifaceIndex < GetNInterfaces (); ifaceIndex++)
+        {
+          for (uint32_t j = 0; j < GetNAddresses (ifaceIndex); j++)
+            {
+              Ipv4InterfaceAddress ifAddr = GetAddress (ifaceIndex, j);
+              NS_LOG_LOGIC ("Testing address " << ad << " with subnet-directed broadcast " << ifAddr.GetBroadcast () );
+              if (ad == ifAddr.GetBroadcast () )
+                {
+                  return false;
+                }
+            }
+        }
+    }
+
+  return true;
+}
+
+bool
 Ipv4L3Protocol::IsUnicast (Ipv4Address ad, Ipv4Mask interfaceMask) const
 {
   NS_LOG_FUNCTION (this << ad << interfaceMask);
@@ -712,15 +738,18 @@
   if (mayFragment == true)
     {
       ipHeader.SetMayFragment ();
-      ipHeader.SetIdentification (m_identification);
-      m_identification++;
+      ipHeader.SetIdentification (m_identification[protocol]);
+      m_identification[protocol]++;
     }
   else
     {
       ipHeader.SetDontFragment ();
-      // TBD:  set to zero here; will cause traces to change
-      ipHeader.SetIdentification (m_identification);
-      m_identification++;
+      // RFC 6864 does not state anything about atomic datagrams
+      // identification requirement:
+      // >> Originating sources MAY set the IPv4 ID field of atomic datagrams
+      //    to any value.
+      ipHeader.SetIdentification (m_identification[protocol]);
+      m_identification[protocol]++;
     }
   if (Node::ChecksumEnabled ())
     {
@@ -1290,8 +1319,8 @@
 {
   NS_LOG_FUNCTION (this << packet << ipHeader << iif);
 
-  uint64_t addressCombination = uint64_t (ipHeader.GetSource ().Get ()) << 32 & uint64_t (ipHeader.GetDestination ().Get ());
-  uint32_t idProto = uint32_t (ipHeader.GetIdentification ()) << 16 & uint32_t (ipHeader.GetProtocol ());
+  uint64_t addressCombination = uint64_t (ipHeader.GetSource ().Get ()) << 32 | uint64_t (ipHeader.GetDestination ().Get ());
+  uint32_t idProto = uint32_t (ipHeader.GetIdentification ()) << 16 | uint32_t (ipHeader.GetProtocol ());
   std::pair<uint64_t, uint32_t> key;
   bool ret = false;
   Ptr<Packet> p = packet->Copy ();
diff -Naur ns-3.19/src/internet/model/ipv4-l3-protocol.h ns-3.20/src/internet/model/ipv4-l3-protocol.h
--- ns-3.19/src/internet/model/ipv4-l3-protocol.h	2014-06-17 10:34:00.493636237 -0700
+++ ns-3.20/src/internet/model/ipv4-l3-protocol.h	2014-06-17 10:33:13.814996571 -0700
@@ -35,6 +35,8 @@
 #include "ns3/nstime.h"
 #include "ns3/simulator.h"
 
+class Ipv4L3ProtocolTestCase;
+
 namespace ns3 {
 
 class Packet;
@@ -134,7 +136,7 @@
    * This method is typically called by lower layers
    * to forward packets up the stack to the right protocol.
    */
-  Ptr<IpL4Protocol> GetProtocol (int protocolNumber) const;
+  virtual Ptr<IpL4Protocol> GetProtocol (int protocolNumber) const;
   /**
    * \param protocol protocol to remove from this demux.
    *
@@ -223,6 +225,18 @@
 
   Ptr<NetDevice> GetNetDevice (uint32_t i);
 
+  /**
+   * \brief Check if an IPv4 address is unicast according to the node.
+   *
+   * This function checks all the node's interfaces and the respective subnet masks.
+   * An address is considered unicast if it's not broadcast, subnet-broadcast or multicast.
+   *
+   * \param ad address
+   *
+   * \return true if the address is unicast
+   */
+  bool IsUnicast (Ipv4Address ad) const;
+
 protected:
 
   virtual void DoDispose (void);
@@ -232,7 +246,7 @@
    */
   virtual void NotifyNewAggregate ();
 private:
-  friend class Ipv4L3ProtocolTestCase;
+  friend class ::Ipv4L3ProtocolTestCase;
 
   /**
    * \brief Copy constructor.
@@ -394,7 +408,7 @@
   Ipv4InterfaceList m_interfaces; //!< List of IPv4 interfaces.
   uint8_t m_defaultTos;  //!< Default TOS
   uint8_t m_defaultTtl;  //!< Default TTL
-  uint16_t m_identification; //!< Identification
+  std::map<uint8_t, uint16_t> m_identification; //!< Identification (for each protocol)
   Ptr<Node> m_node; //!< Node attached to stack.
 
   /// Trace of sent packets
diff -Naur ns-3.19/src/internet/model/ipv4-list-routing.cc ns-3.20/src/internet/model/ipv4-list-routing.cc
--- ns-3.19/src/internet/model/ipv4-list-routing.cc	2014-06-17 10:34:00.494636229 -0700
+++ ns-3.20/src/internet/model/ipv4-list-routing.cc	2014-06-17 10:33:13.815996564 -0700
@@ -28,8 +28,7 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (Ipv4ListRouting)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (Ipv4ListRouting);
 
 TypeId
 Ipv4ListRouting::GetTypeId (void)
diff -Naur ns-3.19/src/internet/model/ipv4-packet-probe.cc ns-3.20/src/internet/model/ipv4-packet-probe.cc
--- ns-3.19/src/internet/model/ipv4-packet-probe.cc	2014-06-17 10:34:00.495636221 -0700
+++ ns-3.20/src/internet/model/ipv4-packet-probe.cc	2014-06-17 10:33:13.816996556 -0700
@@ -32,8 +32,7 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (Ipv4PacketProbe)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (Ipv4PacketProbe);
 
 TypeId
 Ipv4PacketProbe::GetTypeId ()
diff -Naur ns-3.19/src/internet/model/ipv4-raw-socket-factory.cc ns-3.20/src/internet/model/ipv4-raw-socket-factory.cc
--- ns-3.19/src/internet/model/ipv4-raw-socket-factory.cc	2014-06-17 10:34:00.496636214 -0700
+++ ns-3.20/src/internet/model/ipv4-raw-socket-factory.cc	2014-06-17 10:33:13.818996541 -0700
@@ -25,8 +25,7 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (Ipv4RawSocketFactory)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (Ipv4RawSocketFactory);
 
 TypeId Ipv4RawSocketFactory::GetTypeId (void)
 {
diff -Naur ns-3.19/src/internet/model/ipv4-raw-socket-impl.cc ns-3.20/src/internet/model/ipv4-raw-socket-impl.cc
--- ns-3.19/src/internet/model/ipv4-raw-socket-impl.cc	2014-06-17 10:34:00.497636206 -0700
+++ ns-3.20/src/internet/model/ipv4-raw-socket-impl.cc	2014-06-17 10:33:13.818996541 -0700
@@ -17,8 +17,7 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (Ipv4RawSocketImpl)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (Ipv4RawSocketImpl);
 
 TypeId 
 Ipv4RawSocketImpl::GetTypeId (void)
diff -Naur ns-3.19/src/internet/model/ipv4-routing-protocol.cc ns-3.20/src/internet/model/ipv4-routing-protocol.cc
--- ns-3.19/src/internet/model/ipv4-routing-protocol.cc	2014-06-17 10:34:00.499636190 -0700
+++ ns-3.20/src/internet/model/ipv4-routing-protocol.cc	2014-06-17 10:33:13.820996525 -0700
@@ -25,8 +25,7 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (Ipv4RoutingProtocol)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (Ipv4RoutingProtocol);
 
 TypeId Ipv4RoutingProtocol::GetTypeId (void)
 {
diff -Naur ns-3.19/src/internet/model/ipv4-static-routing.cc ns-3.20/src/internet/model/ipv4-static-routing.cc
--- ns-3.19/src/internet/model/ipv4-static-routing.cc	2014-06-17 10:34:00.501636175 -0700
+++ ns-3.20/src/internet/model/ipv4-static-routing.cc	2014-06-17 10:33:13.822996510 -0700
@@ -40,8 +40,7 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (Ipv4StaticRouting)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (Ipv4StaticRouting);
 
 TypeId
 Ipv4StaticRouting::GetTypeId (void)
@@ -627,17 +626,16 @@
 {
   NS_LOG_FUNCTION (this << i);
   // Remove all static routes that are going through this interface
-  uint32_t j = 0;
-  while (j < GetNRoutes ())
+  for (NetworkRoutesI it = m_networkRoutes.begin (); it != m_networkRoutes.end (); )
     {
-      Ipv4RoutingTableEntry route = GetRoute (j);
-      if (route.GetInterface () == i)
+      if (it->first->GetInterface () == i)
         {
-          RemoveRoute (j);
+          delete it->first;
+          it = m_networkRoutes.erase (it);
         }
       else
         {
-          j++;
+          it++;
         }
     }
 }
@@ -672,15 +670,19 @@
   Ipv4Mask networkMask = address.GetMask ();
   // Remove all static routes that are going through this interface
   // which reference this network
-  for (uint32_t j = 0; j < GetNRoutes (); j++)
+  for (NetworkRoutesI it = m_networkRoutes.begin (); it != m_networkRoutes.end (); )
     {
-      Ipv4RoutingTableEntry route = GetRoute (j);
-      if (route.GetInterface () == interface &&
-          route.IsNetwork () && 
-          route.GetDestNetwork () == networkAddress &&
-          route.GetDestNetworkMask () == networkMask)
+      if (it->first->GetInterface () == interface
+          && it->first->IsNetwork ()
+          && it->first->GetDestNetwork () == networkAddress
+          && it->first->GetDestNetworkMask () == networkMask)
+        {
+          delete it->first;
+          it = m_networkRoutes.erase (it);
+        }
+      else
         {
-          RemoveRoute (j);
+          it++;
         }
     }
 }
diff -Naur ns-3.19/src/internet/model/ipv6.cc ns-3.20/src/internet/model/ipv6.cc
--- ns-3.19/src/internet/model/ipv6.cc	2014-06-17 10:34:00.525635990 -0700
+++ ns-3.20/src/internet/model/ipv6.cc	2014-06-17 10:33:13.845996332 -0700
@@ -29,8 +29,7 @@
 namespace ns3 
 {
 
-NS_OBJECT_ENSURE_REGISTERED (Ipv6)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (Ipv6);
 
 TypeId Ipv6::GetTypeId (void)
 {
diff -Naur ns-3.19/src/internet/model/ipv6-end-point.cc ns-3.20/src/internet/model/ipv6-end-point.cc
--- ns-3.19/src/internet/model/ipv6-end-point.cc	2014-06-17 10:34:00.505636144 -0700
+++ ns-3.20/src/internet/model/ipv6-end-point.cc	2014-06-17 10:33:13.826996479 -0700
@@ -27,8 +27,7 @@
 namespace ns3
 {
 
-NS_LOG_COMPONENT_DEFINE ("Ipv6EndPoint")
-  ;
+NS_LOG_COMPONENT_DEFINE ("Ipv6EndPoint");
 
 Ipv6EndPoint::Ipv6EndPoint (Ipv6Address addr, uint16_t port)
   : m_localAddr (addr),
diff -Naur ns-3.19/src/internet/model/ipv6-end-point-demux.cc ns-3.20/src/internet/model/ipv6-end-point-demux.cc
--- ns-3.19/src/internet/model/ipv6-end-point-demux.cc	2014-06-17 10:34:00.504636152 -0700
+++ ns-3.20/src/internet/model/ipv6-end-point-demux.cc	2014-06-17 10:33:13.825996486 -0700
@@ -24,8 +24,7 @@
 
 namespace ns3 {
 
-NS_LOG_COMPONENT_DEFINE ("Ipv6EndPointDemux")
-  ;
+NS_LOG_COMPONENT_DEFINE ("Ipv6EndPointDemux");
 
 Ipv6EndPointDemux::Ipv6EndPointDemux ()
   : m_ephemeral (49152),
diff -Naur ns-3.19/src/internet/model/ipv6-extension.cc ns-3.20/src/internet/model/ipv6-extension.cc
--- ns-3.19/src/internet/model/ipv6-extension.cc	2014-06-17 10:34:00.508636121 -0700
+++ ns-3.20/src/internet/model/ipv6-extension.cc	2014-06-17 10:33:13.829996455 -0700
@@ -44,8 +44,7 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (Ipv6Extension)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (Ipv6Extension);
 
 TypeId Ipv6Extension::GetTypeId ()
 {
@@ -55,8 +54,6 @@
                    UintegerValue (0),
                    MakeUintegerAccessor (&Ipv6Extension::GetExtensionNumber),
                    MakeUintegerChecker<uint8_t> ())
-    .AddTraceSource ("Drop", "Drop IPv6 packet",
-                     MakeTraceSourceAccessor (&Ipv6Extension::m_dropTrace))
   ;
   return tid;
 }
@@ -87,7 +84,15 @@
   return m_node;
 }
 
-uint8_t Ipv6Extension::ProcessOptions (Ptr<Packet>& packet, uint8_t offset, uint8_t length, Ipv6Header const& ipv6Header, Ipv6Address dst, uint8_t *nextHeader, bool& isDropped)
+uint8_t Ipv6Extension::ProcessOptions (Ptr<Packet>& packet,
+                                       uint8_t offset,
+                                       uint8_t length,
+                                       Ipv6Header const& ipv6Header,
+                                       Ipv6Address dst,
+                                       uint8_t *nextHeader,
+                                       bool& stopProcessing,
+                                       bool& isDropped,
+                                       Ipv6L3Protocol::DropReason& dropReason)
 {
   NS_LOG_FUNCTION (this << packet << offset << length << ipv6Header << dst << nextHeader << isDropped);
 
@@ -126,17 +131,19 @@
 
             case 1:
               NS_LOG_LOGIC ("Unknown Option. Drop!");
-              m_dropTrace (packet);
               optionLength = 0;
               isDropped = true;
+              stopProcessing = true;
+              dropReason = Ipv6L3Protocol::DROP_UNKNOWN_OPTION;
               break;
 
             case 2:
               NS_LOG_LOGIC ("Unknown Option. Drop!");
               icmpv6->SendErrorParameterError (malformedPacket, ipv6Header.GetSourceAddress (), Icmpv6Header::ICMPV6_UNKNOWN_OPTION, offset + processedSize);
-              m_dropTrace (packet);
               optionLength = 0;
               isDropped = true;
+              stopProcessing = true;
+              dropReason = Ipv6L3Protocol::DROP_UNKNOWN_OPTION;
               break;
 
             case 3:
@@ -145,15 +152,11 @@
               if (!ipv6Header.GetDestinationAddress ().IsMulticast ())
                 {
                   icmpv6->SendErrorParameterError (malformedPacket, ipv6Header.GetSourceAddress (), Icmpv6Header::ICMPV6_UNKNOWN_OPTION, offset + processedSize);
-                  m_dropTrace (packet);
-                  optionLength = 0;
-                  isDropped = true;
-                  break;
                 }
-
-              m_dropTrace (packet);
               optionLength = 0;
               isDropped = true;
+              stopProcessing = true;
+              dropReason = Ipv6L3Protocol::DROP_UNKNOWN_OPTION;
               break;
 
             default:
@@ -183,8 +186,7 @@
   return 1;
 }
 
-NS_OBJECT_ENSURE_REGISTERED (Ipv6ExtensionHopByHop)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (Ipv6ExtensionHopByHop);
 
 TypeId Ipv6ExtensionHopByHop::GetTypeId ()
 {
@@ -212,7 +214,14 @@
   return EXT_NUMBER;
 }
 
-uint8_t Ipv6ExtensionHopByHop::Process (Ptr<Packet>& packet, uint8_t offset, Ipv6Header const& ipv6Header, Ipv6Address dst, uint8_t *nextHeader, bool& isDropped)
+uint8_t Ipv6ExtensionHopByHop::Process (Ptr<Packet>& packet,
+                                        uint8_t offset,
+                                        Ipv6Header const& ipv6Header,
+                                        Ipv6Address dst,
+                                        uint8_t *nextHeader,
+                                        bool& stopProcessing,
+                                        bool& isDropped,
+                                        Ipv6L3Protocol::DropReason& dropReason)
 {
   NS_LOG_FUNCTION (this << packet << offset << ipv6Header << dst << nextHeader << isDropped);
 
@@ -230,14 +239,13 @@
   offset += processedSize;
   uint8_t length = hopbyhopHeader.GetLength () - hopbyhopHeader.GetOptionsOffset ();
 
-  processedSize += ProcessOptions (packet, offset, length, ipv6Header, dst, nextHeader, isDropped);
+  processedSize += ProcessOptions (packet, offset, length, ipv6Header, dst, nextHeader, stopProcessing, isDropped, dropReason);
 
   return processedSize;
 }
 
 
-NS_OBJECT_ENSURE_REGISTERED (Ipv6ExtensionDestination)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (Ipv6ExtensionDestination);
 
 TypeId Ipv6ExtensionDestination::GetTypeId ()
 {
@@ -265,7 +273,14 @@
   return EXT_NUMBER;
 }
 
-uint8_t Ipv6ExtensionDestination::Process (Ptr<Packet>& packet, uint8_t offset, Ipv6Header const& ipv6Header, Ipv6Address dst, uint8_t *nextHeader, bool& isDropped)
+uint8_t Ipv6ExtensionDestination::Process (Ptr<Packet>& packet,
+                                           uint8_t offset,
+                                           Ipv6Header const& ipv6Header,
+                                           Ipv6Address dst,
+                                           uint8_t *nextHeader,
+                                           bool& stopProcessing,
+                                           bool& isDropped,
+                                           Ipv6L3Protocol::DropReason& dropReason)
 {
   NS_LOG_FUNCTION (this << packet << offset << ipv6Header << dst << nextHeader << isDropped);
 
@@ -283,14 +298,13 @@
   offset += processedSize;
   uint8_t length = destinationHeader.GetLength () - destinationHeader.GetOptionsOffset ();
 
-  processedSize += ProcessOptions (packet, offset, length, ipv6Header, dst, nextHeader, isDropped);
+  processedSize += ProcessOptions (packet, offset, length, ipv6Header, dst, nextHeader, stopProcessing, isDropped, dropReason);
 
   return processedSize;
 }
 
 
-NS_OBJECT_ENSURE_REGISTERED (Ipv6ExtensionFragment)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (Ipv6ExtensionFragment);
 
 TypeId Ipv6ExtensionFragment::GetTypeId ()
 {
@@ -331,7 +345,14 @@
   return EXT_NUMBER;
 }
 
-uint8_t Ipv6ExtensionFragment::Process (Ptr<Packet>& packet, uint8_t offset, Ipv6Header const& ipv6Header, Ipv6Address dst, uint8_t *nextHeader, bool& isDropped)
+uint8_t Ipv6ExtensionFragment::Process (Ptr<Packet>& packet,
+                                        uint8_t offset,
+                                        Ipv6Header const& ipv6Header,
+                                        Ipv6Address dst,
+                                        uint8_t *nextHeader,
+                                        bool& stopProcessing,
+                                        bool& isDropped,
+                                        Ipv6L3Protocol::DropReason& dropReason)
 {
   NS_LOG_FUNCTION (this << packet << offset << ipv6Header << dst << nextHeader << isDropped);
 
@@ -386,12 +407,11 @@
       packet = fragments->GetPacket ();
       fragments->CancelTimeout ();
       m_fragments.erase (fragmentsId);
-      isDropped = false;
+      stopProcessing = false;
     }
   else
     {
-      // the fragment is not "dropped", but Ipv6L3Protocol::LocalDeliver must stop processing it.
-      isDropped = true;
+      stopProcessing = true;
     }
 
   return 0;
@@ -573,7 +593,7 @@
 
 
 void Ipv6ExtensionFragment::HandleFragmentsTimeout (std::pair<Ipv6Address, uint32_t> fragmentsId,
-                                                    Ipv6Header & ipHeader)
+                                                    Ipv6Header ipHeader)
 {
   Ptr<Fragments> fragments;
 
@@ -583,15 +603,17 @@
 
   Ptr<Packet> packet = fragments->GetPartialPacket ();
 
-  packet->AddHeader (ipHeader);
-
   // if we have at least 8 bytes, we can send an ICMP.
   if ( packet->GetSize () > 8 )
     {
+      Ptr<Packet> p = packet->Copy ();
+      p->AddHeader (ipHeader);
       Ptr<Icmpv6L4Protocol> icmp = GetNode ()->GetObject<Icmpv6L4Protocol> ();
-      icmp->SendErrorTimeExceeded (packet, ipHeader.GetSourceAddress (), Icmpv6Header::ICMPV6_FRAGTIME);
+      icmp->SendErrorTimeExceeded (p, ipHeader.GetSourceAddress (), Icmpv6Header::ICMPV6_FRAGTIME);
     }
-  m_dropTrace (packet);
+
+  Ptr<Ipv6L3Protocol> ipL3 = GetNode ()->GetObject<Ipv6L3Protocol> ();
+  ipL3->ReportDrop (ipHeader, packet, Ipv6L3Protocol::DROP_FRAGMENT_TIMEOUT);
 
   // clear the buffers
   m_fragments.erase (fragmentsId);
@@ -707,8 +729,7 @@
 }
 
 
-NS_OBJECT_ENSURE_REGISTERED (Ipv6ExtensionRouting)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (Ipv6ExtensionRouting);
 
 TypeId Ipv6ExtensionRouting::GetTypeId ()
 {
@@ -742,7 +763,14 @@
   return 0;
 }
 
-uint8_t Ipv6ExtensionRouting::Process (Ptr<Packet>& packet, uint8_t offset, Ipv6Header const& ipv6Header, Ipv6Address dst, uint8_t *nextHeader, bool& isDropped)
+uint8_t Ipv6ExtensionRouting::Process (Ptr<Packet>& packet,
+                                       uint8_t offset,
+                                       Ipv6Header const& ipv6Header,
+                                       Ipv6Address dst,
+                                       uint8_t *nextHeader,
+                                       bool& stopProcessing,
+                                       bool& isDropped,
+                                       Ipv6L3Protocol::DropReason& dropReason)
 {
   NS_LOG_FUNCTION (this << packet << offset << ipv6Header << dst << nextHeader << isDropped);
 
@@ -782,19 +810,19 @@
           NS_LOG_LOGIC ("Malformed header. Drop!");
 
           icmpv6->SendErrorParameterError (malformedPacket, ipv6Header.GetSourceAddress (), Icmpv6Header::ICMPV6_MALFORMED_HEADER, offset + 1);
-          m_dropTrace (packet);
+          dropReason = Ipv6L3Protocol::DROP_MALFORMED_HEADER;
           isDropped = true;
+          stopProcessing = true;
         }
 
       return routingLength;
     }
 
-  return ipv6ExtensionRouting->Process (packet, offset, ipv6Header, dst, (uint8_t *)0, isDropped);
+  return ipv6ExtensionRouting->Process (packet, offset, ipv6Header, dst, (uint8_t *)0, stopProcessing, isDropped, dropReason);
 }
 
 
-NS_OBJECT_ENSURE_REGISTERED (Ipv6ExtensionRoutingDemux)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (Ipv6ExtensionRoutingDemux);
 
 TypeId Ipv6ExtensionRoutingDemux::GetTypeId ()
 {
@@ -856,8 +884,7 @@
 }
 
 
-NS_OBJECT_ENSURE_REGISTERED (Ipv6ExtensionLooseRouting)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (Ipv6ExtensionLooseRouting);
 
 TypeId Ipv6ExtensionLooseRouting::GetTypeId ()
 {
@@ -885,7 +912,14 @@
   return TYPE_ROUTING;
 }
 
-uint8_t Ipv6ExtensionLooseRouting::Process (Ptr<Packet>& packet, uint8_t offset, Ipv6Header const& ipv6Header, Ipv6Address dst, uint8_t *nextHeader, bool& isDropped)
+uint8_t Ipv6ExtensionLooseRouting::Process (Ptr<Packet>& packet,
+                                            uint8_t offset,
+                                            Ipv6Header const& ipv6Header,
+                                            Ipv6Address dst,
+                                            uint8_t *nextHeader,
+                                            bool& stopProcessing,
+                                            bool& isDropped,
+                                            Ipv6L3Protocol::DropReason& dropReason)
 {
   NS_LOG_FUNCTION (this << packet << offset << ipv6Header << dst << nextHeader << isDropped);
 
@@ -938,8 +972,9 @@
     {
       NS_LOG_LOGIC ("Malformed header. Drop!");
       icmpv6->SendErrorParameterError (malformedPacket, srcAddress, Icmpv6Header::ICMPV6_MALFORMED_HEADER, offset + 1);
-      m_dropTrace (packet);
+      dropReason = Ipv6L3Protocol::DROP_MALFORMED_HEADER;
       isDropped = true;
+      stopProcessing = true;
       return routingHeader.GetSerializedSize ();
     }
 
@@ -947,8 +982,9 @@
     {
       NS_LOG_LOGIC ("Malformed header. Drop!");
       icmpv6->SendErrorParameterError (malformedPacket, srcAddress, Icmpv6Header::ICMPV6_MALFORMED_HEADER, offset + 3);
-      m_dropTrace (packet);
+      dropReason = Ipv6L3Protocol::DROP_MALFORMED_HEADER;
       isDropped = true;
+      stopProcessing = true;
       return routingHeader.GetSerializedSize ();
     }
 
@@ -958,8 +994,9 @@
 
   if (nextAddress.IsMulticast () || destAddress.IsMulticast ())
     {
-      m_dropTrace (packet);
+      dropReason = Ipv6L3Protocol::DROP_MALFORMED_HEADER;
       isDropped = true;
+      stopProcessing = true;
       return routingHeader.GetSerializedSize ();
     }
 
@@ -970,8 +1007,9 @@
     {
       NS_LOG_LOGIC ("Time Exceeded : Hop Limit <= 1. Drop!");
       icmpv6->SendErrorTimeExceeded (malformedPacket, srcAddress, Icmpv6Header::ICMPV6_HOPLIMIT);
-      m_dropTrace (packet);
+      dropReason = Ipv6L3Protocol::DROP_MALFORMED_HEADER;
       isDropped = true;
+      stopProcessing = true;
       return routingHeader.GetSerializedSize ();
     }
 
@@ -1010,8 +1048,7 @@
 }
 
 
-NS_OBJECT_ENSURE_REGISTERED (Ipv6ExtensionESP)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (Ipv6ExtensionESP);
 
 TypeId Ipv6ExtensionESP::GetTypeId ()
 {
@@ -1039,7 +1076,14 @@
   return EXT_NUMBER;
 }
 
-uint8_t Ipv6ExtensionESP::Process (Ptr<Packet>& packet, uint8_t offset, Ipv6Header const& ipv6Header, Ipv6Address dst, uint8_t *nextHeader, bool& isDropped)
+uint8_t Ipv6ExtensionESP::Process (Ptr<Packet>& packet,
+                                   uint8_t offset,
+                                   Ipv6Header const& ipv6Header,
+                                   Ipv6Address dst,
+                                   uint8_t *nextHeader,
+                                   bool& stopProcessing,
+                                   bool& isDropped,
+                                   Ipv6L3Protocol::DropReason& dropReason)
 {
   NS_LOG_FUNCTION (this << packet << offset << ipv6Header << dst << nextHeader << isDropped);
 
@@ -1049,8 +1093,7 @@
 }
 
 
-NS_OBJECT_ENSURE_REGISTERED (Ipv6ExtensionAH)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (Ipv6ExtensionAH);
 
 TypeId Ipv6ExtensionAH::GetTypeId ()
 {
@@ -1078,7 +1121,14 @@
   return EXT_NUMBER;
 }
 
-uint8_t Ipv6ExtensionAH::Process (Ptr<Packet>& packet, uint8_t offset, Ipv6Header const& ipv6Header, Ipv6Address dst, uint8_t *nextHeader, bool& isDropped)
+uint8_t Ipv6ExtensionAH::Process (Ptr<Packet>& packet,
+                                  uint8_t offset,
+                                  Ipv6Header const& ipv6Header,
+                                  Ipv6Address dst,
+                                  uint8_t *nextHeader,
+                                  bool& stopProcessing,
+                                  bool& isDropped,
+                                  Ipv6L3Protocol::DropReason& dropReason)
 {
   NS_LOG_FUNCTION (this << packet << offset << ipv6Header << dst << nextHeader << isDropped);
 
diff -Naur ns-3.19/src/internet/model/ipv6-extension-demux.cc ns-3.20/src/internet/model/ipv6-extension-demux.cc
--- ns-3.19/src/internet/model/ipv6-extension-demux.cc	2014-06-17 10:34:00.506636137 -0700
+++ ns-3.20/src/internet/model/ipv6-extension-demux.cc	2014-06-17 10:33:13.827996471 -0700
@@ -28,8 +28,7 @@
 namespace ns3
 {
 
-NS_OBJECT_ENSURE_REGISTERED (Ipv6ExtensionDemux)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (Ipv6ExtensionDemux);
 
 TypeId Ipv6ExtensionDemux::GetTypeId ()
 {
diff -Naur ns-3.19/src/internet/model/ipv6-extension.h ns-3.20/src/internet/model/ipv6-extension.h
--- ns-3.19/src/internet/model/ipv6-extension.h	2014-06-17 10:34:00.508636121 -0700
+++ ns-3.20/src/internet/model/ipv6-extension.h	2014-06-17 10:33:13.829996455 -0700
@@ -33,6 +33,7 @@
 #include "ns3/packet.h"
 #include "ns3/random-variable-stream.h"
 #include "ns3/ipv6-address.h"
+#include "ns3/ipv6-l3-protocol.h"
 #include "ns3/traced-callback.h"
 
 
@@ -90,10 +91,19 @@
    * \param ipv6Header the IPv6 header of packet received
    * \param dst destination address of the packet received (i.e. us)
    * \param nextHeader the next header
-   * \param isDropped if the packet must be dropped
+   * \param stopProcessing true if the packet must not be further processed
+   * \param isDropped true if the packet must be dropped
+   * \param dropReason dropping reason
    * \return the size processed
    */
-  virtual uint8_t Process (Ptr<Packet>& packet, uint8_t offset, Ipv6Header const& ipv6Header, Ipv6Address dst, uint8_t *nextHeader, bool& isDropped) = 0;
+  virtual uint8_t Process (Ptr<Packet>& packet,
+                           uint8_t offset,
+                           Ipv6Header const& ipv6Header,
+                           Ipv6Address dst,
+                           uint8_t *nextHeader,
+                           bool& stopProcessing,
+                           bool& isDropped,
+                           Ipv6L3Protocol::DropReason& dropReason) = 0;
 
   /**
    * \brief Process options
@@ -105,10 +115,21 @@
    * \param ipv6Header the IPv6 header of packet received
    * \param dst destination address of the packet received (i.e. us)
    * \param nextHeader the next header
-   * \param isDropped if the packet must be dropped
+   * \param stopProcessing true if the packet must not be further processed
+   * \param isDropped true if the packet must be dropped
+   * \param dropReason dropping reason
    * \return the size processed
    */
-  virtual uint8_t ProcessOptions (Ptr<Packet>& packet, uint8_t offset, uint8_t length, Ipv6Header const& ipv6Header, Ipv6Address dst, uint8_t *nextHeader, bool& isDropped);
+  virtual uint8_t ProcessOptions (Ptr<Packet>& packet,
+                                  uint8_t offset,
+                                  uint8_t length,
+                                  Ipv6Header const& ipv6Header,
+                                  Ipv6Address dst,
+                                  uint8_t *nextHeader,
+                                  bool& stopProcessing,
+                                  bool& isDropped,
+                                  Ipv6L3Protocol::DropReason& dropReason
+                                  );
 
  /**
   * Assign a fixed random variable stream number to the random variables
@@ -122,11 +143,6 @@
 
 protected:
   /**
-   * \brief Drop trace callback.
-   */
-  TracedCallback<Ptr<const Packet> > m_dropTrace;
-
-  /**
    * \brief Provides uniform random variables.
    */
   Ptr<UniformRandomVariable> m_uvar;
@@ -172,18 +188,14 @@
    */
   virtual uint8_t GetExtensionNumber () const;
 
-  /**
-   * \brief Process method
-   * Called from Ipv6L3Protocol::Receive.
-   * \param packet the packet
-   * \param offset the offset of the extension to process
-   * \param ipv6Header the IPv6 header of packet received
-   * \param dst destination address of the packet received (i.e. us)
-   * \param nextHeader the next header
-   * \param isDropped if the packet must be dropped
-   * \return the size processed
-   */
-  virtual uint8_t Process (Ptr<Packet>& packet, uint8_t offset, Ipv6Header const& ipv6Header, Ipv6Address dst, uint8_t *nextHeader, bool& isDropped);
+  virtual uint8_t Process (Ptr<Packet>& packet,
+                           uint8_t offset,
+                           Ipv6Header const& ipv6Header,
+                           Ipv6Address dst,
+                           uint8_t *nextHeader,
+                           bool& stopProcessing,
+                           bool& isDropped,
+                           Ipv6L3Protocol::DropReason& dropReason);
 };
 
 /**
@@ -220,18 +232,14 @@
    */
   virtual uint8_t GetExtensionNumber () const;
 
-  /**
-   * \brief Process method
-   * Called from Ipv6L3Protocol::Receive.
-   * \param packet the packet
-   * \param offset the offset of the extension to process
-   * \param ipv6Header the IPv6 header of packet received
-   * \param dst destination address of the packet received (i.e. us)
-   * \param nextHeader the next header
-   * \param isDropped if the packet must be dropped
-   * \return the size processed
-   */
-  virtual uint8_t Process (Ptr<Packet>& packet, uint8_t offset, Ipv6Header const& ipv6Header, Ipv6Address dst, uint8_t *nextHeader, bool& isDropped);
+  virtual uint8_t Process (Ptr<Packet>& packet,
+                           uint8_t offset,
+                           Ipv6Header const& ipv6Header,
+                           Ipv6Address dst,
+                           uint8_t *nextHeader,
+                           bool& stopProcessing,
+                           bool& isDropped,
+                           Ipv6L3Protocol::DropReason& dropReason);
 };
 
 /**
@@ -268,18 +276,14 @@
    */
   virtual uint8_t GetExtensionNumber () const;
 
-  /**
-   * \brief Process method
-   * Called from Ipv6L3Protocol::Receive.
-   * \param packet the packet
-   * \param offset the offset of the extension to process
-   * \param ipv6Header the IPv6 header of packet received
-   * \param dst destination address of the packet received (i.e. us)
-   * \param nextHeader the next header
-   * \param isDropped if the packet must be dropped
-   * \return the size processed
-   */
-  virtual uint8_t Process (Ptr<Packet>& packet, uint8_t offset, Ipv6Header const& ipv6Header, Ipv6Address dst, uint8_t *nextHeader, bool& isDropped);
+  virtual uint8_t Process (Ptr<Packet>& packet,
+                           uint8_t offset,
+                           Ipv6Header const& ipv6Header,
+                           Ipv6Address dst,
+                           uint8_t *nextHeader,
+                           bool& stopProcessing,
+                           bool& isDropped,
+                           Ipv6L3Protocol::DropReason& dropReason);
 
   /**
    * \brief Fragment a packet
@@ -382,7 +386,7 @@
    * \param key representing the packet fragments
    * \param ipHeader the IP header of the original packet
    */
-  void HandleFragmentsTimeout (std::pair<Ipv6Address, uint32_t> key, Ipv6Header & ipHeader);
+  void HandleFragmentsTimeout (std::pair<Ipv6Address, uint32_t> key, Ipv6Header ipHeader);
 
   /**
    * \brief Get the packet parts so far received.
@@ -453,19 +457,14 @@
    */
   virtual uint8_t GetTypeRouting () const;
 
-  /**
-   * \brief Process method
-   *
-   * Called from Ipv6L3Protocol::Receive.
-   * \param packet the packet
-   * \param offset the offset of the extension to process
-   * \param ipv6Header the IPv6 header of packet received
-   * \param dst destination address of the packet received (i.e. us)
-   * \param nextHeader the next header
-   * \param isDropped if the packet must be dropped
-   * \return the size processed
-   */
-  virtual uint8_t Process (Ptr<Packet>& packet, uint8_t offset, Ipv6Header const& ipv6Header, Ipv6Address dst, uint8_t *nextHeader, bool& isDropped);
+  virtual uint8_t Process (Ptr<Packet>& packet,
+                           uint8_t offset,
+                           Ipv6Header const& ipv6Header,
+                           Ipv6Address dst,
+                           uint8_t *nextHeader,
+                           bool& stopProcessing,
+                           bool& isDropped,
+                           Ipv6L3Protocol::DropReason& dropReason);
 };
 
 /**
@@ -573,20 +572,14 @@
    */
   virtual uint8_t GetTypeRouting () const;
 
-  /**
-   * \brief Process method
-   *
-   * Called from Ipv6L3Protocol::Receive.
-   *
-   * \param packet the packet
-   * \param offset the offset of the extension to process
-   * \param ipv6Header the IPv6 header of packet received
-   * \param dst destination address of the packet received (i.e. us)
-   * \param nextHeader the next header
-   * \param isDropped if the packet must be dropped
-   * \return the size processed
-   */
-  virtual uint8_t Process (Ptr<Packet>& packet, uint8_t offset, Ipv6Header const& ipv6Header, Ipv6Address dst, uint8_t *nextHeader, bool& isDropped);
+  virtual uint8_t Process (Ptr<Packet>& packet,
+                           uint8_t offset,
+                           Ipv6Header const& ipv6Header,
+                           Ipv6Address dst,
+                           uint8_t *nextHeader,
+                           bool& stopProcessing,
+                           bool& isDropped,
+                           Ipv6L3Protocol::DropReason& dropReason);
 };
 
 /**
@@ -623,19 +616,14 @@
    */
   virtual uint8_t GetExtensionNumber () const;
 
-  /**
-   * \brief Process method
-   * Called from Ipv6L3Protocol::Receive.
-   *
-   * \param packet the packet
-   * \param offset the offset of the extension to process
-   * \param ipv6Header the IPv6 header of packet received
-   * \param dst destination address of the packet received (i.e. us)
-   * \param nextHeader the next header
-   * \param isDropped if the packet must be dropped
-   * \return the size processed
-   */
-  virtual uint8_t Process (Ptr<Packet>& packet, uint8_t offset, Ipv6Header const& ipv6Header, Ipv6Address dst, uint8_t *nextHeader, bool& isDropped);
+  virtual uint8_t Process (Ptr<Packet>& packet,
+                           uint8_t offset,
+                           Ipv6Header const& ipv6Header,
+                           Ipv6Address dst,
+                           uint8_t *nextHeader,
+                           bool& stopProcessing,
+                           bool& isDropped,
+                           Ipv6L3Protocol::DropReason& dropReason);
 };
 
 /**
@@ -672,19 +660,14 @@
    */
   virtual uint8_t GetExtensionNumber () const;
 
-  /**
-   * \brief Process method
-   * Called from Ipv6L3Protocol::Receive.
-   *
-   * \param packet the packet
-   * \param offset the offset of the extension to process
-   * \param ipv6Header the IPv6 header of packet received
-   * \param dst destination address of the packet received (i.e. us)
-   * \param nextHeader the next header
-   * \param isDropped if the packet must be dropped
-   * \return the size processed
-   */
-  virtual uint8_t Process (Ptr<Packet>& packet, uint8_t offset, Ipv6Header const& ipv6Header, Ipv6Address dst, uint8_t *nextHeader, bool& isDropped);
+  virtual uint8_t Process (Ptr<Packet>& packet,
+                           uint8_t offset,
+                           Ipv6Header const& ipv6Header,
+                           Ipv6Address dst,
+                           uint8_t *nextHeader,
+                           bool& stopProcessing,
+                           bool& isDropped,
+                           Ipv6L3Protocol::DropReason& dropReason);
 };
 
 } /* namespace ns3 */
diff -Naur ns-3.19/src/internet/model/ipv6-extension-header.cc ns-3.20/src/internet/model/ipv6-extension-header.cc
--- ns-3.19/src/internet/model/ipv6-extension-header.cc	2014-06-17 10:34:00.507636129 -0700
+++ ns-3.20/src/internet/model/ipv6-extension-header.cc	2014-06-17 10:33:13.828996463 -0700
@@ -26,11 +26,9 @@
 namespace ns3
 {
 
-NS_LOG_COMPONENT_DEFINE ("Ipv6ExtensionHeader")
-  ;
+NS_LOG_COMPONENT_DEFINE ("Ipv6ExtensionHeader");
 
-NS_OBJECT_ENSURE_REGISTERED (Ipv6ExtensionHeader)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (Ipv6ExtensionHeader);
 
 TypeId Ipv6ExtensionHeader::GetTypeId ()
 {
@@ -201,8 +199,7 @@
 }
 
 
-NS_OBJECT_ENSURE_REGISTERED (Ipv6ExtensionHopByHopHeader)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (Ipv6ExtensionHopByHopHeader);
 
 TypeId Ipv6ExtensionHopByHopHeader::GetTypeId ()
 {
@@ -257,8 +254,7 @@
   return GetSerializedSize ();
 }
 
-NS_OBJECT_ENSURE_REGISTERED (Ipv6ExtensionDestinationHeader)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (Ipv6ExtensionDestinationHeader);
 
 TypeId Ipv6ExtensionDestinationHeader::GetTypeId ()
 {
@@ -313,8 +309,7 @@
   return GetSerializedSize ();
 }
 
-NS_OBJECT_ENSURE_REGISTERED (Ipv6ExtensionFragmentHeader)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (Ipv6ExtensionFragmentHeader);
 
 TypeId Ipv6ExtensionFragmentHeader::GetTypeId ()
 {
@@ -407,8 +402,7 @@
   return GetSerializedSize ();
 }
 
-NS_OBJECT_ENSURE_REGISTERED (Ipv6ExtensionRoutingHeader)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (Ipv6ExtensionRoutingHeader);
 
 TypeId Ipv6ExtensionRoutingHeader::GetTypeId ()
 {
@@ -487,8 +481,7 @@
   return GetSerializedSize ();
 }
 
-NS_OBJECT_ENSURE_REGISTERED (Ipv6ExtensionLooseRoutingHeader)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (Ipv6ExtensionLooseRoutingHeader);
 
 TypeId Ipv6ExtensionLooseRoutingHeader::GetTypeId ()
 {
@@ -595,8 +588,7 @@
   return GetSerializedSize ();
 }
 
-NS_OBJECT_ENSURE_REGISTERED (Ipv6ExtensionESPHeader)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (Ipv6ExtensionESPHeader);
 
 TypeId Ipv6ExtensionESPHeader::GetTypeId ()
 {
@@ -642,8 +634,7 @@
   return 0;
 }
 
-NS_OBJECT_ENSURE_REGISTERED (Ipv6ExtensionAHHeader)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (Ipv6ExtensionAHHeader);
 
 TypeId Ipv6ExtensionAHHeader::GetTypeId ()
 {
diff -Naur ns-3.19/src/internet/model/ipv6.h ns-3.20/src/internet/model/ipv6.h
--- ns-3.19/src/internet/model/ipv6.h	2014-06-17 10:34:00.525635990 -0700
+++ ns-3.20/src/internet/model/ipv6.h	2014-06-17 10:33:13.846996324 -0700
@@ -38,6 +38,7 @@
 class NetDevice;
 class Packet;
 class Ipv6RoutingProtocol;
+class IpL4Protocol;
 
 /**
  * \ingroup internet
@@ -304,6 +305,21 @@
   virtual void SetForwarding (uint32_t interface, bool val) = 0;
 
   /**
+   * \brief Choose the source address to use with destination address.
+   * \param interface interface index
+   * \param dest IPv6 destination address
+   * \return IPv6 source address to use
+   */
+  virtual Ipv6Address SourceAddressSelection (uint32_t interface, Ipv6Address dest) = 0;
+
+  /**
+   * \brief Get L4 protocol by protocol number.
+   * \param protocolNumber protocol number
+   * \return corresponding Ipv6L4Protocol or 0 if not found
+   */
+  virtual Ptr<IpL4Protocol> GetProtocol (int protocolNumber) const = 0;
+
+  /**
    * \brief Register the IPv6 Extensions.
    */
   virtual void RegisterExtensions () = 0;
diff -Naur ns-3.19/src/internet/model/ipv6-header.cc ns-3.20/src/internet/model/ipv6-header.cc
--- ns-3.19/src/internet/model/ipv6-header.cc	2014-06-17 10:34:00.509636113 -0700
+++ ns-3.20/src/internet/model/ipv6-header.cc	2014-06-17 10:33:13.830996448 -0700
@@ -29,8 +29,7 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (Ipv6Header)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (Ipv6Header);
 
 Ipv6Header::Ipv6Header ()
   : m_version (6),
diff -Naur ns-3.19/src/internet/model/ipv6-interface-address.cc ns-3.20/src/internet/model/ipv6-interface-address.cc
--- ns-3.19/src/internet/model/ipv6-interface-address.cc	2014-06-17 10:34:00.510636106 -0700
+++ ns-3.20/src/internet/model/ipv6-interface-address.cc	2014-06-17 10:33:13.831996440 -0700
@@ -28,8 +28,7 @@
 namespace ns3
 {
 
-NS_LOG_COMPONENT_DEFINE ("Ipv6InterfaceAddress")
-  ;
+NS_LOG_COMPONENT_DEFINE ("Ipv6InterfaceAddress");
 
 Ipv6InterfaceAddress::Ipv6InterfaceAddress () 
   : m_address (Ipv6Address ()),
@@ -138,6 +137,29 @@
   return m_scope;
 }
 
+bool Ipv6InterfaceAddress::IsInSameSubnet (Ipv6Address b) const
+{
+  NS_LOG_FUNCTION_NOARGS ();
+
+  Ipv6Address aAddr = m_address;
+  aAddr = aAddr.CombinePrefix (m_prefix);
+  Ipv6Address bAddr = b;
+  bAddr = bAddr.CombinePrefix (m_prefix);
+
+  if (aAddr == bAddr)
+    {
+      return true;
+    }
+
+  if ((bAddr.IsLinkLocalMulticast () && aAddr.IsLinkLocal ()) ||
+      (aAddr.IsLinkLocalMulticast () && bAddr.IsLinkLocal ()))
+    {
+      return true;
+    }
+
+  return false;
+}
+
 std::ostream& operator<< (std::ostream& os, const Ipv6InterfaceAddress &addr)
 {
   os << "address: " << addr.GetAddress () << addr.GetPrefix () << "; scope: ";
diff -Naur ns-3.19/src/internet/model/ipv6-interface-address.h ns-3.20/src/internet/model/ipv6-interface-address.h
--- ns-3.19/src/internet/model/ipv6-interface-address.h	2014-06-17 10:34:00.510636106 -0700
+++ ns-3.20/src/internet/model/ipv6-interface-address.h	2014-06-17 10:33:13.831996440 -0700
@@ -134,6 +134,13 @@
   Ipv6InterfaceAddress::Scope_e GetScope () const;
 
   /**
+   * \brief Checks if the address is in the same subnet.
+   * \param b the address to check
+   * \return true if the address is in the same subnet.
+   */
+  bool IsInSameSubnet (Ipv6Address b) const;
+
+  /**
    * \brief Set the latest DAD probe packet UID.
    * \param uid packet uid
    */
diff -Naur ns-3.19/src/internet/model/ipv6-interface.cc ns-3.20/src/internet/model/ipv6-interface.cc
--- ns-3.19/src/internet/model/ipv6-interface.cc	2014-06-17 10:34:00.511636098 -0700
+++ ns-3.20/src/internet/model/ipv6-interface.cc	2014-06-17 10:33:13.832996432 -0700
@@ -34,11 +34,9 @@
 namespace ns3
 {
 
-NS_LOG_COMPONENT_DEFINE ("Ipv6Interface")
-  ;
+NS_LOG_COMPONENT_DEFINE ("Ipv6Interface");
 
-NS_OBJECT_ENSURE_REGISTERED (Ipv6Interface)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (Ipv6Interface);
 
 TypeId Ipv6Interface::GetTypeId ()
 {
@@ -116,8 +114,13 @@
       return; /* no NDISC cache for ip6-localhost */
     }
 
-  Ptr<Icmpv6L4Protocol> icmpv6 = m_node->GetObject<Ipv6L3Protocol> ()->GetIcmpv6 ();
-  if (m_device->NeedsArp ())
+  Ptr<IpL4Protocol> proto = m_node->GetObject<Ipv6> ()->GetProtocol (Icmpv6L4Protocol::GetStaticProtocolNumber ());
+  Ptr<Icmpv6L4Protocol> icmpv6;
+  if (proto)
+    {
+      icmpv6 = proto->GetObject <Icmpv6L4Protocol> ();
+    }
+  if (icmpv6)
     {
       m_ndCache = icmpv6->CreateCache (m_device, this);
     }
@@ -183,6 +186,7 @@
   NS_LOG_FUNCTION_NOARGS ();
   m_ifup = false;
   m_addresses.clear ();
+  m_ndCache->Flush ();
 }
 
 bool Ipv6Interface::IsForwarding () const
@@ -218,7 +222,12 @@
       if (!addr.IsAny () || !addr.IsLocalhost ())
         {
           /* DAD handling */
-          Ptr<Icmpv6L4Protocol> icmpv6 = m_node->GetObject<Ipv6L3Protocol> ()->GetIcmpv6 ();
+          Ptr<IpL4Protocol> proto = m_node->GetObject<Ipv6> ()->GetProtocol (Icmpv6L4Protocol::GetStaticProtocolNumber ());
+          Ptr<Icmpv6L4Protocol> icmpv6;
+          if (proto)
+            {
+              icmpv6 = proto->GetObject <Icmpv6L4Protocol> ();
+            }
 
           if (icmpv6 && icmpv6->IsAlwaysDad ())
             {
diff -Naur ns-3.19/src/internet/model/ipv6-l3-protocol.cc ns-3.20/src/internet/model/ipv6-l3-protocol.cc
--- ns-3.19/src/internet/model/ipv6-l3-protocol.cc	2014-06-17 10:34:00.512636090 -0700
+++ ns-3.20/src/internet/model/ipv6-l3-protocol.cc	2014-06-17 10:33:13.833996425 -0700
@@ -49,11 +49,9 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (Ipv6L3Protocol)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (Ipv6L3Protocol);
 
-NS_LOG_COMPONENT_DEFINE ("Ipv6L3Protocol")
-  ;
+NS_LOG_COMPONENT_DEFINE ("Ipv6L3Protocol");
 
 const uint16_t Ipv6L3Protocol::PROT_NUMBER = 0x86DD;
 
@@ -85,6 +83,13 @@
                      MakeTraceSourceAccessor (&Ipv6L3Protocol::m_rxTrace))
     .AddTraceSource ("Drop", "Drop IPv6 packet",
                      MakeTraceSourceAccessor (&Ipv6L3Protocol::m_dropTrace))
+
+    .AddTraceSource ("SendOutgoing", "A newly-generated packet by this node is about to be queued for transmission",
+                     MakeTraceSourceAccessor (&Ipv6L3Protocol::m_sendOutgoingTrace))
+    .AddTraceSource ("UnicastForward", "A unicast IPv6 packet was received by this node and is being forwarded to another node",
+                     MakeTraceSourceAccessor (&Ipv6L3Protocol::m_unicastForwardTrace))
+    .AddTraceSource ("LocalDeliver", "An IPv6 packet was received by/for this node, and it is being forward up the stack",
+                     MakeTraceSourceAccessor (&Ipv6L3Protocol::m_localDeliverTrace))
   ;
   return tid;
 }
@@ -572,6 +577,45 @@
   interface->SetForwarding (val);
 }
 
+Ipv6Address Ipv6L3Protocol::SourceAddressSelection (uint32_t interface, Ipv6Address dest)
+{
+  NS_LOG_FUNCTION (this << interface << dest);
+  Ipv6Address ret;
+
+  if (dest.IsLinkLocal () || dest.IsLinkLocalMulticast ())
+    {
+      for (uint32_t i = 0; i < GetNAddresses (interface); i++)
+        {
+          Ipv6InterfaceAddress test = GetAddress (interface, i);
+          if (test.GetScope () == Ipv6InterfaceAddress::LINKLOCAL)
+            {
+              return test.GetAddress ();
+            }
+        }
+      NS_ASSERT_MSG (false, "No link-local address found on interface " << interface);
+    }
+
+  for (uint32_t i = 0; i < GetNAddresses (interface); i++)
+    {
+      Ipv6InterfaceAddress test = GetAddress (interface, i);
+
+      if (test.GetScope () == Ipv6InterfaceAddress::GLOBAL)
+        {
+          if (test.IsInSameSubnet (dest))
+            {
+              return test.GetAddress ();
+            }
+          else
+            {
+              ret = test.GetAddress ();
+            }
+        }
+    }
+
+  // no specific match found. Use a global address (any useful is fine).
+  return ret;
+}
+
 void Ipv6L3Protocol::SetIpForward (bool forward)
 {
   NS_LOG_FUNCTION (this << forward);
@@ -747,6 +791,8 @@
     {
       NS_LOG_LOGIC ("Ipv6L3Protocol::Send case 1: passed in with a route");
       hdr = BuildHeader (source, destination, protocol, packet->GetSize (), ttl, tclass);
+      int32_t interface = GetInterfaceForDevice (route->GetOutputDevice ());
+      m_sendOutgoingTrace (hdr, packet, interface);
       SendRealOut (route, packet, hdr);
       return;
     }
@@ -757,6 +803,8 @@
       NS_LOG_LOGIC ("Ipv6L3Protocol::Send case 1: probably sent to machine on same IPv6 network");
       /* NS_FATAL_ERROR ("This case is not yet implemented"); */
       hdr = BuildHeader (source, destination, protocol, packet->GetSize (), ttl, tclass);
+      int32_t interface = GetInterfaceForDevice (route->GetOutputDevice ());
+      m_sendOutgoingTrace (hdr, packet, interface);
       SendRealOut (route, packet, hdr);
       return;
     }
@@ -786,6 +834,8 @@
 
   if (newRoute)
     {
+      int32_t interface = GetInterfaceForDevice (newRoute->GetOutputDevice ());
+      m_sendOutgoingTrace (hdr, packet, interface);
       SendRealOut (newRoute, packet, hdr);
     }
   else
@@ -845,7 +895,9 @@
   Ptr<Ipv6ExtensionDemux> ipv6ExtensionDemux = m_node->GetObject<Ipv6ExtensionDemux> ();
   Ptr<Ipv6Extension> ipv6Extension = 0;
   uint8_t nextHeader = hdr.GetNextHeader ();
+  bool stopProcessing = false;
   bool isDropped = false;
+  DropReason dropReason;
 
   if (nextHeader == Ipv6Header::IPV6_EXT_HOP_BY_HOP)
     {
@@ -853,11 +905,16 @@
 
       if (ipv6Extension)
         {
-          ipv6Extension->Process (packet, 0, hdr, hdr.GetDestinationAddress (), (uint8_t *)0, isDropped);
+          ipv6Extension->Process (packet, 0, hdr, hdr.GetDestinationAddress (), (uint8_t *)0, stopProcessing, isDropped, dropReason);
         }
 
       if (isDropped)
         {
+          m_dropTrace (hdr, packet, dropReason, m_node->GetObject<Ipv6> (), interface);
+        }
+
+      if (stopProcessing)
+        {
           return;
         }
     }
@@ -869,6 +926,7 @@
                                       MakeCallback (&Ipv6L3Protocol::RouteInputError, this)))
     {
       NS_LOG_WARN ("No route found for forwarding packet.  Drop.");
+      GetIcmpv6 ()->SendErrorDestinationUnreachable (p->Copy (), hdr.GetSourceAddress (), Icmpv6Header::ICMPV6_NO_ROUTE);
       m_dropTrace (hdr, packet, DROP_NO_ROUTE, m_node->GetObject<Ipv6> (), interface);
     }
 }
@@ -1027,9 +1085,8 @@
     {
       NS_LOG_WARN ("TTL exceeded.  Drop.");
       m_dropTrace (ipHeader, packet, DROP_TTL_EXPIRED, m_node->GetObject<Ipv6> (), 0);
-      // Do not reply to ICMPv6 or to multicast IPv6 address
-      if (ipHeader.GetNextHeader () != Icmpv6L4Protocol::PROT_NUMBER
-          && ipHeader.GetDestinationAddress ().IsMulticast () == false)
+      // Do not reply to multicast IPv6 address
+      if (ipHeader.GetDestinationAddress ().IsMulticast () == false)
         {
           packet->AddHeader (ipHeader);
           GetIcmpv6 ()->SendErrorTimeExceeded (packet, ipHeader.GetSourceAddress (), Icmpv6Header::ICMPV6_HOPLIMIT);
@@ -1076,7 +1133,8 @@
           icmpv6->SendRedirection (copy, linkLocal, src, target, dst, Address ());
         }
     }
-
+  int32_t interface = GetInterfaceForDevice (rtentry->GetOutputDevice ());
+  m_unicastForwardTrace (ipHeader, packet, interface);
   SendRealOut (rtentry, packet, ipHeader);
 }
 
@@ -1124,6 +1182,8 @@
   uint8_t nextHeader = ip.GetNextHeader ();
   uint8_t nextHeaderPosition = 0;
   bool isDropped = false;
+  bool stopProcessing = false;
+  DropReason dropReason;
 
   // check for a malformed hop-by-hop extension
   // this is a common case when forging IPv6 raw packets
@@ -1148,11 +1208,16 @@
         {
           uint8_t nextHeaderStep = 0;
           uint8_t curHeader = nextHeader;
-          nextHeaderStep = ipv6Extension->Process (p, nextHeaderPosition, ip, dst, &nextHeader, isDropped);
+          nextHeaderStep = ipv6Extension->Process (p, nextHeaderPosition, ip, dst, &nextHeader, stopProcessing, isDropped, dropReason);
           nextHeaderPosition += nextHeaderStep;
 
           if (isDropped)
             {
+              m_dropTrace (ip, packet, dropReason, m_node->GetObject<Ipv6> (), iif);
+            }
+
+          if (stopProcessing)
+            {
               return;
             }
           NS_ASSERT_MSG (nextHeaderStep != 0 || curHeader == Ipv6Header::IPV6_EXT_FRAGMENTATION,
@@ -1187,6 +1252,9 @@
 
               /* L4 protocol */
               Ptr<Packet> copy = p->Copy ();
+
+              m_localDeliverTrace (ip, p, iif);
+
               enum IpL4Protocol::RxStatus status = protocol->Receive (p, ip, GetInterface (iif));
 
               switch (status)
@@ -1289,5 +1357,10 @@
   m_node->AggregateObject (ipv6OptionDemux);
 }
 
+void Ipv6L3Protocol::ReportDrop (Ipv6Header ipHeader, Ptr<Packet> p, DropReason dropReason)
+{
+  m_dropTrace (ipHeader, p, dropReason, m_node->GetObject<Ipv6> (), 0);
+}
+
 } /* namespace ns3 */
 
diff -Naur ns-3.19/src/internet/model/ipv6-l3-protocol.h ns-3.20/src/internet/model/ipv6-l3-protocol.h
--- ns-3.19/src/internet/model/ipv6-l3-protocol.h	2014-06-17 10:34:00.513636082 -0700
+++ ns-3.20/src/internet/model/ipv6-l3-protocol.h	2014-06-17 10:33:13.834996417 -0700
@@ -30,6 +30,8 @@
 #include "ns3/ipv6-header.h"
 #include "ns3/ipv6-pmtu-cache.h"
 
+class Ipv6L3ProtocolTestCase;
+
 namespace ns3
 {
 
@@ -81,6 +83,9 @@
     DROP_INTERFACE_DOWN, /**< Interface is down so can not send packet */
     DROP_ROUTE_ERROR, /**< Route error */
     DROP_UNKNOWN_PROTOCOL, /**< Unknown L4 protocol */
+    DROP_UNKNOWN_OPTION, /**< Unknown option */
+    DROP_MALFORMED_HEADER, /**< Malformed header */
+    DROP_FRAGMENT_TIMEOUT, /**< Fragment timeout */
   };
 
   /**
@@ -116,7 +121,7 @@
    * \param protocolNumber protocol number
    * \return corresponding Ipv6L4Protocol or 0 if not found
    */
-  Ptr<IpL4Protocol> GetProtocol (int protocolNumber) const;
+  virtual Ptr<IpL4Protocol> GetProtocol (int protocolNumber) const;
 
   /**
    * \brief Create raw IPv6 socket.
@@ -321,6 +326,8 @@
    */
   void SetForwarding (uint32_t i, bool val);
 
+  Ipv6Address SourceAddressSelection (uint32_t interface, Ipv6Address dest);
+
   /**
    * \brief Get device by index.
    * \param i device index on this stack
@@ -367,6 +374,18 @@
    */
   virtual void RegisterOptions ();
 
+  /**
+   * \brief Report a packet drop
+   *
+   * This function is used by Fragment Timeout handling to signal a fragment drop.
+   *
+   * \param ipv6Header the IPv6 header of dropped packet
+   * \param p the packet (if available)
+   * \param dropReason the drop reason
+   *
+   */
+  virtual void ReportDrop (Ipv6Header ipHeader, Ptr<Packet> p, DropReason dropReason);
+
 protected:
   /**
    * \brief Dispose object.
@@ -382,7 +401,7 @@
 
 private:
   /* for unit-tests */
-  friend class Ipv6L3ProtocolTestCase;
+  friend class ::Ipv6L3ProtocolTestCase;
   friend class Ipv6ExtensionLooseRouting;
 
   /**
@@ -425,6 +444,13 @@
    */ 
   TracedCallback<const Ipv6Header &, Ptr<const Packet>, DropReason, Ptr<Ipv6>, uint32_t> m_dropTrace;
 
+  /// Trace of sent packets
+  TracedCallback<const Ipv6Header &, Ptr<const Packet>, uint32_t> m_sendOutgoingTrace;
+  /// Trace of unicast forwarded packets
+  TracedCallback<const Ipv6Header &, Ptr<const Packet>, uint32_t> m_unicastForwardTrace;
+  /// Trace of locally delivered packets
+  TracedCallback<const Ipv6Header &, Ptr<const Packet>, uint32_t> m_localDeliverTrace;
+
   /**
    * \brief Copy constructor.
    *
diff -Naur ns-3.19/src/internet/model/ipv6-list-routing.cc ns-3.20/src/internet/model/ipv6-list-routing.cc
--- ns-3.19/src/internet/model/ipv6-list-routing.cc	2014-06-17 10:34:00.514636075 -0700
+++ ns-3.20/src/internet/model/ipv6-list-routing.cc	2014-06-17 10:33:13.835996409 -0700
@@ -29,8 +29,7 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (Ipv6ListRouting)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (Ipv6ListRouting);
 
 TypeId
 Ipv6ListRouting::GetTypeId (void)
diff -Naur ns-3.19/src/internet/model/ipv6-option.cc ns-3.20/src/internet/model/ipv6-option.cc
--- ns-3.19/src/internet/model/ipv6-option.cc	2014-06-17 10:34:00.516636059 -0700
+++ ns-3.20/src/internet/model/ipv6-option.cc	2014-06-17 10:33:13.837996394 -0700
@@ -29,8 +29,7 @@
 namespace ns3
 {
 
-NS_OBJECT_ENSURE_REGISTERED (Ipv6Option)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (Ipv6Option);
 
 TypeId Ipv6Option::GetTypeId ()
 {
@@ -56,8 +55,7 @@
 }
 
 
-NS_OBJECT_ENSURE_REGISTERED (Ipv6OptionPad1)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (Ipv6OptionPad1);
 
 TypeId Ipv6OptionPad1::GetTypeId ()
 {
@@ -101,8 +99,7 @@
 }
 
 
-NS_OBJECT_ENSURE_REGISTERED (Ipv6OptionPadn)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (Ipv6OptionPadn);
 
 TypeId Ipv6OptionPadn::GetTypeId ()
 {
@@ -146,8 +143,7 @@
 }
 
 
-NS_OBJECT_ENSURE_REGISTERED (Ipv6OptionJumbogram)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (Ipv6OptionJumbogram);
 
 TypeId Ipv6OptionJumbogram::GetTypeId ()
 {
@@ -191,8 +187,7 @@
 }
 
 
-NS_OBJECT_ENSURE_REGISTERED (Ipv6OptionRouterAlert)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (Ipv6OptionRouterAlert);
 
 TypeId Ipv6OptionRouterAlert::GetTypeId ()
 {
diff -Naur ns-3.19/src/internet/model/ipv6-option-demux.cc ns-3.20/src/internet/model/ipv6-option-demux.cc
--- ns-3.19/src/internet/model/ipv6-option-demux.cc	2014-06-17 10:34:00.514636075 -0700
+++ ns-3.20/src/internet/model/ipv6-option-demux.cc	2014-06-17 10:33:13.835996409 -0700
@@ -28,8 +28,7 @@
 namespace ns3
 {
 
-NS_OBJECT_ENSURE_REGISTERED (Ipv6OptionDemux)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (Ipv6OptionDemux);
 
 TypeId Ipv6OptionDemux::GetTypeId ()
 {
diff -Naur ns-3.19/src/internet/model/ipv6-option-header.cc ns-3.20/src/internet/model/ipv6-option-header.cc
--- ns-3.19/src/internet/model/ipv6-option-header.cc	2014-06-17 10:34:00.515636067 -0700
+++ ns-3.20/src/internet/model/ipv6-option-header.cc	2014-06-17 10:33:13.836996402 -0700
@@ -26,11 +26,9 @@
 namespace ns3
 {
 
-NS_LOG_COMPONENT_DEFINE ("Ipv6OptionHeader")
-  ;
+NS_LOG_COMPONENT_DEFINE ("Ipv6OptionHeader");
 
-NS_OBJECT_ENSURE_REGISTERED (Ipv6OptionHeader)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (Ipv6OptionHeader);
 
 TypeId Ipv6OptionHeader::GetTypeId ()
 {
@@ -118,8 +116,7 @@
   return (Alignment){ 1,0};
 }
 
-NS_OBJECT_ENSURE_REGISTERED (Ipv6OptionPad1Header)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (Ipv6OptionPad1Header);
 
 TypeId Ipv6OptionPad1Header::GetTypeId ()
 {
@@ -170,8 +167,7 @@
   return GetSerializedSize ();
 }
 
-NS_OBJECT_ENSURE_REGISTERED (Ipv6OptionPadnHeader)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (Ipv6OptionPadnHeader);
 
 TypeId Ipv6OptionPadnHeader::GetTypeId ()
 {
@@ -231,8 +227,7 @@
   return GetSerializedSize ();
 }
 
-NS_OBJECT_ENSURE_REGISTERED (Ipv6OptionJumbogramHeader)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (Ipv6OptionJumbogramHeader);
 
 TypeId Ipv6OptionJumbogramHeader::GetTypeId ()
 {
@@ -303,8 +298,7 @@
   return (Alignment){ 4,2}; //4n+2
 }
 
-NS_OBJECT_ENSURE_REGISTERED (Ipv6OptionRouterAlertHeader)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (Ipv6OptionRouterAlertHeader);
 
 TypeId Ipv6OptionRouterAlertHeader::GetTypeId ()
 {
diff -Naur ns-3.19/src/internet/model/ipv6-packet-probe.cc ns-3.20/src/internet/model/ipv6-packet-probe.cc
--- ns-3.19/src/internet/model/ipv6-packet-probe.cc	2014-06-17 10:34:00.517636052 -0700
+++ ns-3.20/src/internet/model/ipv6-packet-probe.cc	2014-06-17 10:33:13.838996386 -0700
@@ -33,8 +33,7 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (Ipv6PacketProbe)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (Ipv6PacketProbe);
 
 TypeId
 Ipv6PacketProbe::GetTypeId ()
diff -Naur ns-3.19/src/internet/model/ipv6-pmtu-cache.cc ns-3.20/src/internet/model/ipv6-pmtu-cache.cc
--- ns-3.19/src/internet/model/ipv6-pmtu-cache.cc	2014-06-17 10:34:00.518636044 -0700
+++ ns-3.20/src/internet/model/ipv6-pmtu-cache.cc	2014-06-17 10:33:13.839996379 -0700
@@ -26,8 +26,7 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (Ipv6PmtuCache)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (Ipv6PmtuCache);
 
 TypeId Ipv6PmtuCache::GetTypeId ()
 {
diff -Naur ns-3.19/src/internet/model/ipv6-raw-socket-factory.cc ns-3.20/src/internet/model/ipv6-raw-socket-factory.cc
--- ns-3.19/src/internet/model/ipv6-raw-socket-factory.cc	2014-06-17 10:34:00.519636036 -0700
+++ ns-3.20/src/internet/model/ipv6-raw-socket-factory.cc	2014-06-17 10:33:13.840996371 -0700
@@ -24,8 +24,7 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (Ipv6RawSocketFactory)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (Ipv6RawSocketFactory);
 
 TypeId Ipv6RawSocketFactory::GetTypeId ()
 {
diff -Naur ns-3.19/src/internet/model/ipv6-raw-socket-impl.cc ns-3.20/src/internet/model/ipv6-raw-socket-impl.cc
--- ns-3.19/src/internet/model/ipv6-raw-socket-impl.cc	2014-06-17 10:34:00.520636028 -0700
+++ ns-3.20/src/internet/model/ipv6-raw-socket-impl.cc	2014-06-17 10:33:13.841996363 -0700
@@ -38,12 +38,10 @@
 namespace ns3
 {
 
-NS_LOG_COMPONENT_DEFINE ("Ipv6RawSocketImpl")
-  ;
+NS_LOG_COMPONENT_DEFINE ("Ipv6RawSocketImpl");
 
 
-NS_OBJECT_ENSURE_REGISTERED (Ipv6RawSocketImpl)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (Ipv6RawSocketImpl);
 
 TypeId Ipv6RawSocketImpl::GetTypeId ()
 {
diff -Naur ns-3.19/src/internet/model/ipv6-routing-protocol.cc ns-3.20/src/internet/model/ipv6-routing-protocol.cc
--- ns-3.19/src/internet/model/ipv6-routing-protocol.cc	2014-06-17 10:34:00.522636013 -0700
+++ ns-3.20/src/internet/model/ipv6-routing-protocol.cc	2014-06-17 10:33:13.842996355 -0700
@@ -26,8 +26,7 @@
 namespace ns3 
 {
 
-NS_OBJECT_ENSURE_REGISTERED (Ipv6RoutingProtocol)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (Ipv6RoutingProtocol);
 
 TypeId Ipv6RoutingProtocol::GetTypeId ()
 {
diff -Naur ns-3.19/src/internet/model/ipv6-routing-table-entry.h ns-3.20/src/internet/model/ipv6-routing-table-entry.h
--- ns-3.19/src/internet/model/ipv6-routing-table-entry.h	2014-06-17 10:34:00.523636005 -0700
+++ ns-3.20/src/internet/model/ipv6-routing-table-entry.h	2014-06-17 10:33:13.844996340 -0700
@@ -57,7 +57,7 @@
   /**
    * \brief Destructor
    */
-  ~Ipv6RoutingTableEntry ();
+  virtual ~Ipv6RoutingTableEntry ();
 
   /**
    * \brief Is the route entry correspond to a host ?
diff -Naur ns-3.19/src/internet/model/ipv6-static-routing.cc ns-3.20/src/internet/model/ipv6-static-routing.cc
--- ns-3.19/src/internet/model/ipv6-static-routing.cc	2014-06-17 10:34:00.524635997 -0700
+++ ns-3.20/src/internet/model/ipv6-static-routing.cc	2014-06-17 10:33:13.844996340 -0700
@@ -32,10 +32,8 @@
 
 namespace ns3 {
 
-NS_LOG_COMPONENT_DEFINE ("Ipv6StaticRouting")
-  ;
-NS_OBJECT_ENSURE_REGISTERED (Ipv6StaticRouting)
-  ;
+NS_LOG_COMPONENT_DEFINE ("Ipv6StaticRouting");
+NS_OBJECT_ENSURE_REGISTERED (Ipv6StaticRouting);
 
 TypeId Ipv6StaticRouting::GetTypeId ()
 {
@@ -292,7 +290,7 @@
     {
       NS_ASSERT_MSG (interface, "Try to send on link-local multicast address, and no interface index is given!");
       rtentry = Create<Ipv6Route> ();
-      rtentry->SetSource (SourceAddressSelection (m_ipv6->GetInterfaceForDevice (interface), dst));
+      rtentry->SetSource (m_ipv6->SourceAddressSelection (m_ipv6->GetInterfaceForDevice (interface), dst));
       rtentry->SetDestination (dst);
       rtentry->SetGateway (Ipv6Address::GetZero ());
       rtentry->SetOutputDevice (interface);
@@ -311,7 +309,7 @@
 
       if (mask.IsMatch (dst, entry))
         {
-          NS_LOG_LOGIC ("Found global network route " << j << ", mask length " << maskLen << ", metric " << metric);
+          NS_LOG_LOGIC ("Found global network route " << *j << ", mask length " << maskLen << ", metric " << metric);
 
           /* if interface is given, check the route will output on this interface */
           if (!interface || interface == m_ipv6->GetNetDevice (j->GetInterface ()))
@@ -341,15 +339,15 @@
 
               if (route->GetGateway ().IsAny ())
                 {
-                  rtentry->SetSource (SourceAddressSelection (interfaceIdx, route->GetDest ()));
+                  rtentry->SetSource (m_ipv6->SourceAddressSelection (interfaceIdx, route->GetDest ()));
                 }
               else if (route->GetDest ().IsAny ()) /* default route */
                 {
-                  rtentry->SetSource (SourceAddressSelection (interfaceIdx, route->GetPrefixToUse ().IsAny () ? dst : route->GetPrefixToUse ()));
+                  rtentry->SetSource (m_ipv6->SourceAddressSelection (interfaceIdx, route->GetPrefixToUse ().IsAny () ? dst : route->GetPrefixToUse ()));
                 }
               else
                 {
-                  rtentry->SetSource (SourceAddressSelection (interfaceIdx, route->GetGateway ()));
+                  rtentry->SetSource (m_ipv6->SourceAddressSelection (interfaceIdx, route->GetGateway ()));
                 }
 
               rtentry->SetDestination (route->GetDest ());
@@ -361,7 +359,7 @@
 
   if (rtentry)
     {
-      NS_LOG_LOGIC ("Matching route via " << rtentry->GetDestination () << " (throught " << rtentry->GetGateway () << ") at the end");
+      NS_LOG_LOGIC ("Matching route via " << rtentry->GetDestination () << " (Through " << rtentry->GetGateway () << ") at the end");
     }
   return rtentry;
 }
@@ -684,21 +682,18 @@
 void Ipv6StaticRouting::NotifyInterfaceDown (uint32_t i)
 {
   NS_LOG_FUNCTION (this << i);
-  uint32_t j = 0;
-  uint32_t max = GetNRoutes ();
 
   /* remove all static routes that are going through this interface */
-  while (j < max)
+  for (NetworkRoutesI it = m_networkRoutes.begin (); it != m_networkRoutes.end (); )
     {
-      Ipv6RoutingTableEntry route = GetRoute (j);
-
-      if (route.GetInterface () == i)
+      if (it->first->GetInterface () == i)
         {
-          RemoveRoute (j);
+          delete it->first;
+          it = m_networkRoutes.erase (it);
         }
       else
         {
-          j++;
+          it++;
         }
     }
 }
@@ -731,16 +726,19 @@
 
   // Remove all static routes that are going through this interface
   // which reference this network
-  for (uint32_t j = 0; j < GetNRoutes (); j++)
+  for (NetworkRoutesI it = m_networkRoutes.begin (); it != m_networkRoutes.end (); )
     {
-      Ipv6RoutingTableEntry route = GetRoute (j);
-
-      if (route.GetInterface () == interface
-          && route.IsNetwork ()
-          && route.GetDestNetwork () == networkAddress
-          && route.GetDestNetworkPrefix () == networkMask)
+      if (it->first->GetInterface () == interface
+          && it->first->IsNetwork ()
+          && it->first->GetDestNetwork () == networkAddress
+          && it->first->GetDestNetworkPrefix () == networkMask)
+        {
+          delete it->first;
+          it = m_networkRoutes.erase (it);
+        }
+      else
         {
-          RemoveRoute (j);
+          it++;
         }
     }
 }
@@ -795,34 +793,5 @@
     }
 }
 
-Ipv6Address Ipv6StaticRouting::SourceAddressSelection (uint32_t interface, Ipv6Address dest)
-{
-  NS_LOG_FUNCTION (this << interface << dest);
-  Ipv6Address ret;
-
-  /* first address of an IPv6 interface is link-local ones */
-  ret = m_ipv6->GetAddress (interface, 0).GetAddress ();
-
-  if (dest == Ipv6Address::GetAllNodesMulticast () || dest == Ipv6Address::GetAllRoutersMulticast () || dest == Ipv6Address::GetAllHostsMulticast ())
-    {
-      return ret;
-    }
-
-  /* usually IPv6 interfaces have one link-local address and one global address */
-
-  for (uint32_t i = 1; i < m_ipv6->GetNAddresses (interface); i++)
-    {
-      Ipv6InterfaceAddress test = m_ipv6->GetAddress (interface, i);
-      Ipv6InterfaceAddress dst(dest);
-
-      if (test.GetScope() == dst.GetScope())
-        {
-          return test.GetAddress ();
-        }
-    }
-
-  return ret;
-}
-
 } /* namespace ns3 */
 
diff -Naur ns-3.19/src/internet/model/ipv6-static-routing.h ns-3.20/src/internet/model/ipv6-static-routing.h
--- ns-3.19/src/internet/model/ipv6-static-routing.h	2014-06-17 10:34:00.524635997 -0700
+++ ns-3.20/src/internet/model/ipv6-static-routing.h	2014-06-17 10:33:13.845996332 -0700
@@ -293,14 +293,6 @@
   Ptr<Ipv6MulticastRoute> LookupStatic (Ipv6Address origin, Ipv6Address group, uint32_t ifIndex);
 
   /**
-   * \brief Choose the source address to use with destination address.
-   * \param interface interface index
-   * \param dest IPv6 destination address
-   * \return IPv6 source address to use
-   */
-  Ipv6Address SourceAddressSelection (uint32_t interface, Ipv6Address dest);
-
-  /**
    * \brief the forwarding table for network.
    */
   NetworkRoutes m_networkRoutes;
diff -Naur ns-3.19/src/internet/model/loopback-net-device.cc ns-3.20/src/internet/model/loopback-net-device.cc
--- ns-3.19/src/internet/model/loopback-net-device.cc	2014-06-17 10:34:00.526635982 -0700
+++ ns-3.20/src/internet/model/loopback-net-device.cc	2014-06-17 10:33:13.846996324 -0700
@@ -28,8 +28,7 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (LoopbackNetDevice)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (LoopbackNetDevice);
 
 TypeId 
 LoopbackNetDevice::GetTypeId (void)
diff -Naur ns-3.19/src/internet/model/ndisc-cache.cc ns-3.20/src/internet/model/ndisc-cache.cc
--- ns-3.19/src/internet/model/ndisc-cache.cc	2014-06-17 10:34:00.526635982 -0700
+++ ns-3.20/src/internet/model/ndisc-cache.cc	2014-06-17 10:33:13.847996317 -0700
@@ -30,11 +30,9 @@
 namespace ns3
 {
 
-NS_LOG_COMPONENT_DEFINE ("NdiscCache")
-  ;
+NS_LOG_COMPONENT_DEFINE ("NdiscCache");
 
-NS_OBJECT_ENSURE_REGISTERED (NdiscCache)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (NdiscCache);
 
 TypeId NdiscCache::GetTypeId ()
 {
diff -Naur ns-3.19/src/internet/model/nsc-sysctl.cc ns-3.20/src/internet/model/nsc-sysctl.cc
--- ns-3.19/src/internet/model/nsc-sysctl.cc	2014-06-17 10:34:00.527635974 -0700
+++ ns-3.20/src/internet/model/nsc-sysctl.cc	2014-06-17 10:33:13.848996309 -0700
@@ -152,8 +152,7 @@
     }
 }
 
-NS_OBJECT_ENSURE_REGISTERED (Ns3NscStack)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (Ns3NscStack);
 
 TypeId
 Ns3NscStack::Ns3NscStack::GetTypeId (void)
diff -Naur ns-3.19/src/internet/model/nsc-tcp-l4-protocol.cc ns-3.20/src/internet/model/nsc-tcp-l4-protocol.cc
--- ns-3.19/src/internet/model/nsc-tcp-l4-protocol.cc	2014-06-17 10:34:00.528635967 -0700
+++ ns-3.20/src/internet/model/nsc-tcp-l4-protocol.cc	2014-06-17 10:33:13.849996301 -0700
@@ -49,8 +49,7 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (NscTcpL4Protocol)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (NscTcpL4Protocol);
 
 /* see http://www.iana.org/assignments/protocol-numbers */
 const uint8_t NscTcpL4Protocol::PROT_NUMBER = 6;
diff -Naur ns-3.19/src/internet/model/nsc-tcp-socket-impl.cc ns-3.20/src/internet/model/nsc-tcp-socket-impl.cc
--- ns-3.19/src/internet/model/nsc-tcp-socket-impl.cc	2014-06-17 10:34:00.530635951 -0700
+++ ns-3.20/src/internet/model/nsc-tcp-socket-impl.cc	2014-06-17 10:33:13.851996286 -0700
@@ -47,8 +47,7 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (NscTcpSocketImpl)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (NscTcpSocketImpl);
 
 TypeId
 NscTcpSocketImpl::GetTypeId ()
diff -Naur ns-3.19/src/internet/model/ripng.cc ns-3.20/src/internet/model/ripng.cc
--- ns-3.19/src/internet/model/ripng.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.20/src/internet/model/ripng.cc	2014-06-17 10:33:13.853996270 -0700
@@ -0,0 +1,1382 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2014 Universita' di Firenze, Italy
+ *
+ * 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: Tommaso Pecorella <tommaso.pecorella@unifi.it>
+ */
+
+#include <iomanip>
+#include "ripng.h"
+#include "ns3/log.h"
+#include "ns3/abort.h"
+#include "ns3/assert.h"
+#include "ns3/unused.h"
+#include "ns3/random-variable-stream.h"
+#include "ns3/ipv6-route.h"
+#include "ns3/node.h"
+#include "ns3/names.h"
+#include "ns3/ripng-header.h"
+#include "ns3/udp-header.h"
+#include "ns3/enum.h"
+#include "ns3/ipv6-packet-info-tag.h"
+
+#define RIPNG_ALL_NODE "ff02::9"
+#define RIPNG_PORT 521
+
+NS_LOG_COMPONENT_DEFINE ("RipNg")
+ ;
+
+namespace ns3 {
+
+NS_OBJECT_ENSURE_REGISTERED (RipNg)
+ ;
+
+RipNg::RipNg ()
+  : m_ipv6 (0), m_splitHorizonStrategy (RipNg::POISON_REVERSE), m_initialized (false)
+{
+  m_rng = CreateObject<UniformRandomVariable> ();
+}
+
+RipNg::~RipNg ()
+{
+}
+
+TypeId
+RipNg::GetTypeId (void)
+{
+  static TypeId tid = TypeId ("ns3::RipNg")
+    .SetParent<Ipv6RoutingProtocol> ()
+    .AddConstructor<RipNg> ()
+    .AddAttribute ("UnsolicitedRoutingUpdate", "The time between two Unsolicited Routing Updates.",
+                   TimeValue (Seconds(30)),
+                   MakeTimeAccessor (&RipNg::m_unsolicitedUpdate),
+                   MakeTimeChecker ())
+    .AddAttribute ("StartupDelay", "Maximum random delay for protocol startup (send route requests).",
+                   TimeValue (Seconds(1)),
+                   MakeTimeAccessor (&RipNg::m_startupDelay),
+                   MakeTimeChecker ())
+    .AddAttribute ("TimeoutDelay", "The delay to invalidate a route.",
+                   TimeValue (Seconds(180)),
+                   MakeTimeAccessor (&RipNg::m_timeoutDelay),
+                   MakeTimeChecker ())
+    .AddAttribute ("GarbageCollectionDelay", "The delay to delete an expired route.",
+                   TimeValue (Seconds(120)),
+                   MakeTimeAccessor (&RipNg::m_garbageCollectionDelay),
+                   MakeTimeChecker ())
+    .AddAttribute ("MinTriggeredCooldown", "Min cooldown delay after a Triggered Update.",
+                   TimeValue (Seconds(1)),
+                   MakeTimeAccessor (&RipNg::m_minTriggeredUpdateDelay),
+                   MakeTimeChecker ())
+    .AddAttribute ("MaxTriggeredCooldown", "Max cooldown delay after a Triggered Update.",
+                   TimeValue (Seconds(5)),
+                   MakeTimeAccessor (&RipNg::m_maxTriggeredUpdateDelay),
+                   MakeTimeChecker ())
+    .AddAttribute ("SplitHorizon", "Split Horizon strategy.",
+                   EnumValue (RipNg::POISON_REVERSE),
+                   MakeEnumAccessor (&RipNg::m_splitHorizonStrategy),
+                   MakeEnumChecker (RipNg::NO_SPLIT_HORIZON, "NoSplitHorizon",
+                                    RipNg::SPLIT_HORIZON, "SplitHorizon",
+                                    RipNg::POISON_REVERSE, "PoisonReverse"))
+  ;
+  return tid;
+}
+
+int64_t RipNg::AssignStreams (int64_t stream)
+{
+  NS_LOG_FUNCTION (this << stream);
+
+  m_rng->SetStream (stream);
+  return 1;
+}
+
+void RipNg::DoInitialize ()
+{
+  NS_LOG_FUNCTION (this);
+
+  bool addedGlobal = false;
+
+  m_initialized = true;
+
+  Time delay = m_unsolicitedUpdate + Seconds (m_rng->GetValue (0, 0.5*m_unsolicitedUpdate.GetSeconds ()) );
+  m_nextUnsolicitedUpdate = Simulator::Schedule (delay, &RipNg::SendUnsolicitedRouteUpdate, this);
+
+
+  for (uint32_t i = 0 ; i < m_ipv6->GetNInterfaces (); i++)
+    {
+      bool activeInterface = false;
+      if (m_interfaceExclusions.find (i) == m_interfaceExclusions.end ())
+        {
+          activeInterface = true;
+        }
+
+      for (uint32_t j = 0; j < m_ipv6->GetNAddresses (i); j++)
+        {
+          Ipv6InterfaceAddress address = m_ipv6->GetAddress (i, j);
+          if (address.GetScope() == Ipv6InterfaceAddress::LINKLOCAL && activeInterface == true)
+            {
+              NS_LOG_LOGIC ("RIPng: adding socket to " << address.GetAddress ());
+              TypeId tid = TypeId::LookupByName ("ns3::UdpSocketFactory");
+              Ptr<Node> theNode = GetObject<Node> ();
+              Ptr<Socket> socket = Socket::CreateSocket (theNode, tid);
+              Inet6SocketAddress local = Inet6SocketAddress (address.GetAddress (), RIPNG_PORT);
+              int ret = socket->Bind (local);
+              NS_ASSERT_MSG (ret == 0, "Bind unsuccessful");
+              socket->BindToNetDevice (m_ipv6->GetNetDevice (i));
+              socket->ShutdownRecv ();
+              socket->SetIpv6RecvHopLimit (true);
+              m_sendSocketList[socket] = i;
+            }
+          else if (m_ipv6->GetAddress (i, j).GetScope() == Ipv6InterfaceAddress::GLOBAL)
+            {
+              addedGlobal = true;
+            }
+        }
+    }
+
+  if (!m_recvSocket)
+    {
+      NS_LOG_LOGIC ("RIPng: adding receiving socket");
+      TypeId tid = TypeId::LookupByName ("ns3::UdpSocketFactory");
+      Ptr<Node> theNode = GetObject<Node> ();
+      m_recvSocket = Socket::CreateSocket (theNode, tid);
+      Inet6SocketAddress local = Inet6SocketAddress (Ipv6Address::GetAny (), RIPNG_PORT);
+      m_recvSocket->Bind (local);
+      m_recvSocket->SetRecvCallback (MakeCallback (&RipNg::Receive, this));
+      m_recvSocket->SetIpv6RecvHopLimit (true);
+      m_recvSocket->SetRecvPktInfo (true);
+    }
+
+
+  if (addedGlobal)
+    {
+      Time delay = Seconds (m_rng->GetValue (m_minTriggeredUpdateDelay.GetSeconds (), m_maxTriggeredUpdateDelay.GetSeconds ()));
+      m_nextTriggeredUpdate = Simulator::Schedule (delay, &RipNg::DoSendRouteUpdate, this, false);
+    }
+
+  delay = Seconds (m_rng->GetValue (0.01, m_startupDelay.GetSeconds ()));
+  m_nextTriggeredUpdate = Simulator::Schedule (delay, &RipNg::SendRouteRequest, this);
+
+  Ipv6RoutingProtocol::DoInitialize ();
+}
+
+Ptr<Ipv6Route> RipNg::RouteOutput (Ptr<Packet> p, const Ipv6Header &header, Ptr<NetDevice> oif, Socket::SocketErrno &sockerr)
+{
+  NS_LOG_FUNCTION (this << header << oif);
+
+  Ipv6Address destination = header.GetDestinationAddress ();
+  Ptr<Ipv6Route> rtentry = 0;
+
+  if (destination.IsMulticast ())
+    {
+      // Note:  Multicast routes for outbound packets are stored in the
+      // normal unicast table.  An implication of this is that it is not
+      // possible to source multicast datagrams on multiple interfaces.
+      // This is a well-known property of sockets implementation on
+      // many Unix variants.
+      // So, we just log it and fall through to LookupStatic ()
+      NS_LOG_LOGIC ("RouteOutput (): Multicast destination");
+    }
+
+  rtentry = Lookup (destination, oif);
+  if (rtentry)
+    {
+      sockerr = Socket::ERROR_NOTERROR;
+    }
+  else
+    {
+      sockerr = Socket::ERROR_NOROUTETOHOST;
+    }
+  return rtentry;
+}
+
+bool RipNg::RouteInput (Ptr<const Packet> p, const Ipv6Header &header, Ptr<const NetDevice> idev,
+                        UnicastForwardCallback ucb, MulticastForwardCallback mcb,
+                        LocalDeliverCallback lcb, ErrorCallback ecb)
+{
+  NS_LOG_FUNCTION (this << p << header << header.GetSourceAddress () << header.GetDestinationAddress () << idev);
+
+  NS_ASSERT (m_ipv6 != 0);
+  // Check if input device supports IP
+  NS_ASSERT (m_ipv6->GetInterfaceForDevice (idev) >= 0);
+  uint32_t iif = m_ipv6->GetInterfaceForDevice (idev);
+  Ipv6Address dst = header.GetDestinationAddress ();
+
+  if (dst.IsMulticast ())
+    {
+      NS_LOG_LOGIC ("Multicast route not supported by RIPng");
+      return false; // Let other routing protocols try to handle this
+    }
+
+  /// \todo  Configurable option to enable \RFC{1222} Strong End System Model
+  // Right now, we will be permissive and allow a source to send us
+  // a packet to one of our other interface addresses; that is, the
+  // destination unicast address does not match one of the iif addresses,
+  // but we check our other interfaces.  This could be an option
+  // (to remove the outer loop immediately below and just check iif).
+  for (uint32_t j = 0; j < m_ipv6->GetNInterfaces (); j++)
+    {
+      for (uint32_t i = 0; i < m_ipv6->GetNAddresses (j); i++)
+        {
+          Ipv6InterfaceAddress iaddr = m_ipv6->GetAddress (j, i);
+          Ipv6Address addr = iaddr.GetAddress ();
+          if (addr.IsEqual (header.GetDestinationAddress ()))
+            {
+              if (j == iif)
+                {
+                  NS_LOG_LOGIC ("For me (destination " << addr << " match)");
+                }
+              else
+                {
+                  NS_LOG_LOGIC ("For me (destination " << addr << " match) on another interface " << header.GetDestinationAddress ());
+                }
+              lcb (p, header, iif);
+              return true;
+            }
+          NS_LOG_LOGIC ("Address " << addr << " not a match");
+        }
+    }
+  // Check if input device supports IP forwarding
+  if (m_ipv6->IsForwarding (iif) == false)
+    {
+      NS_LOG_LOGIC ("Forwarding disabled for this interface");
+      ecb (p, header, Socket::ERROR_NOROUTETOHOST);
+      return false;
+    }
+  // Next, try to find a route
+  NS_LOG_LOGIC ("Unicast destination");
+  Ptr<Ipv6Route> rtentry = Lookup (header.GetDestinationAddress ());
+
+  if (rtentry != 0)
+    {
+      NS_LOG_LOGIC ("Found unicast destination- calling unicast callback");
+      ucb (idev, rtentry, p, header);  // unicast forwarding callback
+      return true;
+    }
+  else
+    {
+      NS_LOG_LOGIC ("Did not find unicast destination- returning false");
+      return false; // Let other routing protocols try to handle this
+    }
+}
+
+void RipNg::NotifyInterfaceUp (uint32_t i)
+{
+  NS_LOG_FUNCTION (this << i);
+
+  for (uint32_t j = 0; j < m_ipv6->GetNAddresses (i); j++)
+    {
+      Ipv6InterfaceAddress address = m_ipv6->GetAddress (i, j);
+      Ipv6Prefix networkMask = address.GetPrefix ();
+      Ipv6Address networkAddress = address.GetAddress ().CombinePrefix (networkMask);
+
+      if (address != Ipv6Address () && networkMask != Ipv6Prefix ())
+        {
+          if (networkMask == Ipv6Prefix (128))
+            {
+              /* host route */
+              AddNetworkRouteTo (networkAddress, Ipv6Prefix::GetOnes (), 0);
+            }
+          else
+            {
+              AddNetworkRouteTo (networkAddress, networkMask, i);
+            }
+        }
+    }
+
+  if (!m_initialized)
+    {
+      return;
+    }
+
+
+  bool sendSocketFound = false;
+  for (SocketListI iter = m_sendSocketList.begin (); iter != m_sendSocketList.end (); iter++ )
+    {
+      if (iter->second == i)
+        {
+          sendSocketFound = true;
+          break;
+        }
+    }
+
+  bool activeInterface = false;
+  if (m_interfaceExclusions.find (i) == m_interfaceExclusions.end ())
+    {
+      activeInterface = true;
+    }
+
+  for (uint32_t j = 0; j < m_ipv6->GetNAddresses (i); j++)
+    {
+      Ipv6InterfaceAddress address = m_ipv6->GetAddress (i, j);
+
+      Ipv6Address networkAddress = address.GetAddress ().CombinePrefix (address.GetPrefix ());
+      Ipv6Prefix networkMask = address.GetPrefix ();
+      AddNetworkRouteTo (networkAddress, networkMask, i);
+
+      if (address.GetScope() == Ipv6InterfaceAddress::LINKLOCAL && sendSocketFound == false && activeInterface == true)
+        {
+          NS_LOG_LOGIC ("RIPng: adding sending socket to " << address.GetAddress ());
+          TypeId tid = TypeId::LookupByName ("ns3::UdpSocketFactory");
+          Ptr<Node> theNode = GetObject<Node> ();
+          Ptr<Socket> socket = Socket::CreateSocket (theNode, tid);
+          Inet6SocketAddress local = Inet6SocketAddress (address.GetAddress (), RIPNG_PORT);
+          socket->Bind (local);
+          socket->BindToNetDevice (m_ipv6->GetNetDevice (i));
+          socket->ShutdownRecv ();
+          socket->SetIpv6RecvHopLimit (true);
+          m_sendSocketList[socket] = i;
+        }
+      else if (address.GetScope() == Ipv6InterfaceAddress::GLOBAL)
+        {
+          SendTriggeredRouteUpdate ();
+        }
+    }
+
+  if (!m_recvSocket)
+    {
+      NS_LOG_LOGIC ("RIPng: adding receiving socket");
+      TypeId tid = TypeId::LookupByName ("ns3::UdpSocketFactory");
+      Ptr<Node> theNode = GetObject<Node> ();
+      m_recvSocket = Socket::CreateSocket (theNode, tid);
+      Inet6SocketAddress local = Inet6SocketAddress (Ipv6Address::GetAny (), RIPNG_PORT);
+      m_recvSocket->Bind (local);
+      m_recvSocket->SetRecvCallback (MakeCallback (&RipNg::Receive, this));
+      m_recvSocket->SetIpv6RecvHopLimit (true);
+      m_recvSocket->SetRecvPktInfo (true);
+    }
+}
+
+void RipNg::NotifyInterfaceDown (uint32_t interface)
+{
+  NS_LOG_FUNCTION (this << interface);
+
+  /* remove all routes that are going through this interface */
+  for (RoutesI it = m_routes.begin (); it != m_routes.end (); it++)
+    {
+      if (it->first->GetInterface () == interface)
+        {
+          InvalidateRoute (it->first);
+        }
+    }
+
+  for (SocketListI iter = m_sendSocketList.begin (); iter != m_sendSocketList.end (); iter++ )
+    {
+      NS_LOG_INFO ("Checking socket for interface " << interface);
+      if (iter->second == interface)
+        {
+          NS_LOG_INFO ("Removed socket for interface " << interface);
+          iter->first->Close ();
+          m_sendSocketList.erase (iter);
+          break;
+        }
+    }
+
+  if (m_interfaceExclusions.find (interface) == m_interfaceExclusions.end ())
+    {
+      SendTriggeredRouteUpdate ();
+    }
+}
+
+void RipNg::NotifyAddAddress (uint32_t interface, Ipv6InterfaceAddress address)
+{
+  NS_LOG_FUNCTION (this << interface << address);
+
+  if (!m_ipv6->IsUp (interface))
+    {
+      return;
+    }
+
+  if (m_interfaceExclusions.find (interface) != m_interfaceExclusions.end ())
+    {
+      return;
+    }
+
+  Ipv6Address networkAddress = address.GetAddress ().CombinePrefix (address.GetPrefix ());
+  Ipv6Prefix networkMask = address.GetPrefix ();
+
+  if (address.GetAddress () != Ipv6Address () && address.GetPrefix () != Ipv6Prefix ())
+    {
+      AddNetworkRouteTo (networkAddress, networkMask, interface);
+    }
+
+  SendTriggeredRouteUpdate ();
+}
+
+void RipNg::NotifyRemoveAddress (uint32_t interface, Ipv6InterfaceAddress address)
+{
+  NS_LOG_FUNCTION (this << interface << address);
+
+  if (!m_ipv6->IsUp (interface))
+    {
+      return;
+    }
+
+  if (address.GetScope() != Ipv6InterfaceAddress::GLOBAL)
+    {
+      return;
+    }
+
+  Ipv6Address networkAddress = address.GetAddress ().CombinePrefix (address.GetPrefix ());
+  Ipv6Prefix networkMask = address.GetPrefix ();
+
+  // Remove all routes that are going through this interface
+  // which reference this network
+  for (RoutesI it = m_routes.begin (); it != m_routes.end (); it++)
+    {
+      if (it->first->GetInterface () == interface
+          && it->first->IsNetwork ()
+          && it->first->GetDestNetwork () == networkAddress
+          && it->first->GetDestNetworkPrefix () == networkMask)
+        {
+          InvalidateRoute (it->first);
+        }
+    }
+
+  if (m_interfaceExclusions.find (interface) == m_interfaceExclusions.end ())
+    {
+      SendTriggeredRouteUpdate ();
+    }
+
+}
+
+void RipNg::NotifyAddRoute (Ipv6Address dst, Ipv6Prefix mask, Ipv6Address nextHop, uint32_t interface, Ipv6Address prefixToUse)
+{
+  NS_LOG_INFO (this << dst << mask << nextHop << interface << prefixToUse);
+  // \todo this can be used to add delegate routes
+}
+
+void RipNg::NotifyRemoveRoute (Ipv6Address dst, Ipv6Prefix mask, Ipv6Address nextHop, uint32_t interface, Ipv6Address prefixToUse)
+{
+  NS_LOG_FUNCTION (this << dst << mask << nextHop << interface);
+  // \todo this can be used to delete delegate routes
+}
+
+void RipNg::SetIpv6 (Ptr<Ipv6> ipv6)
+{
+  NS_LOG_FUNCTION (this << ipv6);
+
+  NS_ASSERT (m_ipv6 == 0 && ipv6 != 0);
+  uint32_t i = 0;
+  m_ipv6 = ipv6;
+
+  for (i = 0; i < m_ipv6->GetNInterfaces (); i++)
+    {
+      if (m_ipv6->IsUp (i))
+        {
+          NotifyInterfaceUp (i);
+        }
+      else
+        {
+          NotifyInterfaceDown (i);
+        }
+    }
+}
+
+void RipNg::PrintRoutingTable (Ptr<OutputStreamWrapper> stream) const
+{
+  NS_LOG_FUNCTION (this << stream);
+
+  std::ostream* os = stream->GetStream ();
+
+  *os << "Node: " << m_ipv6->GetObject<Node> ()->GetId ()
+      << " Time: " << Simulator::Now ().GetSeconds () << "s "
+      << "Ipv6 RIPng table" << std::endl;
+
+  if (!m_routes.empty ())
+    {
+      *os << "Destination                    Next Hop                   Flag Met Ref Use If" << std::endl;
+      for (RoutesCI it = m_routes.begin (); it != m_routes.end (); it++)
+        {
+          RipNgRoutingTableEntry* route = it->first;
+          RipNgRoutingTableEntry::Status_e status = route->GetRouteStatus();
+
+          if (status == RipNgRoutingTableEntry::RIPNG_VALID)
+            {
+              std::ostringstream dest, gw, mask, flags;
+
+              dest << route->GetDest () << "/" << int(route->GetDestNetworkPrefix ().GetPrefixLength ());
+              *os << std::setiosflags (std::ios::left) << std::setw (31) << dest.str ();
+              gw << route->GetGateway ();
+              *os << std::setiosflags (std::ios::left) << std::setw (27) << gw.str ();
+              flags << "U";
+              if (route->IsHost ())
+                {
+                  flags << "H";
+                }
+              else if (route->IsGateway ())
+                {
+                  flags << "G";
+                }
+              *os << std::setiosflags (std::ios::left) << std::setw (5) << flags.str ();
+              *os << std::setiosflags (std::ios::left) << std::setw (4) << int(route->GetRouteMetric ());
+              // Ref ct not implemented
+              *os << "-" << "   ";
+              // Use not implemented
+              *os << "-" << "   ";
+              if (Names::FindName (m_ipv6->GetNetDevice (route->GetInterface ())) != "")
+                {
+                  *os << Names::FindName (m_ipv6->GetNetDevice (route->GetInterface ()));
+                }
+              else
+                {
+                  *os << route->GetInterface ();
+                }
+              *os << std::endl;
+            }
+        }
+    }
+}
+
+void RipNg::DoDispose ()
+{
+  NS_LOG_FUNCTION (this);
+
+  for (RoutesI j = m_routes.begin ();  j != m_routes.end (); j = m_routes.erase (j))
+    {
+      delete j->first;
+    }
+  m_routes.clear ();
+
+  m_nextTriggeredUpdate.Cancel ();
+  m_nextUnsolicitedUpdate.Cancel ();
+  m_nextTriggeredUpdate = EventId ();
+  m_nextUnsolicitedUpdate = EventId ();
+
+  for (SocketListI iter = m_sendSocketList.begin (); iter != m_sendSocketList.end (); iter++ )
+    {
+      iter->first->Close ();
+    }
+  m_sendSocketList.clear ();
+
+  m_recvSocket->Close ();
+  m_recvSocket = 0;
+
+  m_ipv6 = 0;
+
+  Ipv6RoutingProtocol::DoDispose ();
+}
+
+
+Ptr<Ipv6Route> RipNg::Lookup (Ipv6Address dst, Ptr<NetDevice> interface)
+{
+  NS_LOG_FUNCTION (this << dst << interface);
+
+  Ptr<Ipv6Route> rtentry = 0;
+  uint16_t longestMask = 0;
+
+  /* when sending on link-local multicast, there have to be interface specified */
+  if (dst.IsLinkLocalMulticast ())
+    {
+      NS_ASSERT_MSG (interface, "Try to send on link-local multicast address, and no interface index is given!");
+      rtentry = Create<Ipv6Route> ();
+      rtentry->SetSource (m_ipv6->SourceAddressSelection (m_ipv6->GetInterfaceForDevice (interface), dst));
+      rtentry->SetDestination (dst);
+      rtentry->SetGateway (Ipv6Address::GetZero ());
+      rtentry->SetOutputDevice (interface);
+      return rtentry;
+    }
+
+  for (RoutesI it = m_routes.begin (); it != m_routes.end (); it++)
+    {
+      RipNgRoutingTableEntry* j = it->first;
+
+      if (j->GetRouteStatus () == RipNgRoutingTableEntry::RIPNG_VALID)
+        {
+          Ipv6Prefix mask = j->GetDestNetworkPrefix ();
+          uint16_t maskLen = mask.GetPrefixLength ();
+          Ipv6Address entry = j->GetDestNetwork ();
+
+          NS_LOG_LOGIC ("Searching for route to " << dst << ", mask length " << maskLen);
+
+          if (mask.IsMatch (dst, entry))
+            {
+              NS_LOG_LOGIC ("Found global network route " << j << ", mask length " << maskLen);
+
+              /* if interface is given, check the route will output on this interface */
+              if (!interface || interface == m_ipv6->GetNetDevice (j->GetInterface ()))
+                {
+                  if (maskLen < longestMask)
+                    {
+                      NS_LOG_LOGIC ("Previous match longer, skipping");
+                      continue;
+                    }
+
+                  longestMask = maskLen;
+
+                  Ipv6RoutingTableEntry* route = j;
+                  uint32_t interfaceIdx = route->GetInterface ();
+                  rtentry = Create<Ipv6Route> ();
+
+                  if (route->GetGateway ().IsAny ())
+                    {
+                      rtentry->SetSource (m_ipv6->SourceAddressSelection (interfaceIdx, route->GetDest ()));
+                    }
+                  else if (route->GetDest ().IsAny ()) /* default route */
+                    {
+                      rtentry->SetSource (m_ipv6->SourceAddressSelection (interfaceIdx, route->GetPrefixToUse ().IsAny () ? dst : route->GetPrefixToUse ()));
+                    }
+                  else
+                    {
+                      rtentry->SetSource (m_ipv6->SourceAddressSelection (interfaceIdx, route->GetDest ()));
+                    }
+
+                  rtentry->SetDestination (route->GetDest ());
+                  rtentry->SetGateway (route->GetGateway ());
+                  rtentry->SetOutputDevice (m_ipv6->GetNetDevice (interfaceIdx));
+                }
+            }
+        }
+    }
+
+  if (rtentry)
+    {
+      NS_LOG_LOGIC ("Matching route via " << rtentry->GetDestination () << " (through " << rtentry->GetGateway () << ") at the end");
+    }
+  return rtentry;
+}
+
+void RipNg::AddNetworkRouteTo (Ipv6Address network, Ipv6Prefix networkPrefix, Ipv6Address nextHop, uint32_t interface, Ipv6Address prefixToUse)
+{
+  NS_LOG_FUNCTION (this << network << networkPrefix << nextHop << interface << prefixToUse);
+
+  if (nextHop.IsLinkLocal())
+    {
+      NS_LOG_WARN ("Ripng::AddNetworkRouteTo - Next hop should be link-local");
+    }
+
+  RipNgRoutingTableEntry* route = new RipNgRoutingTableEntry (network, networkPrefix, nextHop, interface, prefixToUse);
+  route->SetRouteMetric (1);
+  route->SetRouteStatus (RipNgRoutingTableEntry::RIPNG_VALID);
+  route->SetRouteChanged (true);
+
+  m_routes.push_back (std::make_pair (route, EventId ()));
+}
+
+void RipNg::AddNetworkRouteTo (Ipv6Address network, Ipv6Prefix networkPrefix, uint32_t interface)
+{
+  NS_LOG_FUNCTION (this << network << networkPrefix << interface);
+
+  RipNgRoutingTableEntry* route = new RipNgRoutingTableEntry (network, networkPrefix, interface);
+  route->SetRouteMetric (1);
+  route->SetRouteStatus (RipNgRoutingTableEntry::RIPNG_VALID);
+  route->SetRouteChanged (true);
+
+  m_routes.push_back (std::make_pair (route, EventId ()));
+}
+
+void RipNg::InvalidateRoute (RipNgRoutingTableEntry *route)
+{
+  NS_LOG_FUNCTION (this << *route);
+
+  for (RoutesI it = m_routes.begin (); it != m_routes.end (); it++)
+    {
+      if (it->first == route)
+        {
+          route->SetRouteStatus (RipNgRoutingTableEntry::RIPNG_INVALID);
+          route->SetRouteMetric (16);
+          route->SetRouteChanged (true);
+          if (it->second.IsRunning ())
+            {
+              it->second.Cancel ();
+            }
+          it->second = Simulator::Schedule (m_garbageCollectionDelay, &RipNg::DeleteRoute, this, route);
+          return;
+        }
+    }
+  NS_ABORT_MSG ("Ripng::InvalidateRoute - cannot find the route to update");
+}
+
+void RipNg::DeleteRoute (RipNgRoutingTableEntry *route)
+{
+  NS_LOG_FUNCTION (this << *route);
+
+  for (RoutesI it = m_routes.begin (); it != m_routes.end (); it++)
+    {
+      if (it->first == route)
+        {
+          delete route;
+          m_routes.erase (it);
+          return;
+        }
+    }
+  NS_ABORT_MSG ("Ripng::DeleteRoute - cannot find the route to delete");
+}
+
+
+void RipNg::Receive (Ptr<Socket> socket)
+{
+  NS_LOG_FUNCTION (this << socket);
+
+  Ptr<Packet> packet = socket->Recv ();
+  NS_LOG_INFO ("Received " << *packet);
+
+  Ipv6PacketInfoTag interfaceInfo;
+  if (!packet->RemovePacketTag (interfaceInfo))
+    {
+      NS_ABORT_MSG ("No incoming interface on RIPng message, aborting.");
+    }
+  uint32_t incomingIf = interfaceInfo.GetRecvIf ();
+  Ptr<Node> node = this->GetObject<Node> ();
+  Ptr<NetDevice> dev = node->GetDevice (incomingIf);
+  uint32_t ipInterfaceIndex = m_ipv6->GetInterfaceForDevice (dev);
+
+  SocketIpv6HopLimitTag hoplimitTag;
+  if (!packet->RemovePacketTag (hoplimitTag))
+    {
+      NS_ABORT_MSG ("No incoming Hop Count on RIPng message, aborting.");
+    }
+  uint8_t hopLimit = hoplimitTag.GetHopLimit ();
+
+  SocketAddressTag tag;
+  if (!packet->RemovePacketTag (tag))
+    {
+      NS_ABORT_MSG ("No incoming sender address on RIPng message, aborting.");
+    }
+  Ipv6Address senderAddress = Inet6SocketAddress::ConvertFrom (tag.GetAddress ()).GetIpv6 ();
+  uint16_t senderPort = Inet6SocketAddress::ConvertFrom (tag.GetAddress ()).GetPort ();
+
+  int32_t interfaceForAddress = m_ipv6->GetInterfaceForAddress (senderAddress);
+  if (interfaceForAddress != -1)
+    {
+      NS_LOG_LOGIC ("Ignoring a packet sent by myself.");
+      return;
+    }
+
+  RipNgHeader hdr;
+  packet->RemoveHeader (hdr);
+
+  if (hdr.GetCommand () == RipNgHeader::RESPONSE)
+    {
+      HandleResponses (hdr, senderAddress, ipInterfaceIndex, hopLimit);
+    }
+  else if (hdr.GetCommand () == RipNgHeader::REQUEST)
+    {
+      HandleRequests (hdr, senderAddress, senderPort, ipInterfaceIndex, hopLimit);
+    }
+  else
+    {
+      NS_LOG_LOGIC ("Ignoring message with unknown command: " << int (hdr.GetCommand ()));
+    }
+  return;
+}
+
+void RipNg::HandleRequests (RipNgHeader requestHdr, Ipv6Address senderAddress, uint16_t senderPort, uint32_t incomingInterface, uint8_t hopLimit)
+{
+  NS_LOG_FUNCTION (this << senderAddress << int (senderPort) << incomingInterface << int (hopLimit) << requestHdr);
+
+  std::list<RipNgRte> rtes = requestHdr.GetRteList ();
+
+  if (rtes.empty ())
+    {
+      return;
+    }
+
+  // check if it's a request for the full table from a neighbor
+  if (rtes.size () == 1 && senderAddress.IsLinkLocal ())
+    {
+      if (rtes.begin ()->GetPrefix () == Ipv6Address::GetAny () &&
+          rtes.begin ()->GetPrefixLen () == 0 &&
+          rtes.begin ()->GetRouteMetric () == 16)
+        {
+          // Output whole thing. Use Split Horizon
+          if (m_interfaceExclusions.find (incomingInterface) == m_interfaceExclusions.end ())
+            {
+              // we use one of the sending sockets, as they're bound to the right interface
+              // and the local address might be used on different interfaces.
+              Ptr<Socket> sendingSoket;
+              for (SocketListI iter = m_sendSocketList.begin (); iter != m_sendSocketList.end (); iter++ )
+                {
+                  if (iter->second == incomingInterface)
+                    {
+                      sendingSoket = iter->first;
+                    }
+                }
+              NS_ASSERT_MSG (sendingSoket, "HandleRequest - Impossible to find a socket to send the reply");
+
+              uint16_t mtu = m_ipv6->GetMtu (incomingInterface);
+              uint16_t maxRte = (mtu - Ipv6Header ().GetSerializedSize () - UdpHeader ().GetSerializedSize () - RipNgHeader ().GetSerializedSize ()) / RipNgRte ().GetSerializedSize ();
+
+              Ptr<Packet> p = Create<Packet> ();
+              SocketIpv6HopLimitTag tag;
+              p->RemovePacketTag (tag);
+              tag.SetHopLimit (255);
+              p->AddPacketTag (tag);
+
+              RipNgHeader hdr;
+              hdr.SetCommand (RipNgHeader::RESPONSE);
+
+              for (RoutesI rtIter = m_routes.begin (); rtIter != m_routes.end (); rtIter++)
+                {
+                  bool splitHorizoning = (rtIter->first->GetInterface () == incomingInterface);
+
+                  Ipv6InterfaceAddress rtDestAddr = Ipv6InterfaceAddress(rtIter->first->GetDestNetwork ());
+
+                  bool isGlobal = (rtDestAddr.GetScope () == Ipv6InterfaceAddress::GLOBAL);
+                  bool isDefaultRoute = ((rtIter->first->GetDestNetwork () == Ipv6Address::GetAny ()) &&
+                      (rtIter->first->GetDestNetworkPrefix () == Ipv6Prefix::GetZero ()) &&
+                      (rtIter->first->GetInterface () != incomingInterface));
+
+                  if ((isGlobal || isDefaultRoute) &&
+                      (rtIter->first->GetRouteStatus () == RipNgRoutingTableEntry::RIPNG_VALID) )
+                    {
+                      RipNgRte rte;
+                      rte.SetPrefix (rtIter->first->GetDestNetwork ());
+                      rte.SetPrefixLen (rtIter->first->GetDestNetworkPrefix ().GetPrefixLength ());
+                      if (m_splitHorizonStrategy == POISON_REVERSE && splitHorizoning)
+                        {
+                          rte.SetRouteMetric (16);
+                        }
+                      else
+                        {
+                          rte.SetRouteMetric (rtIter->first->GetRouteMetric ());
+                        }
+                      rte.SetRouteTag (rtIter->first->GetRouteTag ());
+                      if ((m_splitHorizonStrategy != SPLIT_HORIZON) ||
+                          (m_splitHorizonStrategy == SPLIT_HORIZON && !splitHorizoning))
+                        {
+                          hdr.AddRte (rte);
+                        }
+                    }
+                  if (hdr.GetRteNumber () == maxRte)
+                    {
+                      p->AddHeader (hdr);
+                      NS_LOG_DEBUG ("SendTo: " << *p);
+                      sendingSoket->SendTo (p, 0, Inet6SocketAddress (senderAddress, RIPNG_PORT));
+                      p->RemoveHeader (hdr);
+                      hdr.ClearRtes ();
+                    }
+                }
+              if (hdr.GetRteNumber () > 0)
+                {
+                  p->AddHeader (hdr);
+                  NS_LOG_DEBUG ("SendTo: " << *p);
+                  sendingSoket->SendTo (p, 0, Inet6SocketAddress (senderAddress, RIPNG_PORT));
+                }
+            }
+        }
+    }
+  else
+    {
+      // note: we got the request as a single packet, so no check is necessary for MTU limit
+
+      // we use one of the sending sockets, as they're bound to the right interface
+      // and the local address might be used on different interfaces.
+      Ptr<Socket> sendingSoket;
+      if (senderAddress.IsLinkLocal ())
+        {
+          for (SocketListI iter = m_sendSocketList.begin (); iter != m_sendSocketList.end (); iter++ )
+            {
+              if (iter->second == incomingInterface)
+                {
+                  sendingSoket = iter->first;
+                }
+            }
+        }
+      else
+        {
+          sendingSoket = m_recvSocket;
+        }
+
+      Ptr<Packet> p = Create<Packet> ();
+      SocketIpv6HopLimitTag tag;
+      p->RemovePacketTag (tag);
+      tag.SetHopLimit (255);
+      p->AddPacketTag (tag);
+
+      RipNgHeader hdr;
+      hdr.SetCommand (RipNgHeader::RESPONSE);
+
+      for (std::list<RipNgRte>::iterator iter = rtes.begin ();
+          iter != rtes.end (); iter++)
+        {
+          bool found = false;
+          for (RoutesI rtIter = m_routes.begin (); rtIter != m_routes.end (); rtIter++)
+            {
+              Ipv6InterfaceAddress rtDestAddr = Ipv6InterfaceAddress(rtIter->first->GetDestNetwork ());
+              if ((rtDestAddr.GetScope () == Ipv6InterfaceAddress::GLOBAL) &&
+                  (rtIter->first->GetRouteStatus () == RipNgRoutingTableEntry::RIPNG_VALID))
+                {
+                  Ipv6Address requestedAddress = iter->GetPrefix ();
+                  requestedAddress.CombinePrefix (Ipv6Prefix (iter->GetPrefixLen ()));
+                  Ipv6Address rtAddress = rtIter->first->GetDestNetwork ();
+                  rtAddress.CombinePrefix (rtIter->first->GetDestNetworkPrefix ());
+
+                  if (requestedAddress == rtAddress)
+                    {
+                      iter->SetRouteMetric (rtIter->first->GetRouteMetric ());
+                      iter->SetRouteTag (rtIter->first->GetRouteTag ());
+                      hdr.AddRte (*iter);
+                      found = true;
+                      break;
+                    }
+                }
+            }
+          if (!found)
+            {
+              iter->SetRouteMetric (16);
+              iter->SetRouteTag (0);
+              hdr.AddRte (*iter);
+            }
+        }
+      p->AddHeader (hdr);
+      NS_LOG_DEBUG ("SendTo: " << *p);
+      sendingSoket->SendTo (p, 0, Inet6SocketAddress (senderAddress, senderPort));
+    }
+
+}
+
+void RipNg::HandleResponses (RipNgHeader hdr, Ipv6Address senderAddress, uint32_t incomingInterface, uint8_t hopLimit)
+{
+  NS_LOG_FUNCTION (this << senderAddress << incomingInterface << int (hopLimit) << hdr);
+
+  if (m_interfaceExclusions.find (incomingInterface) != m_interfaceExclusions.end ())
+    {
+      NS_LOG_LOGIC ("Ignoring an update message from an excluded interface: " << incomingInterface);
+      return;
+    }
+
+  if (!senderAddress.IsLinkLocal ())
+    {
+      NS_LOG_LOGIC ("Ignoring an update message from a non-link-local source: " << senderAddress);
+      return;
+    }
+
+  if (hopLimit != 255)
+    {
+      NS_LOG_LOGIC ("Ignoring an update message with suspicious hop count: " << int (hopLimit));
+      return;
+    }
+
+  std::list<RipNgRte> rtes = hdr.GetRteList ();
+
+  // validate the RTEs before processing
+  for (std::list<RipNgRte>::iterator iter = rtes.begin ();
+      iter != rtes.end (); iter++)
+    {
+      if (iter->GetRouteMetric () == 0 || iter->GetRouteMetric () > 16)
+        {
+          NS_LOG_LOGIC ("Ignoring an update message with malformed metric: " << int (iter->GetRouteMetric ()));
+          return;
+        }
+      if (iter->GetPrefixLen () > 128)
+        {
+          NS_LOG_LOGIC ("Ignoring an update message with malformed prefix length: " << int (iter->GetPrefixLen ()));
+          return;
+        }
+      if (iter->GetPrefix ().IsLocalhost () ||
+          iter->GetPrefix ().IsLinkLocal () ||
+          iter->GetPrefix ().IsMulticast ())
+        {
+          NS_LOG_LOGIC ("Ignoring an update message with wrong prefixes: " << iter->GetPrefix ());
+          return;
+        }
+    }
+
+  bool changed = false;
+
+  for (std::list<RipNgRte>::iterator iter = rtes.begin ();
+      iter != rtes.end (); iter++)
+    {
+      Ipv6Prefix rtePrefix = Ipv6Prefix (iter->GetPrefixLen ());
+      Ipv6Address rteAddr = iter->GetPrefix ().CombinePrefix (rtePrefix);
+
+      NS_LOG_LOGIC ("Processing RTE " << *iter);
+
+      uint8_t interfaceMetric = 1;
+      if (m_interfaceMetrics.find (incomingInterface) != m_interfaceMetrics.end ())
+        {
+          interfaceMetric = m_interfaceMetrics[incomingInterface];
+        }
+      uint8_t rteMetric = std::min (iter->GetRouteMetric () + interfaceMetric, 16);
+      RoutesI it;
+      bool found = false;
+      for (it = m_routes.begin (); it != m_routes.end (); it++)
+        {
+          if (it->first->GetDestNetwork () == rteAddr &&
+              it->first->GetDestNetworkPrefix () == rtePrefix)
+            {
+              found = true;
+              if (rteMetric < it->first->GetRouteMetric ())
+                {
+                  if (senderAddress != it->first->GetGateway ())
+                    {
+                      RipNgRoutingTableEntry* route = new RipNgRoutingTableEntry (rteAddr, rtePrefix, senderAddress, incomingInterface, Ipv6Address::GetAny ());
+                      delete it->first;
+                      it->first = route;
+                    }
+                  it->first->SetRouteMetric (rteMetric);
+                  it->first->SetRouteStatus (RipNgRoutingTableEntry::RIPNG_VALID);
+                  it->first->SetRouteTag (iter->GetRouteTag ());
+                  it->first->SetRouteChanged (true);
+                  it->second.Cancel ();
+                  it->second = Simulator::Schedule (m_timeoutDelay, &RipNg::InvalidateRoute, this, it->first);
+                  changed = true;
+                }
+              else if (rteMetric == it->first->GetRouteMetric ())
+                {
+                  if (senderAddress == it->first->GetGateway ())
+                    {
+                      it->second.Cancel ();
+                      it->second = Simulator::Schedule (m_timeoutDelay, &RipNg::InvalidateRoute, this, it->first);
+                    }
+                  else
+                    {
+                      if (Simulator::GetDelayLeft (it->second) < m_timeoutDelay/2)
+                        {
+                          RipNgRoutingTableEntry* route = new RipNgRoutingTableEntry (rteAddr, rtePrefix, senderAddress, incomingInterface, Ipv6Address::GetAny ());
+                          route->SetRouteMetric (rteMetric);
+                          route->SetRouteStatus (RipNgRoutingTableEntry::RIPNG_VALID);
+                          route->SetRouteTag (iter->GetRouteTag ());
+                          route->SetRouteChanged (true);
+                          delete it->first;
+                          it->first = route;
+                          it->second.Cancel ();
+                          it->second = Simulator::Schedule (m_timeoutDelay, &RipNg::InvalidateRoute, this, route);
+                          changed = true;
+                        }
+                    }
+                }
+              else if (rteMetric > it->first->GetRouteMetric () && senderAddress == it->first->GetGateway ())
+                {
+                  it->second.Cancel ();
+                  if (rteMetric < 16)
+                    {
+                      it->first->SetRouteMetric (rteMetric);
+                      it->first->SetRouteStatus (RipNgRoutingTableEntry::RIPNG_VALID);
+                      it->first->SetRouteTag (iter->GetRouteTag ());
+                      it->first->SetRouteChanged (true);
+                      it->second.Cancel ();
+                      it->second = Simulator::Schedule (m_timeoutDelay, &RipNg::InvalidateRoute, this, it->first);
+                    }
+                  else
+                    {
+                      InvalidateRoute (it->first);
+                    }
+                  changed = true;
+                }
+            }
+        }
+      if (!found && rteMetric != 16)
+        {
+          NS_LOG_LOGIC ("Received a RTE with new route, adding.");
+
+          RipNgRoutingTableEntry* route = new RipNgRoutingTableEntry (rteAddr, rtePrefix, senderAddress, incomingInterface, Ipv6Address::GetAny ());
+          route->SetRouteMetric (rteMetric);
+          route->SetRouteStatus (RipNgRoutingTableEntry::RIPNG_VALID);
+          route->SetRouteChanged (true);
+          m_routes.push_front (std::make_pair (route, EventId ()));
+          EventId invalidateEvent = Simulator::Schedule (m_timeoutDelay, &RipNg::InvalidateRoute, this, route);
+          (m_routes.begin ())->second = invalidateEvent;
+          changed = true;
+        }
+    }
+
+  if (changed)
+    {
+      SendTriggeredRouteUpdate ();
+    }
+}
+
+void RipNg::DoSendRouteUpdate (bool periodic)
+{
+  NS_LOG_FUNCTION (this << (periodic ? " periodic" : " triggered"));
+
+  for (SocketListI iter = m_sendSocketList.begin (); iter != m_sendSocketList.end (); iter++ )
+    {
+      uint32_t interface = iter->second;
+
+      if (m_interfaceExclusions.find (interface) == m_interfaceExclusions.end ())
+        {
+          uint16_t mtu = m_ipv6->GetMtu (interface);
+          uint16_t maxRte = (mtu - Ipv6Header ().GetSerializedSize () - UdpHeader ().GetSerializedSize () - RipNgHeader ().GetSerializedSize ()) / RipNgRte ().GetSerializedSize ();
+
+          Ptr<Packet> p = Create<Packet> ();
+          SocketIpv6HopLimitTag tag;
+          tag.SetHopLimit (255);
+          p->AddPacketTag (tag);
+
+          RipNgHeader hdr;
+          hdr.SetCommand (RipNgHeader::RESPONSE);
+
+          for (RoutesI rtIter = m_routes.begin (); rtIter != m_routes.end (); rtIter++)
+            {
+              bool splitHorizoning = (rtIter->first->GetInterface () == interface);
+              Ipv6InterfaceAddress rtDestAddr = Ipv6InterfaceAddress(rtIter->first->GetDestNetwork ());
+
+              NS_LOG_DEBUG ("Processing RT " << rtDestAddr << " " << int(rtIter->first->IsRouteChanged ()));
+
+              bool isGlobal = (rtDestAddr.GetScope () == Ipv6InterfaceAddress::GLOBAL);
+              bool isDefaultRoute = ((rtIter->first->GetDestNetwork () == Ipv6Address::GetAny ()) &&
+                  (rtIter->first->GetDestNetworkPrefix () == Ipv6Prefix::GetZero ()) &&
+                  (rtIter->first->GetInterface () != interface));
+
+              if ((isGlobal || isDefaultRoute) &&
+                  (periodic || rtIter->first->IsRouteChanged ()))
+                {
+                  RipNgRte rte;
+                  rte.SetPrefix (rtIter->first->GetDestNetwork ());
+                  rte.SetPrefixLen (rtIter->first->GetDestNetworkPrefix ().GetPrefixLength ());
+                  if (m_splitHorizonStrategy == POISON_REVERSE && splitHorizoning)
+                    {
+                      rte.SetRouteMetric (16);
+                    }
+                  else
+                    {
+                      rte.SetRouteMetric (rtIter->first->GetRouteMetric ());
+                    }
+                  rte.SetRouteTag (rtIter->first->GetRouteTag ());
+                  if (m_splitHorizonStrategy == SPLIT_HORIZON && !splitHorizoning)
+                    {
+                      hdr.AddRte (rte);
+                    }
+                  else if (m_splitHorizonStrategy != SPLIT_HORIZON)
+                    {
+                      hdr.AddRte (rte);
+                    }
+                }
+              if (hdr.GetRteNumber () == maxRte)
+                {
+                  p->AddHeader (hdr);
+                  NS_LOG_DEBUG ("SendTo: " << *p);
+                  iter->first->SendTo (p, 0, Inet6SocketAddress (RIPNG_ALL_NODE, RIPNG_PORT));
+                  p->RemoveHeader (hdr);
+                  hdr.ClearRtes ();
+                }
+            }
+          if (hdr.GetRteNumber () > 0)
+            {
+              p->AddHeader (hdr);
+              NS_LOG_DEBUG ("SendTo: " << *p);
+              iter->first->SendTo (p, 0, Inet6SocketAddress (RIPNG_ALL_NODE, RIPNG_PORT));
+            }
+        }
+    }
+  for (RoutesI rtIter = m_routes.begin (); rtIter != m_routes.end (); rtIter++)
+    {
+      rtIter->first->SetRouteChanged (false);
+    }
+}
+
+void RipNg::SendTriggeredRouteUpdate ()
+{
+  NS_LOG_FUNCTION (this);
+
+  if (m_nextTriggeredUpdate.IsRunning())
+    {
+      NS_LOG_LOGIC ("Skipping Triggered Update due to cooldown");
+      return;
+    }
+
+  // DoSendRouteUpdate (false);
+
+  // note: The RFC states:
+  //     After a triggered
+  //     update is sent, a timer should be set for a random interval between 1
+  //     and 5 seconds.  If other changes that would trigger updates occur
+  //     before the timer expires, a single update is triggered when the timer
+  //     expires.  The timer is then reset to another random value between 1
+  //     and 5 seconds.  Triggered updates may be suppressed if a regular
+  //     update is due by the time the triggered update would be sent.
+  // Here we rely on this:
+  // When an update occurs (either Triggered or Periodic) the "IsChanged ()"
+  // route field will be cleared.
+  // Hence, the following Triggered Update will be fired, but will not send
+  // any route update.
+
+  Time delay = Seconds (m_rng->GetValue (m_minTriggeredUpdateDelay.GetSeconds (), m_maxTriggeredUpdateDelay.GetSeconds ()));
+  m_nextTriggeredUpdate = Simulator::Schedule (delay, &RipNg::DoSendRouteUpdate, this, false);
+}
+
+void RipNg::SendUnsolicitedRouteUpdate ()
+{
+  NS_LOG_FUNCTION (this);
+
+  if (m_nextTriggeredUpdate.IsRunning())
+    {
+      m_nextTriggeredUpdate.Cancel ();
+    }
+
+  DoSendRouteUpdate (true);
+
+  Time delay = m_unsolicitedUpdate + Seconds (m_rng->GetValue (0, 0.5*m_unsolicitedUpdate.GetSeconds ()) );
+  m_nextUnsolicitedUpdate = Simulator::Schedule (delay, &RipNg::SendUnsolicitedRouteUpdate, this);
+}
+
+std::set<uint32_t> RipNg::GetInterfaceExclusions () const
+{
+  return m_interfaceExclusions;
+}
+
+void RipNg::SetInterfaceExclusions (std::set<uint32_t> exceptions)
+{
+  NS_LOG_FUNCTION (this);
+
+  m_interfaceExclusions = exceptions;
+}
+
+uint8_t RipNg::GetInterfaceMetric (uint32_t interface) const
+{
+  NS_LOG_FUNCTION (this << interface);
+
+  std::map<uint32_t, uint8_t>::const_iterator iter = m_interfaceMetrics.find (interface);
+  if (iter != m_interfaceMetrics.end ())
+    {
+      return iter->second;
+    }
+  return 1;
+}
+
+void RipNg::SetInterfaceMetric (uint32_t interface, uint8_t metric)
+{
+  NS_LOG_FUNCTION (this << interface << int (metric));
+
+  if (metric < 16)
+    {
+      m_interfaceMetrics[interface] = metric;
+    }
+}
+
+void RipNg::SendRouteRequest ()
+{
+  NS_LOG_FUNCTION (this);
+
+  Ptr<Packet> p = Create<Packet> ();
+  SocketIpv6HopLimitTag tag;
+  p->RemovePacketTag (tag);
+  tag.SetHopLimit (255);
+  p->AddPacketTag (tag);
+
+  RipNgHeader hdr;
+  hdr.SetCommand (RipNgHeader::REQUEST);
+
+  RipNgRte rte;
+  rte.SetPrefix (Ipv6Address::GetAny ());
+  rte.SetPrefixLen (0);
+  rte.SetRouteMetric (16);
+
+  hdr.AddRte (rte);
+  p->AddHeader (hdr);
+
+  for (SocketListI iter = m_sendSocketList.begin (); iter != m_sendSocketList.end (); iter++ )
+    {
+      uint32_t interface = iter->second;
+
+      if (m_interfaceExclusions.find (interface) == m_interfaceExclusions.end ())
+        {
+          NS_LOG_DEBUG ("SendTo: " << *p);
+          iter->first->SendTo (p, 0, Inet6SocketAddress (RIPNG_ALL_NODE, RIPNG_PORT));
+        }
+    }
+}
+
+void RipNg::AddDefaultRouteTo (Ipv6Address nextHop, uint32_t interface)
+{
+  NS_LOG_FUNCTION (this << interface);
+
+  AddNetworkRouteTo (Ipv6Address ("::"), Ipv6Prefix::GetZero (), nextHop, interface, Ipv6Address ("::"));
+}
+
+
+/*
+ * RipNgRoutingTableEntry
+ */
+
+RipNgRoutingTableEntry::RipNgRoutingTableEntry ()
+  : m_tag (0), m_metric (16), m_status (RIPNG_INVALID), m_changed (false)
+{
+}
+
+RipNgRoutingTableEntry::RipNgRoutingTableEntry (Ipv6Address network, Ipv6Prefix networkPrefix, Ipv6Address nextHop, uint32_t interface, Ipv6Address prefixToUse)
+  : Ipv6RoutingTableEntry ( RipNgRoutingTableEntry::CreateNetworkRouteTo (network, networkPrefix, nextHop, interface, prefixToUse) ),
+    m_tag (0), m_metric (16), m_status (RIPNG_INVALID), m_changed (false)
+{
+}
+
+RipNgRoutingTableEntry::RipNgRoutingTableEntry (Ipv6Address network, Ipv6Prefix networkPrefix, uint32_t interface)
+  : Ipv6RoutingTableEntry ( Ipv6RoutingTableEntry::CreateNetworkRouteTo (network, networkPrefix, interface) ),
+    m_tag (0), m_metric (16), m_status (RIPNG_INVALID), m_changed (false)
+{
+}
+
+RipNgRoutingTableEntry::~RipNgRoutingTableEntry ()
+{
+}
+
+
+void RipNgRoutingTableEntry::SetRouteTag (uint16_t routeTag)
+{
+  if (m_tag != routeTag)
+    {
+      m_tag = routeTag;
+      m_changed = true;
+    }
+}
+
+uint16_t RipNgRoutingTableEntry::GetRouteTag () const
+{
+  return m_tag;
+}
+
+void RipNgRoutingTableEntry::SetRouteMetric (uint8_t routeMetric)
+{
+  if (m_metric != routeMetric)
+    {
+      m_metric = routeMetric;
+      m_changed = true;
+    }
+}
+
+uint8_t RipNgRoutingTableEntry::GetRouteMetric () const
+{
+  return m_metric;
+}
+
+void RipNgRoutingTableEntry::SetRouteStatus (Status_e status)
+{
+  if (m_status != status)
+    {
+      m_status = status;
+      m_changed = true;
+    }
+}
+
+RipNgRoutingTableEntry::Status_e RipNgRoutingTableEntry::GetRouteStatus (void) const
+{
+  return m_status;
+}
+
+void RipNgRoutingTableEntry::SetRouteChanged (bool changed)
+{
+  m_changed = changed;
+}
+
+bool RipNgRoutingTableEntry::IsRouteChanged (void) const
+{
+  return m_changed;
+}
+
+
+std::ostream & operator << (std::ostream& os, const RipNgRoutingTableEntry& rte)
+{
+  os << static_cast<const Ipv6RoutingTableEntry &>(rte);
+  os << ", metric: " << int (rte.GetRouteMetric ()) << ", tag: " << int (rte.GetRouteTag ());
+
+  return os;
+}
+
+
+}
+
diff -Naur ns-3.19/src/internet/model/ripng.h ns-3.20/src/internet/model/ripng.h
--- ns-3.19/src/internet/model/ripng.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.20/src/internet/model/ripng.h	2014-06-17 10:33:13.854996262 -0700
@@ -0,0 +1,411 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2014 Universita' di Firenze, Italy
+ *
+ * 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: Tommaso Pecorella <tommaso.pecorella@unifi.it>
+ */
+
+#ifndef RIPNG_H
+#define RIPNG_H
+
+#include <list>
+
+#include "ns3/ipv6-routing-protocol.h"
+#include "ns3/ipv6-interface.h"
+#include "ns3/inet6-socket-address.h"
+#include "ns3/ipv6-l3-protocol.h"
+#include "ns3/ipv6-routing-table-entry.h"
+#include "ns3/random-variable-stream.h"
+#include "ns3/ripng-header.h"
+
+namespace ns3 {
+
+/**
+ * \defgroup ripng RIPng
+ *
+ * The RIPng protocol (\rfc{2080}) is a unicast-only IPv6 IGP (Interior Gateway Protocol).
+ * Its convergence time is rather long. As a consequence, it is suggested to
+ * carefully check the network topology and the route status before sending
+ * data flows.
+ *
+ * RIPng implements the Bellman-Ford algorithm (although the RFC does not state it).
+ * Bellman-Ford algorithm convergence time is O(|V|*|E|) where |V| and |E| are the
+ * number of vertices (routers) and edges (links) respectively. Since unsolicited
+ * updates are exchanged every 30 seconds, the convergence might require a long time.
+ *
+ * For the RIPng protocol, the exact convergence time is shorter, thanks to the
+ * use of triggered updates, which are sent when a route changes.
+ * Even with triggered updates, the convergence is in the order of magnitude of
+ * O(|V|*|E|) * 5 seconds, which is still quite long for complex topologies.
+ *
+ * \todo: Add routing table compression (CIDR). The most evident result: without
+ * it a router will announce to be the default router *and* more RTEs, which is silly.
+ */
+
+/**
+ * \ingroup ripng
+ * \brief RipNg Routing Table Entry
+ */
+class RipNgRoutingTableEntry : public Ipv6RoutingTableEntry
+{
+public:
+
+  /**
+   * Route status
+   */
+  enum Status_e {
+    RIPNG_VALID,
+    RIPNG_INVALID,
+  };
+
+  RipNgRoutingTableEntry (void);
+
+  /**
+   * \brief Constructor
+   * \param network network address
+   * \param networkPrefix network prefix
+   * \param nextHop next hop address to route the packet
+   * \param interface interface index
+   * \param prefixToUse prefix that should be used for source address for this destination
+   */
+  RipNgRoutingTableEntry (Ipv6Address network, Ipv6Prefix networkPrefix, Ipv6Address nextHop, uint32_t interface, Ipv6Address prefixToUse);
+
+  /**
+   * \brief Constructor
+   * \param network network address
+   * \param networkPrefix network prefix
+   * \param interface interface index
+   */
+  RipNgRoutingTableEntry (Ipv6Address network, Ipv6Prefix networkPrefix, uint32_t interface);
+
+  virtual ~RipNgRoutingTableEntry ();
+
+  /**
+   * \brief Set the route tag
+   * \param routeTag the route tag
+   */
+  void SetRouteTag (uint16_t routeTag);
+
+  /**
+   * \brief Get the route tag
+   * \returns the route tag
+   */
+  uint16_t GetRouteTag (void) const;
+
+  /**
+   * \brief Set the route metric
+   * \param routeMetric the route metric
+   */
+  void SetRouteMetric (uint8_t routeMetric);
+
+  /**
+   * \brief Get the route metric
+   * \returns the route metric
+   */
+  uint8_t GetRouteMetric (void) const;
+
+  /**
+   * \brief Set the route status
+   * \param status the route status
+   */
+  void SetRouteStatus (Status_e status);
+
+  /**
+   * \brief Get the route status
+   * \returns the route status
+   */
+  Status_e GetRouteStatus (void) const;
+
+  /**
+   * \brief Set the route as changed
+   *
+   * The changed routes are scheduled for a Triggered Update.
+   * After a Triggered Update, all the changed flags are cleared
+   * from the routing table.
+   *
+   * \param true if route is changed
+   */
+  void SetRouteChanged (bool changed);
+
+  /**
+   * \brief Get the route changed status
+   *
+   * \returns true if route is changed
+   */
+  bool IsRouteChanged (void) const;
+
+private:
+  uint16_t m_tag; //!< route tag
+  uint8_t m_metric; //!< route metric
+  Status_e m_status; //!< route status
+  bool m_changed; //!< route has been updated
+};
+
+/**
+ * \brief Stream insertion operator.
+ *
+ * \param os the reference to the output stream
+ * \param route the Ipv6 routing table entry
+ * \returns the reference to the output stream
+ */
+std::ostream& operator<< (std::ostream& os, RipNgRoutingTableEntry const& route);
+
+
+
+/**
+ * \ingroup ripng
+ *
+ * \brief RIPng Routing Protocol, defined in \rfc{2080}.
+ */
+class RipNg : public Ipv6RoutingProtocol
+{
+public:
+  // /< C-tor
+  RipNg ();
+  virtual ~RipNg ();
+
+  static TypeId GetTypeId (void);
+
+  // \name From Ipv6RoutingProtocol
+  // \{
+  Ptr<Ipv6Route> RouteOutput (Ptr<Packet> p, const Ipv6Header &header, Ptr<NetDevice> oif,
+                              Socket::SocketErrno &sockerr);
+  bool RouteInput (Ptr<const Packet> p, const Ipv6Header &header, Ptr<const NetDevice> idev,
+                   UnicastForwardCallback ucb, MulticastForwardCallback mcb,
+                   LocalDeliverCallback lcb, ErrorCallback ecb);
+  virtual void NotifyInterfaceUp (uint32_t interface);
+  virtual void NotifyInterfaceDown (uint32_t interface);
+  virtual void NotifyAddAddress (uint32_t interface, Ipv6InterfaceAddress address);
+  virtual void NotifyRemoveAddress (uint32_t interface, Ipv6InterfaceAddress address);
+  virtual void NotifyAddRoute (Ipv6Address dst, Ipv6Prefix mask, Ipv6Address nextHop,
+                               uint32_t interface, Ipv6Address prefixToUse = Ipv6Address::GetZero ());
+  virtual void NotifyRemoveRoute (Ipv6Address dst, Ipv6Prefix mask, Ipv6Address nextHop,
+                                  uint32_t interface, Ipv6Address prefixToUse = Ipv6Address::GetZero ());
+  virtual void SetIpv6 (Ptr<Ipv6> ipv6);
+  virtual void PrintRoutingTable (Ptr<OutputStreamWrapper> stream) const;
+  // \}
+
+  enum SplitHorizonType_e {
+    NO_SPLIT_HORIZON,
+    SPLIT_HORIZON,
+    POISON_REVERSE,
+  };
+
+  /**
+   * Assign a fixed random variable stream number to the random variables
+   * 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
+   */
+  int64_t AssignStreams (int64_t stream);
+
+  /**
+   * \brief Get the set of interface excluded from the protocol
+   * \return the set of excluded interfaces
+   */
+  std::set<uint32_t> GetInterfaceExclusions () const;
+
+  /**
+   * \brief Set the set of interface excluded from the protocol
+   * \param exceptions the set of excluded interfaces
+   */
+  void SetInterfaceExclusions (std::set<uint32_t> exceptions);
+
+  /**
+   * \brief Get the metric for an interface
+   * \param interface the interface
+   * \returns the interface metric
+   */
+  uint8_t GetInterfaceMetric (uint32_t interface) const;
+
+  /**
+   * \brief Set the metric for an interface
+   * \param interface the interface
+   * \param metric the interface metric
+   */
+  void SetInterfaceMetric (uint32_t interface, uint8_t metric);
+
+  /**
+   * \brief Add a default route to the router through the nextHop located on interface.
+   *
+   * The default route is usually installed manually, or it is the result of
+   * some "other" routing protocol (e.g., BGP).
+   *
+   * \param nextHop the next hop
+   * \param interface the interface
+   */
+  void AddDefaultRouteTo (Ipv6Address nextHop, uint32_t interface);
+
+protected:
+  /**
+   * \brief Dispose this object.
+   */
+  virtual void DoDispose ();
+
+  /**
+   * Start protocol operation
+   */
+  void DoInitialize ();
+
+private:
+  /// Container for the network routes - pair RipNgRoutingTableEntry *, EventId (update event)
+  typedef std::list<std::pair <RipNgRoutingTableEntry *, EventId> > Routes;
+
+  /// Const Iterator for container for the network routes
+  typedef std::list<std::pair <RipNgRoutingTableEntry *, EventId> >::const_iterator RoutesCI;
+
+  /// Iterator for container for the network routes
+  typedef std::list<std::pair <RipNgRoutingTableEntry *, EventId> >::iterator RoutesI;
+
+
+  /**
+   * \brief Receive RIPng packets.
+   *
+   * \param socket the socket the packet was received to.
+   */
+  void Receive (Ptr<Socket> socket);
+
+  /**
+   * \brief Handle RIPng requests.
+   *
+   * \param hdr message header (including RTEs)
+   * \param senderAddress sender address
+   * \param senderPort sender port
+   * \param incomingInterface incoming interface
+   * \param hopLimit packet's hop limit
+   */
+  void HandleRequests (RipNgHeader hdr, Ipv6Address senderAddress, uint16_t senderPort, uint32_t incomingInterface, uint8_t hopLimit);
+
+  /**
+   * \brief Handle RIPng responses.
+   *
+   * \param hdr message header (including RTEs)
+   * \param senderAddress sender address
+   * \param incomingInterface incoming interface
+   * \param hopLimit packet's hop limit
+   */
+  void HandleResponses (RipNgHeader hdr, Ipv6Address senderAddress, uint32_t incomingInterface, uint8_t hopLimit);
+
+  /**
+   * \brief Lookup in the forwarding table for destination.
+   * \param dest destination address
+   * \param interface output interface if any (put 0 otherwise)
+   * \return Ipv6Route to route the packet to reach dest address
+   */
+  Ptr<Ipv6Route> Lookup (Ipv6Address dest, Ptr<NetDevice> = 0);
+
+  /**
+   * Receive and process unicast packet
+   * \param socket socket where packet is arrived
+   */
+  void RecvUnicastRipng (Ptr<Socket> socket);
+  /**
+   * Receive and process multicast packet
+   * \param socket socket where packet is arrived
+   */
+  void RecvMulticastRipng (Ptr<Socket> socket);
+
+  /**
+   * \brief Add route to network.
+   * \param network network address
+   * \param networkPrefix network prefix*
+   * \param nextHop next hop address to route the packet.
+   * \param interface interface index
+   * \param prefixToUse prefix that should be used for source address for this destination
+   * \param metric metric of route in case of multiple routes to same destination
+   */
+  void AddNetworkRouteTo (Ipv6Address network, Ipv6Prefix networkPrefix, Ipv6Address nextHop, uint32_t interface, Ipv6Address prefixToUse);
+
+  /**
+   * \brief Add route to network.
+   * \param network network address
+   * \param networkPrefix network prefix
+   * \param interface interface index
+   * \param metric metric of route in case of multiple routes to same destination
+   */
+  void AddNetworkRouteTo (Ipv6Address network, Ipv6Prefix networkPrefix, uint32_t interface);
+
+  /**
+   * \brief Send Routing Updates on all interfaces.
+   */
+  void DoSendRouteUpdate (bool periodic);
+
+  /**
+   * \brief Send Routing Request on all interfaces.
+   */
+  void SendRouteRequest ();
+
+  /**
+   * \brief Send Triggered Routing Updates on all interfaces.
+   */
+  void SendTriggeredRouteUpdate ();
+
+  /**
+   * \brief Send Unsolicited Routing Updates on all interfaces.
+   */
+  void SendUnsolicitedRouteUpdate (void);
+
+  /**
+   * \brief Invalidate a route.
+   * \param route the route to be removed
+   */
+  void InvalidateRoute (RipNgRoutingTableEntry *route);
+
+  /**
+   * \brief Delete a route.
+   * \param route the route to be removed
+   */
+  void DeleteRoute (RipNgRoutingTableEntry *route);
+
+  Routes m_routes; //!<  the forwarding table for network.
+  Ptr<Ipv6> m_ipv6; //!< IPv6 reference
+  Time m_startupDelay; //!< Random delay before protocol startup.
+  Time m_minTriggeredUpdateDelay; //!< Min cooldown delay after a Triggered Update.
+  Time m_maxTriggeredUpdateDelay; //!< Max cooldown delay after a Triggered Update.
+  Time m_unsolicitedUpdate; //!< time between two Unsolicited Routing Updates
+  Time m_timeoutDelay; //!< Delay before invalidating a route
+  Time m_garbageCollectionDelay; //!< Delay before deleting an INVALID route
+
+  // note: we can not trust the result of socket->GetBoundNetDevice ()->GetIfIndex ();
+  // it is dependent on the interface initialization (i.e., if the loopback is already up).
+  /// Socket list type
+  typedef std::map< Ptr<Socket>, uint32_t> SocketList;
+  /// Socket list type iterator
+  typedef std::map<Ptr<Socket>, uint32_t>::iterator SocketListI;
+  /// Socket list type const iterator
+  typedef std::map<Ptr<Socket>, uint32_t>::const_iterator SocketListCI;
+
+  SocketList m_sendSocketList; //!< list of sockets for sending (socket, interface index)
+  Ptr<Socket> m_recvSocket;
+
+  EventId m_nextUnsolicitedUpdate; //!< Next Unsolicited Update event
+  EventId m_nextTriggeredUpdate; //!< Next Triggered Update event
+
+  Ptr<UniformRandomVariable> m_rng; //!< Rng stream.
+
+  std::set<uint32_t> m_interfaceExclusions; // Set of excluded interfaces
+  std::map<uint32_t, uint8_t> m_interfaceMetrics; // Map of interface metrics
+
+  SplitHorizonType_e m_splitHorizonStrategy; // Split Horizon strategy
+
+  bool m_initialized; // flag to allow socket's late-creation.
+};
+
+} // namespace ns3
+#endif /* RIPNG_H */
+
diff -Naur ns-3.19/src/internet/model/ripng-header.cc ns-3.20/src/internet/model/ripng-header.cc
--- ns-3.19/src/internet/model/ripng-header.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.20/src/internet/model/ripng-header.cc	2014-06-17 10:33:13.852996278 -0700
@@ -0,0 +1,255 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2014 Universita' di Firenze, Italy
+ *
+ * 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: Tommaso Pecorella <tommaso.pecorella@unifi.it>
+ */
+
+#include "ripng-header.h"
+
+namespace ns3 {
+
+/*
+ * RipNgRte
+ */
+NS_OBJECT_ENSURE_REGISTERED (RipNgRte)
+  ;
+
+RipNgRte::RipNgRte ()
+  : m_prefix ("::"), m_tag (0), m_prefixLen (0), m_metric (16)
+{
+}
+
+TypeId RipNgRte::GetTypeId (void)
+{
+  static TypeId tid = TypeId ("ns3::RipNgRte").SetParent<Header> ().AddConstructor<RipNgRte> ();
+  return tid;
+}
+
+TypeId RipNgRte::GetInstanceTypeId (void) const
+{
+  return GetTypeId ();
+}
+
+void RipNgRte::Print (std::ostream & os) const
+{
+  os << "prefix " << m_prefix << "/" << int(m_prefixLen) << " Metric " << int(m_metric) << " Tag " << int(m_tag);
+}
+
+uint32_t RipNgRte::GetSerializedSize () const
+{
+  return 20;
+}
+
+void RipNgRte::Serialize (Buffer::Iterator i) const
+{
+  uint8_t tmp[16];
+
+  m_prefix.Serialize (tmp);
+  i.Write (tmp, 16);
+
+  i.WriteHtonU16 (m_tag);
+  i.WriteU8 (m_prefixLen);
+  i.WriteU8 (m_metric);
+}
+
+uint32_t RipNgRte::Deserialize (Buffer::Iterator i)
+{
+  uint8_t tmp[16];
+
+  i.Read (tmp, 16);
+  m_prefix.Set (tmp);
+  m_tag = i.ReadNtohU16 ();
+  m_prefixLen = i.ReadU8 ();
+  m_metric = i.ReadU8 ();
+
+  return GetSerializedSize ();
+}
+
+void RipNgRte::SetPrefix (Ipv6Address prefix)
+{
+  m_prefix = prefix;
+}
+
+Ipv6Address RipNgRte::GetPrefix () const
+{
+  return m_prefix;
+}
+
+void RipNgRte::SetPrefixLen (uint8_t prefixLen)
+{
+  m_prefixLen = prefixLen;
+}
+
+uint8_t RipNgRte::GetPrefixLen () const
+{
+  return m_prefixLen;
+}
+
+void RipNgRte::SetRouteTag (uint16_t routeTag)
+{
+  m_tag = routeTag;
+}
+
+uint16_t RipNgRte::GetRouteTag () const
+{
+  return m_tag;
+}
+
+void RipNgRte::SetRouteMetric (uint8_t routeMetric)
+{
+  m_metric = routeMetric;
+}
+
+uint8_t RipNgRte::GetRouteMetric () const
+{
+  return m_metric;
+}
+
+
+std::ostream & operator << (std::ostream & os, const RipNgRte & h)
+{
+  h.Print (os);
+  return os;
+}
+
+/*
+ * RipNgHeader
+ */
+NS_OBJECT_ENSURE_REGISTERED (RipNgHeader)
+  ;
+
+RipNgHeader::RipNgHeader ()
+  : m_command (0)
+{
+}
+
+TypeId RipNgHeader::GetTypeId (void)
+{
+  static TypeId tid = TypeId ("ns3::RipNgHeader").SetParent<Header> ().AddConstructor<RipNgHeader> ();
+  return tid;
+}
+
+TypeId RipNgHeader::GetInstanceTypeId (void) const
+{
+  return GetTypeId ();
+}
+
+void RipNgHeader::Print (std::ostream & os) const
+{
+  os << "command " << int(m_command);
+  for (std::list<RipNgRte>::const_iterator iter = m_rteList.begin ();
+      iter != m_rteList.end (); iter ++)
+    {
+      os << " | ";
+      iter->Print (os);
+    }
+}
+
+uint32_t RipNgHeader::GetSerializedSize () const
+{
+  RipNgRte rte;
+  return 4 + m_rteList.size () * rte.GetSerializedSize ();
+}
+
+void RipNgHeader::Serialize (Buffer::Iterator start) const
+{
+  Buffer::Iterator i = start;
+
+  i.WriteU8 (uint8_t (m_command));
+  i.WriteU8 (1);
+  i.WriteU16 (0);
+
+  for (std::list<RipNgRte>::const_iterator iter = m_rteList.begin ();
+      iter != m_rteList.end (); iter ++)
+    {
+      iter->Serialize (i);
+      i.Next(iter->GetSerializedSize ());
+    }
+}
+
+uint32_t RipNgHeader::Deserialize (Buffer::Iterator start)
+{
+  Buffer::Iterator i = start;
+
+  uint8_t temp;
+  temp = i.ReadU8 ();
+  if ((temp == REQUEST) || (temp == RESPONSE))
+    {
+      m_command = temp;
+    }
+  else
+    {
+      return 0;
+    }
+
+  temp = i.ReadU8 ();
+  NS_ASSERT_MSG (temp == 1, "RipNG received a message with mismatch version, aborting.");
+
+  uint16_t temp16 = i.ReadU16 ();
+  NS_ASSERT_MSG (temp16 == 0, "RipNG received a message with invalid filled flags, aborting.");
+
+  uint8_t rteNumber = (i.GetSize () - 4)/20;
+  for (uint8_t n=0; n<rteNumber; n++)
+    {
+      RipNgRte rte;
+      i.Next (rte.Deserialize (i));
+      m_rteList.push_back (rte);
+    }
+
+  return GetSerializedSize ();
+}
+
+void RipNgHeader::SetCommand (RipNgHeader::Command_e command)
+{
+  m_command = command;
+}
+
+RipNgHeader::Command_e RipNgHeader::GetCommand () const
+{
+  return RipNgHeader::Command_e (m_command);
+}
+
+void RipNgHeader::AddRte (RipNgRte rte)
+{
+  m_rteList.push_back (rte);
+}
+
+void RipNgHeader::ClearRtes ()
+{
+  m_rteList.clear ();
+}
+
+uint16_t RipNgHeader::GetRteNumber (void) const
+{
+  return m_rteList.size ();
+}
+
+std::list<RipNgRte> RipNgHeader::GetRteList (void) const
+{
+  return m_rteList;
+}
+
+
+std::ostream & operator << (std::ostream & os, const RipNgHeader & h)
+{
+  h.Print (os);
+  return os;
+}
+
+
+}
+
diff -Naur ns-3.19/src/internet/model/ripng-header.h ns-3.20/src/internet/model/ripng-header.h
--- ns-3.19/src/internet/model/ripng-header.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.20/src/internet/model/ripng-header.h	2014-06-17 10:33:13.853996270 -0700
@@ -0,0 +1,226 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2014 Universita' di Firenze, Italy
+ *
+ * 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: Tommaso Pecorella <tommaso.pecorella@unifi.it>
+ */
+
+#ifndef RIPNG_HEADER_H
+#define RIPNG_HEADER_H
+
+#include <list>
+#include "ns3/header.h"
+#include "ns3/ipv6-address.h"
+#include "ns3/packet.h"
+#include "ns3/ipv6-header.h"
+
+
+namespace ns3 {
+
+/**
+ * \ingroup ripng
+ * \brief RipNg Routing Table Entry (RTE) - see \RFC{2080}
+ */
+class RipNgRte : public Header
+{
+public:
+  RipNgRte (void);
+
+  /**
+   * \brief Get the type ID.
+   * \return the object TypeId
+   */
+  static TypeId GetTypeId (void);
+
+  /**
+   * \brief Return the instance type identifier.
+   * \return instance type ID
+   */
+  virtual TypeId GetInstanceTypeId (void) const;
+
+  virtual void Print (std::ostream& os) const;
+
+  /**
+   * \brief Get the serialized size of the packet.
+   * \return size
+   */
+  virtual uint32_t GetSerializedSize (void) const;
+
+  /**
+   * \brief Serialize the packet.
+   * \param start Buffer iterator
+   */
+  virtual void Serialize (Buffer::Iterator start) const;
+
+  /**
+   * \brief Deserialize the packet.
+   * \param start Buffer iterator
+   * \return size of the packet
+   */
+  virtual uint32_t Deserialize (Buffer::Iterator start);
+
+  /**
+   * \brief Set the prefix
+   * \param prefix the prefix
+   */
+  void SetPrefix (Ipv6Address prefix);
+
+  /**
+   * \brief Get the prefix
+   * \returns the prefix
+   */
+  Ipv6Address GetPrefix (void) const;
+
+  /**
+   * \brief Set the prefix length
+   * \param prefixLen the prefix length
+   */
+  void SetPrefixLen (uint8_t prefixLen);
+
+  /**
+   * \brief Get the prefix length
+   * \returns the prefix length
+   */
+  uint8_t GetPrefixLen (void) const;
+
+  /**
+   * \brief Set the route tag
+   * \param routeTag the route tag
+   */
+  void SetRouteTag (uint16_t routeTag);
+
+  /**
+   * \brief Get the route tag
+   * \returns the route tag
+   */
+  uint16_t GetRouteTag (void) const;
+
+  /**
+   * \brief Set the route metric
+   * \param routeMetric the route metric
+   */
+  void SetRouteMetric (uint8_t routeMetric);
+
+  /**
+   * \brief Get the route metric
+   * \returns the route metric
+   */
+  uint8_t GetRouteMetric (void) const;
+
+
+private:
+  Ipv6Address m_prefix; //!< prefix
+  uint16_t m_tag; //!< route tag
+  uint8_t m_prefixLen; //!< prefix length
+  uint8_t m_metric; //!< route metric
+};
+
+
+/**
+ * \ingroup ripng
+ * \brief RipNgHeader - see \RFC{2080}
+ */
+class RipNgHeader : public Header
+{
+public:
+  RipNgHeader (void);
+
+  /**
+   * \brief Get the type ID.
+   * \return the object TypeId
+   */
+  static TypeId GetTypeId (void);
+
+  /**
+   * \brief Return the instance type identifier.
+   * \return instance type ID
+   */
+  virtual TypeId GetInstanceTypeId (void) const;
+
+  virtual void Print (std::ostream& os) const;
+
+  /**
+   * \brief Get the serialized size of the packet.
+   * \return size
+   */
+  virtual uint32_t GetSerializedSize (void) const;
+
+  /**
+   * \brief Serialize the packet.
+   * \param start Buffer iterator
+   */
+  virtual void Serialize (Buffer::Iterator start) const;
+
+  /**
+   * \brief Deserialize the packet.
+   * \param start Buffer iterator
+   * \return size of the packet
+   */
+  virtual uint32_t Deserialize (Buffer::Iterator start);
+
+  /**
+   * Commands to be used in RipNg headers
+   */
+  enum Command_e
+  {
+    REQUEST = 0x1,
+    RESPONSE = 0x2,
+  };
+
+  /**
+   * \brief Set the command
+   * \param command the command
+   */
+  void SetCommand (Command_e command);
+
+  /**
+   * \brief Get the command
+   * \returns the command
+   */
+  Command_e GetCommand (void) const;
+
+  /**
+   * \brief Add a RTE to the message
+   * \param rte the RTE
+   */
+  void AddRte (RipNgRte rte);
+
+  /**
+   * \brief Clear all the RTEs from the header
+   */
+  void ClearRtes ();
+
+  /**
+   * \brief Get the number of RTE included in the message
+   * \returns the number of RTE in the message
+   */
+  uint16_t GetRteNumber (void) const;
+
+  /**
+   * \brief Get the list of the RTEs included in the message
+   * \returns the list of the RTEs in the message
+   */
+  std::list<RipNgRte> GetRteList (void) const;
+
+private:
+  uint8_t m_command; //!< command type
+  std::list<RipNgRte> m_rteList; //!< list of the RTEs in the message
+};
+
+}
+
+#endif /* RIPNG_HEADER_H */
+
diff -Naur ns-3.19/src/internet/model/rtt-estimator.cc ns-3.20/src/internet/model/rtt-estimator.cc
--- ns-3.19/src/internet/model/rtt-estimator.cc	2014-06-17 10:34:00.532635936 -0700
+++ ns-3.20/src/internet/model/rtt-estimator.cc	2014-06-17 10:33:13.854996262 -0700
@@ -38,8 +38,7 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (RttEstimator)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (RttEstimator);
 
 TypeId 
 RttEstimator::GetTypeId (void)
@@ -232,8 +231,7 @@
 //-----------------------------------------------------------------------------
 // Mean-Deviation Estimator
 
-NS_OBJECT_ENSURE_REGISTERED (RttMeanDeviation)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (RttMeanDeviation);
 
 TypeId 
 RttMeanDeviation::GetTypeId (void)
diff -Naur ns-3.19/src/internet/model/tcp-header.cc ns-3.20/src/internet/model/tcp-header.cc
--- ns-3.19/src/internet/model/tcp-header.cc	2014-06-17 10:34:00.533635928 -0700
+++ ns-3.20/src/internet/model/tcp-header.cc	2014-06-17 10:33:13.856996247 -0700
@@ -26,8 +26,7 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (TcpHeader)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (TcpHeader);
 
 TcpHeader::TcpHeader ()
   : m_sourcePort (0),
diff -Naur ns-3.19/src/internet/model/tcp-l4-protocol.cc ns-3.20/src/internet/model/tcp-l4-protocol.cc
--- ns-3.19/src/internet/model/tcp-l4-protocol.cc	2014-06-17 10:34:00.535635912 -0700
+++ ns-3.20/src/internet/model/tcp-l4-protocol.cc	2014-06-17 10:33:13.857996239 -0700
@@ -51,8 +51,7 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (TcpL4Protocol)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (TcpL4Protocol);
 
 //TcpL4Protocol stuff----------------------------------------------------------
 
diff -Naur ns-3.19/src/internet/model/tcp-newreno.cc ns-3.20/src/internet/model/tcp-newreno.cc
--- ns-3.19/src/internet/model/tcp-newreno.cc	2014-06-17 10:34:00.536635905 -0700
+++ ns-3.20/src/internet/model/tcp-newreno.cc	2014-06-17 10:33:13.859996224 -0700
@@ -32,8 +32,7 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (TcpNewReno)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (TcpNewReno);
 
 TypeId
 TcpNewReno::GetTypeId (void)
@@ -128,8 +127,9 @@
       m_cWnd -= seq - m_txBuffer.HeadSequence ();
       m_cWnd += m_segmentSize;  // increase cwnd
       NS_LOG_INFO ("Partial ACK in fast recovery: cwnd set to " << m_cWnd);
-      TcpSocketBase::NewAck (seq); // update m_nextTxSequence and send new data if allowed by window
+      m_txBuffer.DiscardUpTo(seq);  //Bug 1850:  retransmit before newack
       DoRetransmit (); // Assume the next seq is lost. Retransmit lost packet
+      TcpSocketBase::NewAck (seq); // update m_nextTxSequence and send new data if allowed by window
       return;
     }
   else if (m_inFastRec && seq >= m_recover)
diff -Naur ns-3.19/src/internet/model/tcp-reno.cc ns-3.20/src/internet/model/tcp-reno.cc
--- ns-3.19/src/internet/model/tcp-reno.cc	2014-06-17 10:34:00.536635905 -0700
+++ ns-3.20/src/internet/model/tcp-reno.cc	2014-06-17 10:33:13.860996216 -0700
@@ -32,8 +32,7 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (TcpReno)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (TcpReno);
 
 TypeId
 TcpReno::GetTypeId (void)
diff -Naur ns-3.19/src/internet/model/tcp-rfc793.cc ns-3.20/src/internet/model/tcp-rfc793.cc
--- ns-3.19/src/internet/model/tcp-rfc793.cc	2014-06-17 10:34:00.537635897 -0700
+++ ns-3.20/src/internet/model/tcp-rfc793.cc	2014-06-17 10:33:13.860996216 -0700
@@ -25,8 +25,7 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (TcpRfc793)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (TcpRfc793);
 
 TypeId
 TcpRfc793::GetTypeId (void)
diff -Naur ns-3.19/src/internet/model/tcp-socket-base.cc ns-3.20/src/internet/model/tcp-socket-base.cc
--- ns-3.19/src/internet/model/tcp-socket-base.cc	2014-06-17 10:34:00.540635874 -0700
+++ ns-3.20/src/internet/model/tcp-socket-base.cc	2014-06-17 10:33:13.863996193 -0700
@@ -54,8 +54,7 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (TcpSocketBase)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (TcpSocketBase);
 
 TypeId
 TcpSocketBase::GetTypeId (void)
@@ -265,7 +264,11 @@
       m_errno = ERROR_ADDRNOTAVAIL;
       return -1;
     }
-  m_tcp->m_sockets.push_back (this);
+
+  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);
+    }
   return SetupCallback ();
 }
 
@@ -279,7 +282,11 @@
       m_errno = ERROR_ADDRNOTAVAIL;
       return -1;
     }
-  m_tcp->m_sockets.push_back (this);
+
+  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);
+    }
   return SetupCallback ();
 }
 
@@ -347,7 +354,11 @@
       m_errno = ERROR_INVAL;
       return -1;
     }
-  m_tcp->m_sockets.push_back (this);
+
+  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);
+    }
   NS_LOG_LOGIC ("TcpSocketBase " << this << " got an endpoint: " << m_endPoint);
 
   return SetupCallback ();
@@ -770,10 +781,12 @@
     {
       NotifyNormalClose ();
     }
+
   if (m_state != TIME_WAIT)
     {
       DeallocateEndPoint ();
     }
+    
   m_closeNotified = true;
   NS_LOG_INFO (TcpStateName[m_state] << " -> CLOSED");
   CancelAllTimers ();
@@ -2083,7 +2096,7 @@
 
   //nextRtt will be zero for dup acks.  Don't want to update lastRtt in that case
   //but still needed to do list clearing that is done in AckSeq. 
-  if(nextRtt != 0)
+  if(nextRtt != Time (0))
   {
     m_lastRtt = nextRtt;
     NS_LOG_FUNCTION(this << m_lastRtt);
diff -Naur ns-3.19/src/internet/model/tcp-socket-base.h ns-3.20/src/internet/model/tcp-socket-base.h
--- ns-3.19/src/internet/model/tcp-socket-base.h	2014-06-17 10:34:00.540635874 -0700
+++ ns-3.20/src/internet/model/tcp-socket-base.h	2014-06-17 10:33:13.864996186 -0700
@@ -211,7 +211,7 @@
    *
    * \param packet the incoming packet
    * \param header the packet's IPv4 header
-   * \param port the incoming port
+   * \param port the remote port
    * \param incomingInterface the incoming interface
    */
   void ForwardUp (Ptr<Packet> packet, Ipv4Header header, uint16_t port, Ptr<Ipv4Interface> incomingInterface);
@@ -221,7 +221,7 @@
    *
    * \param packet the incoming packet
    * \param header the packet's IPv6 header
-   * \param port the incoming port
+   * \param port the remote port
    * \param incomingInterface the incoming interface
    */
   void ForwardUp6 (Ptr<Packet> packet, Ipv6Header header, uint16_t port, Ptr<Ipv6Interface> incomingInterface);
@@ -231,7 +231,7 @@
    *
    * \param packet the incoming packet
    * \param header the packet's IPv4 header
-   * \param port the incoming port
+   * \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
@@ -241,7 +241,7 @@
    *
    * \param packet the incoming packet
    * \param header the packet's IPv6 header
-   * \param port the incoming port
+   * \param port the remote port
    */
   virtual void DoForwardUp (Ptr<Packet> packet, Ipv6Header header, uint16_t port);
 
@@ -341,7 +341,7 @@
   void Destroy6 (void);
 
   /**
-   * \brief Deallocate m_endPoint
+   * \brief Deallocate m_endPoint and m_endPoint6
    */
   void DeallocateEndPoint (void);
 
diff -Naur ns-3.19/src/internet/model/tcp-socket.cc ns-3.20/src/internet/model/tcp-socket.cc
--- ns-3.19/src/internet/model/tcp-socket.cc	2014-06-17 10:34:00.542635859 -0700
+++ ns-3.20/src/internet/model/tcp-socket.cc	2014-06-17 10:33:13.865996178 -0700
@@ -31,8 +31,7 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (TcpSocket)
-  ;
+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" };
 
diff -Naur ns-3.19/src/internet/model/tcp-socket-factory.cc ns-3.20/src/internet/model/tcp-socket-factory.cc
--- ns-3.19/src/internet/model/tcp-socket-factory.cc	2014-06-17 10:34:00.541635866 -0700
+++ ns-3.20/src/internet/model/tcp-socket-factory.cc	2014-06-17 10:33:13.865996178 -0700
@@ -23,8 +23,7 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (TcpSocketFactory)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (TcpSocketFactory);
 
 TypeId
 TcpSocketFactory::GetTypeId (void)
diff -Naur ns-3.19/src/internet/model/tcp-tahoe.cc ns-3.20/src/internet/model/tcp-tahoe.cc
--- ns-3.19/src/internet/model/tcp-tahoe.cc	2014-06-17 10:34:00.543635851 -0700
+++ ns-3.20/src/internet/model/tcp-tahoe.cc	2014-06-17 10:33:13.866996170 -0700
@@ -32,8 +32,7 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (TcpTahoe)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (TcpTahoe);
 
 TypeId
 TcpTahoe::GetTypeId (void)
diff -Naur ns-3.19/src/internet/model/tcp-westwood.cc ns-3.20/src/internet/model/tcp-westwood.cc
--- ns-3.19/src/internet/model/tcp-westwood.cc	2014-06-17 10:34:00.544635843 -0700
+++ ns-3.20/src/internet/model/tcp-westwood.cc	2014-06-17 10:33:13.868996155 -0700
@@ -46,8 +46,7 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED(TcpWestwood)
-  ;
+NS_OBJECT_ENSURE_REGISTERED(TcpWestwood);
 
 TypeId
 TcpWestwood::GetTypeId (void)
@@ -329,7 +328,7 @@
   TcpSocketBase::EstimateRtt (tcpHeader);
 
   // Update minRtt
-  if (m_minRtt == 0)
+  if (m_minRtt == Time (0))
     {
       m_minRtt = m_lastRtt;
     }
@@ -345,7 +344,7 @@
   // to trigger a new BW sampling event
   if (m_pType == TcpWestwood::WESTWOODPLUS)
    {
-     if(m_lastRtt != 0 && m_state == ESTABLISHED && !m_IsCount)
+     if(m_lastRtt != Time (0) && m_state == ESTABLISHED && !m_IsCount)
        {
          m_IsCount = true;
          m_bwEstimateEvent.Cancel();
diff -Naur ns-3.19/src/internet/model/udp-header.cc ns-3.20/src/internet/model/udp-header.cc
--- ns-3.19/src/internet/model/udp-header.cc	2014-06-17 10:34:00.545635835 -0700
+++ ns-3.20/src/internet/model/udp-header.cc	2014-06-17 10:33:13.868996155 -0700
@@ -23,8 +23,7 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (UdpHeader)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (UdpHeader);
 
 /* The magic values below are used only for debugging.
  * They can be used to easily detect memory corruption
diff -Naur ns-3.19/src/internet/model/udp-l4-protocol.cc ns-3.20/src/internet/model/udp-l4-protocol.cc
--- ns-3.19/src/internet/model/udp-l4-protocol.cc	2014-06-17 10:34:00.546635828 -0700
+++ ns-3.20/src/internet/model/udp-l4-protocol.cc	2014-06-17 10:33:13.869996147 -0700
@@ -44,8 +44,7 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (UdpL4Protocol)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (UdpL4Protocol);
 
 /* see http://www.iana.org/assignments/protocol-numbers */
 const uint8_t UdpL4Protocol::PROT_NUMBER = 17;
diff -Naur ns-3.19/src/internet/model/udp-socket.cc ns-3.20/src/internet/model/udp-socket.cc
--- ns-3.19/src/internet/model/udp-socket.cc	2014-06-17 10:34:00.549635804 -0700
+++ ns-3.20/src/internet/model/udp-socket.cc	2014-06-17 10:33:13.873996116 -0700
@@ -30,8 +30,7 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (UdpSocket)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (UdpSocket);
 
 TypeId
 UdpSocket::GetTypeId (void)
diff -Naur ns-3.19/src/internet/model/udp-socket-factory.cc ns-3.20/src/internet/model/udp-socket-factory.cc
--- ns-3.19/src/internet/model/udp-socket-factory.cc	2014-06-17 10:34:00.547635820 -0700
+++ ns-3.20/src/internet/model/udp-socket-factory.cc	2014-06-17 10:33:13.871996131 -0700
@@ -22,8 +22,7 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (UdpSocketFactory)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (UdpSocketFactory);
 
 TypeId UdpSocketFactory::GetTypeId (void)
 {
diff -Naur ns-3.19/src/internet/model/udp-socket-impl.cc ns-3.20/src/internet/model/udp-socket-impl.cc
--- ns-3.19/src/internet/model/udp-socket-impl.cc	2014-06-17 10:34:00.548635812 -0700
+++ ns-3.20/src/internet/model/udp-socket-impl.cc	2014-06-17 10:33:13.872996124 -0700
@@ -43,8 +43,7 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (UdpSocketImpl)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (UdpSocketImpl);
 
 // The correct maximum UDP message size is 65507, as determined by the following formula:
 // 0xffff - (sizeof(IP Header) + sizeof(UDP Header)) = 65535-(20+8) = 65507
@@ -180,6 +179,25 @@
   m_endPoint6 = 0;
 }
 
+/* Deallocate the end point and cancel all the timers */
+void
+UdpSocketImpl::DeallocateEndPoint (void)
+{
+  if (m_endPoint != 0)
+    {
+      m_endPoint->SetDestroyCallback (MakeNullCallback<void> ());
+      m_udp->DeAllocate (m_endPoint);
+      m_endPoint = 0;
+    }
+  if (m_endPoint6 != 0)
+    {
+      m_endPoint6->SetDestroyCallback (MakeNullCallback<void> ());
+      m_udp->DeAllocate (m_endPoint6);
+      m_endPoint6 = 0;
+    }
+}
+
+
 int
 UdpSocketImpl::FinishBind (void)
 {
@@ -318,6 +336,7 @@
     }
   m_shutdownRecv = true;
   m_shutdownSend = true;
+  DeallocateEndPoint ();
   return 0;
 }
 
@@ -853,10 +872,14 @@
     {
       address = InetSocketAddress (m_endPoint->GetLocalAddress (), m_endPoint->GetLocalPort ());
     }
-  else
+  else if (m_endPoint6 != 0)
     {
-      // It is possible to call this method on a socket without a name
+      address = Inet6SocketAddress (m_endPoint6->GetLocalAddress (), m_endPoint6->GetLocalPort ());
+    }
+  else
+    { // It is possible to call this method on a socket without a name
       // in which case, behavior is unspecified
+      // Should this return an InetSocketAddress or an Inet6SocketAddress?
       address = InetSocketAddress (Ipv4Address::GetZero (), 0);
     }
   return 0;
diff -Naur ns-3.19/src/internet/model/udp-socket-impl.h ns-3.20/src/internet/model/udp-socket-impl.h
--- ns-3.19/src/internet/model/udp-socket-impl.h	2014-06-17 10:34:00.549635804 -0700
+++ ns-3.20/src/internet/model/udp-socket-impl.h	2014-06-17 10:33:13.872996124 -0700
@@ -38,6 +38,8 @@
 class Node;
 class Packet;
 class UdpL4Protocol;
+class Ipv6Header;
+class Ipv6Interface;
 
 /**
  * \ingroup udp
@@ -125,7 +127,7 @@
    *
    * \param packet the incoming packet
    * \param header the packet's IPv4 header
-   * \param port the incoming port
+   * \param port the remote port
    * \param incomingInterface the incoming interface
    */
   void ForwardUp (Ptr<Packet> packet, Ipv4Header header, uint16_t port, Ptr<Ipv4Interface> incomingInterface);
@@ -135,7 +137,7 @@
    *
    * \param packet the incoming packet
    * \param header the packet's IPv6 header
-   * \param port the incoming port
+   * \param port the remote port
    * \param incomingInterface the incoming interface
    */
   void ForwardUp6 (Ptr<Packet> packet, Ipv6Header header, uint16_t port, Ptr<Ipv6Interface> incomingInterface);
@@ -157,6 +159,11 @@
   void Destroy6 (void);
 
   /**
+   * \brief Deallocate m_endPoint and m_endPoint6
+   */
+  void DeallocateEndPoint (void);
+
+  /**
    * \brief Send a packet
    * \param p packet
    * \returns 0 on success, -1 on failure
diff -Naur ns-3.19/src/internet/test/error-channel.cc ns-3.20/src/internet/test/error-channel.cc
--- ns-3.19/src/internet/test/error-channel.cc	2014-06-17 10:34:00.550635797 -0700
+++ ns-3.20/src/internet/test/error-channel.cc	2014-06-17 10:33:13.874996108 -0700
@@ -28,8 +28,7 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (ErrorChannel)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (ErrorChannel);
 
 TypeId 
 ErrorChannel::GetTypeId (void)
@@ -105,8 +104,7 @@
   return m_devices[i];
 }
 
-NS_OBJECT_ENSURE_REGISTERED (BinaryErrorModel)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (BinaryErrorModel);
 
 TypeId BinaryErrorModel::GetTypeId (void)
 {
diff -Naur ns-3.19/src/internet/test/ipv4-fragmentation-test.cc ns-3.20/src/internet/test/ipv4-fragmentation-test.cc
--- ns-3.19/src/internet/test/ipv4-fragmentation-test.cc	2014-06-17 10:34:00.553635774 -0700
+++ ns-3.20/src/internet/test/ipv4-fragmentation-test.cc	2014-06-17 10:33:13.876996093 -0700
@@ -54,6 +54,26 @@
 
 class UdpSocketImpl;
 
+/* ----------------------------------------------------------------------------------
+ * Tag
+ --------------------------------------------------------------------------------- */
+class IPv4TestTag : public Tag {
+private:
+  uint64_t token;
+public:
+  static TypeId GetTypeId () {
+    static TypeId tid = TypeId ("ns3::IPv4TestTag").SetParent<Tag> ().AddConstructor<IPv4TestTag> ();
+    return tid;
+  }
+  virtual TypeId GetInstanceTypeId () const { return GetTypeId (); }
+  virtual uint32_t GetSerializedSize () const { return sizeof (token); }
+  virtual void Serialize (TagBuffer buffer) const { buffer.WriteU64 (token); }
+  virtual void Deserialize (TagBuffer buffer) { token = buffer.ReadU64 (); }
+  virtual void Print (std::ostream &os) const { os << "token=" << token; }
+  void setToken (uint64_t token) { this->token = token; }
+  uint64_t getToken () { return token; }
+};
+
 static void
 AddInternetStack (Ptr<Node> node)
 {
@@ -161,9 +181,6 @@
     {
       if (InetSocketAddress::IsMatchingType (from))
         {
-          packet->RemoveAllPacketTags ();
-          packet->RemoveAllByteTags ();
-
           m_receivedPacketServer = packet->Copy();
         }
     }
@@ -247,6 +264,11 @@
     {
       p = Create<Packet> (m_size);
     }
+  IPv4TestTag tag;
+  tag.setToken (42);
+  p->AddPacketTag (tag);
+  p->AddByteTag (tag);
+
   m_socketClient->Send (p);
 
   return p;
@@ -398,6 +420,56 @@
       NS_TEST_EXPECT_MSG_EQ ((m_icmpType == 11), true, "Client did not receive ICMP::TIME_EXCEEDED");
     }
 
+  // Fourth test: normal channel, no errors, no delays.
+  // We check tags
+  clientDevErrorModel->Disable ();
+  serverDevErrorModel->Disable ();
+  for (int i= 0; i<5; i++)
+    {
+      uint32_t packetSize = packetSizes[i];
+
+      SetFill (fillData, 78, packetSize);
+
+      m_receivedPacketServer = Create<Packet> ();
+      Simulator::ScheduleWithContext (m_socketClient->GetNode ()->GetId (), Seconds (0),
+                                      &Ipv4FragmentationTest::SendClient, this);
+      Simulator::Run ();
+
+      IPv4TestTag packetTag;
+      bool found = m_receivedPacketServer->PeekPacketTag (packetTag);
+
+      NS_TEST_EXPECT_MSG_EQ (found, true, "PacketTag not found");
+      NS_TEST_EXPECT_MSG_EQ (packetTag.getToken (), 42, "PacketTag value not correct");
+
+      ByteTagIterator iter = m_receivedPacketServer->GetByteTagIterator ();
+
+      uint32_t end = 0;
+      uint32_t tagStart = 0;
+      uint32_t tagEnd = 0;
+      while (iter.HasNext ())
+        {
+          ByteTagIterator::Item item = iter.Next ();
+          NS_TEST_EXPECT_MSG_EQ (item.GetTypeId ().GetName (), "ns3::IPv4TestTag", "ByteTag name not correct");
+          tagStart = item.GetStart ();
+          tagEnd = item.GetEnd ();
+          if (end == 0)
+            {
+              NS_TEST_EXPECT_MSG_EQ (tagStart, 0, "First ByteTag Start not correct");
+            }
+          if (end != 0)
+            {
+              NS_TEST_EXPECT_MSG_EQ (tagStart, end, "ByteTag End not correct");
+            }
+          end = tagEnd;
+          IPv4TestTag *byteTag = dynamic_cast<IPv4TestTag *> (item.GetTypeId ().GetConstructor () ());
+          NS_TEST_EXPECT_MSG_NE (byteTag, 0, "ByteTag not found");
+          item.GetTag (*byteTag);
+          NS_TEST_EXPECT_MSG_EQ (byteTag->getToken (), 42, "ByteTag value not correct");
+          delete byteTag;
+        }
+      NS_TEST_EXPECT_MSG_EQ (end, m_receivedPacketServer->GetSize (), "trivial");
+    }
+
 
   Simulator::Destroy ();
 }
diff -Naur ns-3.19/src/internet/test/ipv4-test.cc ns-3.20/src/internet/test/ipv4-test.cc
--- ns-3.19/src/internet/test/ipv4-test.cc	2014-06-17 10:34:00.554635766 -0700
+++ ns-3.20/src/internet/test/ipv4-test.cc	2014-06-17 10:33:13.878996077 -0700
@@ -30,7 +30,7 @@
 #include "ns3/ipv4-interface.h"
 #include "ns3/loopback-net-device.h"
 
-namespace ns3 {
+using namespace ns3;
 
 class Ipv4L3ProtocolTestCase : public TestCase
 {
@@ -150,5 +150,3 @@
     AddTestCase (new Ipv4L3ProtocolTestCase (), TestCase::QUICK);
   }
 } g_ipv4protocolTestSuite;
-
-} // namespace ns3
diff -Naur ns-3.19/src/internet/test/ipv6-fragmentation-test.cc ns-3.20/src/internet/test/ipv6-fragmentation-test.cc
--- ns-3.19/src/internet/test/ipv6-fragmentation-test.cc	2014-06-17 10:34:00.557635743 -0700
+++ ns-3.20/src/internet/test/ipv6-fragmentation-test.cc	2014-06-17 10:33:13.881996054 -0700
@@ -18,9 +18,10 @@
  * Author: Tommaso Pecorella <tommaso.pecorella@unifi.it>
  */
 /**
+ * \file
+ *
  * This is the test code for ipv6-l3protocol.cc (only the fragmentation and reassembly part).
  */
-#define NS3_LOG_ENABLE 1
 
 #include "ns3/test.h"
 #include "ns3/config.h"
@@ -63,6 +64,26 @@
 
 class UdpSocketImpl;
 
+/* ----------------------------------------------------------------------------------
+ * Tag
+ --------------------------------------------------------------------------------- */
+class IPv6TestTag : public Tag {
+private:
+  uint64_t token;
+public:
+  static TypeId GetTypeId () {
+    static TypeId tid = TypeId ("ns3::IPv6TestTag").SetParent<Tag> ().AddConstructor<IPv6TestTag> ();
+    return tid;
+  }
+  virtual TypeId GetInstanceTypeId () const { return GetTypeId (); }
+  virtual uint32_t GetSerializedSize () const { return sizeof (token); }
+  virtual void Serialize (TagBuffer buffer) const { buffer.WriteU64 (token); }
+  virtual void Deserialize (TagBuffer buffer) { token = buffer.ReadU64 (); }
+  virtual void Print (std::ostream &os) const { os << "token=" << token; }
+  void setToken (uint64_t token) { this->token = token; }
+  uint64_t getToken () { return token; }
+};
+
 static void
 AddInternetStack (Ptr<Node> node)
 {
@@ -170,9 +191,6 @@
     {
       if (Inet6SocketAddress::IsMatchingType (from))
         {
-          packet->RemoveAllPacketTags ();
-          packet->RemoveAllByteTags ();
-
           m_receivedPacketServer = packet->Copy ();
         }
     }
@@ -257,6 +275,11 @@
     {
       p = Create<Packet> (m_size);
     }
+  IPv6TestTag tag;
+  tag.setToken (42);
+  p->AddPacketTag (tag);
+  p->AddByteTag (tag);
+
   m_socketClient->Send (p);
 
   return p;
@@ -409,6 +432,55 @@
                              true, "Client did not receive ICMPv6::TIME_EXCEEDED " << int(m_icmpType) << int(m_icmpCode) );
     }
 
+  // Fourth test: normal channel, no errors, no delays.
+  // We check tags
+  clientDevErrorModel->Disable ();
+  serverDevErrorModel->Disable ();
+  for (int i= 0; i<5; i++)
+    {
+      uint32_t packetSize = packetSizes[i];
+
+      SetFill (fillData, 78, packetSize);
+
+      m_receivedPacketServer = Create<Packet> ();
+      Simulator::ScheduleWithContext (m_socketClient->GetNode ()->GetId (), Seconds (0),
+                                      &Ipv6FragmentationTest::SendClient, this);
+      Simulator::Run ();
+
+      IPv6TestTag packetTag;
+      bool found = m_receivedPacketServer->PeekPacketTag (packetTag);
+
+      NS_TEST_EXPECT_MSG_EQ (found, true, "PacketTag not found");
+      NS_TEST_EXPECT_MSG_EQ (packetTag.getToken (), 42, "PacketTag value not correct");
+
+      ByteTagIterator iter = m_receivedPacketServer->GetByteTagIterator ();
+
+      uint32_t end = 0;
+      uint32_t tagStart = 0;
+      uint32_t tagEnd = 0;
+      while (iter.HasNext ())
+        {
+          ByteTagIterator::Item item = iter.Next ();
+          NS_TEST_EXPECT_MSG_EQ (item.GetTypeId ().GetName (), "ns3::IPv6TestTag", "ByteTag name not correct");
+          tagStart = item.GetStart ();
+          tagEnd = item.GetEnd ();
+          if (end == 0)
+            {
+              NS_TEST_EXPECT_MSG_EQ (tagStart, 0, "First ByteTag Start not correct");
+            }
+          if (end != 0)
+            {
+              NS_TEST_EXPECT_MSG_EQ (tagStart, end, "ByteTag End not correct");
+            }
+          end = tagEnd;
+          IPv6TestTag *byteTag = dynamic_cast<IPv6TestTag *> (item.GetTypeId ().GetConstructor () ());
+          NS_TEST_EXPECT_MSG_NE (byteTag, 0, "ByteTag not found");
+          item.GetTag (*byteTag);
+          NS_TEST_EXPECT_MSG_EQ (byteTag->getToken (), 42, "ByteTag value not correct");
+          delete byteTag;
+        }
+      NS_TEST_EXPECT_MSG_EQ (end, m_receivedPacketServer->GetSize (), "trivial");
+    }
 
   Simulator::Destroy ();
 }
diff -Naur ns-3.19/src/internet/test/ipv6-ripng-test.cc ns-3.20/src/internet/test/ipv6-ripng-test.cc
--- ns-3.19/src/internet/test/ipv6-ripng-test.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.20/src/internet/test/ipv6-ripng-test.cc	2014-06-17 10:33:13.882996046 -0700
@@ -0,0 +1,652 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2014 Universita' di Firenze
+ * 
+ * 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: Tommaso Pecorella <tommaso.pecorella@unifi.it>
+ */
+
+#include "ns3/test.h"
+#include "ns3/socket-factory.h"
+#include "ns3/udp-socket-factory.h"
+#include "ns3/simulator.h"
+#include "ns3/simple-channel.h"
+#include "ns3/simple-net-device.h"
+#include "ns3/drop-tail-queue.h"
+#include "ns3/socket.h"
+#include "ns3/boolean.h"
+#include "ns3/enum.h"
+
+#include "ns3/log.h"
+#include "ns3/node.h"
+#include "ns3/inet6-socket-address.h"
+
+#include "ns3/internet-stack-helper.h"
+#include "ns3/ipv6-address-helper.h"
+#include "ns3/ipv6-l3-protocol.h"
+#include "ns3/icmpv6-l4-protocol.h"
+#include "ns3/udp-l4-protocol.h"
+#include "ns3/ipv6-static-routing.h"
+#include "ns3/ipv6-list-routing.h"
+#include "ns3/ipv6-list-routing-helper.h"
+#include "ns3/ripng.h"
+#include "ns3/ripng-helper.h"
+#include "ns3/node-container.h"
+
+#include <string>
+#include <limits>
+
+using namespace ns3;
+
+// Ipv6RipngTest
+
+class Ipv6RipngTest : public TestCase
+{
+  Ptr<Packet> m_receivedPacket;
+  void DoSendData (Ptr<Socket> socket, std::string to);
+  void SendData (Ptr<Socket> socket, std::string to);
+
+public:
+  virtual void DoRun (void);
+  Ipv6RipngTest ();
+
+  void ReceivePkt (Ptr<Socket> socket);
+};
+
+Ipv6RipngTest::Ipv6RipngTest ()
+  : TestCase ("RIPng")
+{
+}
+
+void Ipv6RipngTest::ReceivePkt (Ptr<Socket> socket)
+{
+  uint32_t availableData;
+  availableData = socket->GetRxAvailable ();
+  m_receivedPacket = socket->Recv (std::numeric_limits<uint32_t>::max (), 0);
+  NS_ASSERT (availableData == m_receivedPacket->GetSize ());
+  //cast availableData to void, to suppress 'availableData' set but not used
+  //compiler warning
+  (void) availableData;
+}
+
+void
+Ipv6RipngTest::DoSendData (Ptr<Socket> socket, std::string to)
+{
+  Address realTo = Inet6SocketAddress (Ipv6Address (to.c_str ()), 1234);
+  NS_TEST_EXPECT_MSG_EQ (socket->SendTo (Create<Packet> (123), 0, realTo),
+                         123, "100");
+}
+
+void
+Ipv6RipngTest::SendData (Ptr<Socket> socket, std::string to)
+{
+  m_receivedPacket = Create<Packet> ();
+  Simulator::ScheduleWithContext (socket->GetNode ()->GetId (), Seconds (60),
+                                  &Ipv6RipngTest::DoSendData, this, socket, to);
+  Simulator::Stop (Seconds (66));
+  Simulator::Run ();
+}
+
+void
+Ipv6RipngTest::DoRun (void)
+{
+  // Create topology
+
+  Ptr<Node> txNode = CreateObject<Node> ();
+  Ptr<Node> rxNode = CreateObject<Node> ();
+  Ptr<Node> routerA = CreateObject<Node> ();
+  Ptr<Node> routerB = CreateObject<Node> ();
+  Ptr<Node> routerC = CreateObject<Node> ();
+
+  NodeContainer nodes (txNode, rxNode);
+  NodeContainer routers (routerA, routerB, routerC);
+  NodeContainer all (nodes, routers);
+
+  RipNgHelper ripNgRouting;
+  Ipv6ListRoutingHelper listRH;
+  listRH.Add (ripNgRouting, 0);
+  InternetStackHelper internetv6routers;
+  internetv6routers.SetRoutingHelper (listRH);
+  internetv6routers.Install (routers);
+
+  InternetStackHelper internetv6nodes;
+  internetv6nodes.Install (nodes);
+
+  NetDeviceContainer net1;
+  NetDeviceContainer net2;
+  NetDeviceContainer net3;
+  NetDeviceContainer net4;
+
+  // Sender Node
+  Ptr<SimpleNetDevice> txDev;
+  {
+    txDev = CreateObject<SimpleNetDevice> ();
+    txDev->SetAddress (Mac48Address ("00:00:00:00:00:01"));
+    txNode->AddDevice (txDev);
+  }
+  net1.Add (txDev);
+
+  // Router A
+  Ptr<SimpleNetDevice> fwDev1routerA, fwDev2routerA;
+  { // first interface
+    fwDev1routerA = CreateObject<SimpleNetDevice> ();
+    fwDev1routerA->SetAddress (Mac48Address ("00:00:00:00:00:02"));
+    routerA->AddDevice (fwDev1routerA);
+  }
+  net1.Add (fwDev1routerA);
+
+  { // second interface
+    fwDev2routerA = CreateObject<SimpleNetDevice> ();
+    fwDev2routerA->SetAddress (Mac48Address ("00:00:00:00:00:03"));
+    routerA->AddDevice (fwDev2routerA);
+  }
+  net2.Add (fwDev2routerA);
+
+  // Router B
+  Ptr<SimpleNetDevice> fwDev1routerB, fwDev2routerB;
+  { // first interface
+    fwDev1routerB = CreateObject<SimpleNetDevice> ();
+    fwDev1routerB->SetAddress (Mac48Address ("00:00:00:00:00:04"));
+    routerB->AddDevice (fwDev1routerB);
+  }
+  net2.Add (fwDev1routerB);
+
+  { // second interface
+    fwDev2routerB = CreateObject<SimpleNetDevice> ();
+    fwDev2routerB->SetAddress (Mac48Address ("00:00:00:00:00:05"));
+    routerB->AddDevice (fwDev2routerB);
+  }
+  net3.Add (fwDev2routerB);
+
+  // Router C
+  Ptr<SimpleNetDevice> fwDev1routerC, fwDev2routerC;
+  { // first interface
+    fwDev1routerC = CreateObject<SimpleNetDevice> ();
+    fwDev1routerC->SetAddress (Mac48Address ("00:00:00:00:00:06"));
+    routerC->AddDevice (fwDev1routerC);
+  }
+  net3.Add (fwDev1routerC);
+
+  { // second interface
+    fwDev2routerC = CreateObject<SimpleNetDevice> ();
+    fwDev2routerC->SetAddress (Mac48Address ("00:00:00:00:00:07"));
+    routerC->AddDevice (fwDev2routerC);
+  }
+  net4.Add (fwDev2routerC);
+
+  // Rx node
+  Ptr<SimpleNetDevice> rxDev;
+  { // first interface
+    rxDev = CreateObject<SimpleNetDevice> ();
+    rxDev->SetAddress (Mac48Address ("00:00:00:00:00:08"));
+    rxNode->AddDevice (rxDev);
+  }
+  net4.Add (rxDev);
+
+  // link the channels
+  Ptr<SimpleChannel> channel1 = CreateObject<SimpleChannel> ();
+  txDev->SetChannel (channel1);
+  fwDev1routerA->SetChannel (channel1);
+
+  Ptr<SimpleChannel> channel2 = CreateObject<SimpleChannel> ();
+  fwDev2routerA->SetChannel (channel2);
+  fwDev1routerB->SetChannel (channel2);
+
+  Ptr<SimpleChannel> channel3 = CreateObject<SimpleChannel> ();
+  fwDev2routerB->SetChannel (channel3);
+  fwDev1routerC->SetChannel (channel3);
+
+  Ptr<SimpleChannel> channel4 = CreateObject<SimpleChannel> ();
+  fwDev2routerC->SetChannel (channel4);
+  rxDev->SetChannel (channel4);
+
+  // Setup IPv6 addresses and forwarding
+  Ipv6AddressHelper ipv6;
+
+  ipv6.SetBase (Ipv6Address ("2001:1::"), Ipv6Prefix (64));
+  Ipv6InterfaceContainer iic1 = ipv6.Assign (net1);
+  iic1.SetForwarding (1, true);
+  iic1.SetDefaultRouteInAllNodes (1);
+
+  Ipv6InterfaceContainer iic2 = ipv6.AssignWithoutAddress (net2);
+  iic2.SetForwarding (0, true);
+  iic2.SetForwarding (1, true);
+
+  Ipv6InterfaceContainer iic3 = ipv6.AssignWithoutAddress (net3);
+  iic3.SetForwarding (0, true);
+  iic3.SetForwarding (1, true);
+
+  ipv6.SetBase (Ipv6Address ("2001:2::"), Ipv6Prefix (64));
+  Ipv6InterfaceContainer iic4 = ipv6.Assign (net4);
+  iic4.SetForwarding (0, true);
+  iic4.SetDefaultRouteInAllNodes (0);
+
+  // Create the UDP sockets
+  Ptr<SocketFactory> rxSocketFactory = rxNode->GetObject<UdpSocketFactory> ();
+  Ptr<Socket> rxSocket = rxSocketFactory->CreateSocket ();
+  NS_TEST_EXPECT_MSG_EQ (rxSocket->Bind (Inet6SocketAddress (Ipv6Address ("2001:2::200:ff:fe00:8"), 1234)), 0, "trivial");
+  rxSocket->SetRecvCallback (MakeCallback (&Ipv6RipngTest::ReceivePkt, this));
+
+  Ptr<SocketFactory> txSocketFactory = txNode->GetObject<UdpSocketFactory> ();
+  Ptr<Socket> txSocket = txSocketFactory->CreateSocket ();
+  txSocket->SetAllowBroadcast (true);
+
+  // ------ Now the tests ------------
+
+  // Unicast test
+  SendData (txSocket, "2001:2::200:ff:fe00:8");
+  NS_TEST_EXPECT_MSG_EQ (m_receivedPacket->GetSize (), 123, "IPv6 RIPng should work.");
+
+  m_receivedPacket->RemoveAllByteTags ();
+
+  Simulator::Destroy ();
+}
+
+// Ipv6RipngCountToInfinityTest
+
+class Ipv6RipngCountToInfinityTest : public TestCase
+{
+  Ptr<Packet> m_receivedPacket;
+  void DoSendData (Ptr<Socket> socket, std::string to);
+  void SendData (Ptr<Socket> socket, std::string to);
+
+public:
+  virtual void DoRun (void);
+  Ipv6RipngCountToInfinityTest ();
+
+  void ReceivePkt (Ptr<Socket> socket);
+};
+
+Ipv6RipngCountToInfinityTest::Ipv6RipngCountToInfinityTest ()
+  : TestCase ("RIPng counting to infinity")
+{
+}
+
+void Ipv6RipngCountToInfinityTest::ReceivePkt (Ptr<Socket> socket)
+{
+  uint32_t availableData;
+  availableData = socket->GetRxAvailable ();
+  m_receivedPacket = socket->Recv (std::numeric_limits<uint32_t>::max (), 0);
+  NS_ASSERT (availableData == m_receivedPacket->GetSize ());
+  //cast availableData to void, to suppress 'availableData' set but not used
+  //compiler warning
+  (void) availableData;
+}
+
+void
+Ipv6RipngCountToInfinityTest::DoSendData (Ptr<Socket> socket, std::string to)
+{
+  Address realTo = Inet6SocketAddress (Ipv6Address (to.c_str ()), 1234);
+  NS_TEST_EXPECT_MSG_EQ (socket->SendTo (Create<Packet> (123), 0, realTo),
+                         123, "100");
+}
+
+void
+Ipv6RipngCountToInfinityTest::SendData (Ptr<Socket> socket, std::string to)
+{
+  m_receivedPacket = Create<Packet> ();
+  Simulator::ScheduleWithContext (socket->GetNode ()->GetId (), Seconds (60),
+                                  &Ipv6RipngCountToInfinityTest::DoSendData, this, socket, to);
+  Simulator::Stop (Seconds (66));
+  Simulator::Run ();
+}
+
+void
+Ipv6RipngCountToInfinityTest::DoRun (void)
+{
+  // Create topology
+
+  Ptr<Node> txNode = CreateObject<Node> ();
+  Ptr<Node> rxNode = CreateObject<Node> ();
+  Ptr<Node> routerA = CreateObject<Node> ();
+  Ptr<Node> routerB = CreateObject<Node> ();
+  Ptr<Node> routerC = CreateObject<Node> ();
+
+  NodeContainer nodes (txNode, rxNode);
+  NodeContainer routers (routerA, routerB, routerC);
+  NodeContainer all (nodes, routers);
+
+  RipNgHelper ripNgRouting;
+  // Change the router's interface metric to 10, must not send packets (count to infinity)
+  // note: Interface 0 is the loopback.
+  ripNgRouting.SetInterfaceMetric (routerA, 2, 10);
+  ripNgRouting.SetInterfaceMetric (routerB, 1, 10);
+  ripNgRouting.SetInterfaceMetric (routerB, 2, 10);
+  ripNgRouting.SetInterfaceMetric (routerC, 1, 10);
+
+  Ipv6ListRoutingHelper listRH;
+  listRH.Add (ripNgRouting, 0);
+  InternetStackHelper internetv6routers;
+  internetv6routers.SetRoutingHelper (listRH);
+  internetv6routers.Install (routers);
+
+  InternetStackHelper internetv6nodes;
+  internetv6nodes.Install (nodes);
+
+  NetDeviceContainer net1;
+  NetDeviceContainer net2;
+  NetDeviceContainer net3;
+  NetDeviceContainer net4;
+
+  // Sender Node
+  Ptr<SimpleNetDevice> txDev;
+  {
+    txDev = CreateObject<SimpleNetDevice> ();
+    txDev->SetAddress (Mac48Address ("00:00:00:00:00:01"));
+    txNode->AddDevice (txDev);
+  }
+  net1.Add (txDev);
+
+  // Router A
+  Ptr<SimpleNetDevice> fwDev1routerA, fwDev2routerA;
+  { // first interface
+    fwDev1routerA = CreateObject<SimpleNetDevice> ();
+    fwDev1routerA->SetAddress (Mac48Address ("00:00:00:00:00:02"));
+    routerA->AddDevice (fwDev1routerA);
+  }
+  net1.Add (fwDev1routerA);
+
+  { // second interface
+    fwDev2routerA = CreateObject<SimpleNetDevice> ();
+    fwDev2routerA->SetAddress (Mac48Address ("00:00:00:00:00:03"));
+    routerA->AddDevice (fwDev2routerA);
+  }
+  net2.Add (fwDev2routerA);
+
+  // Router B
+  Ptr<SimpleNetDevice> fwDev1routerB, fwDev2routerB;
+  { // first interface
+    fwDev1routerB = CreateObject<SimpleNetDevice> ();
+    fwDev1routerB->SetAddress (Mac48Address ("00:00:00:00:00:04"));
+    routerB->AddDevice (fwDev1routerB);
+  }
+  net2.Add (fwDev1routerB);
+
+  { // second interface
+    fwDev2routerB = CreateObject<SimpleNetDevice> ();
+    fwDev2routerB->SetAddress (Mac48Address ("00:00:00:00:00:05"));
+    routerB->AddDevice (fwDev2routerB);
+  }
+  net3.Add (fwDev2routerB);
+
+  // Router C
+  Ptr<SimpleNetDevice> fwDev1routerC, fwDev2routerC;
+  { // first interface
+    fwDev1routerC = CreateObject<SimpleNetDevice> ();
+    fwDev1routerC->SetAddress (Mac48Address ("00:00:00:00:00:06"));
+    routerC->AddDevice (fwDev1routerC);
+  }
+  net3.Add (fwDev1routerC);
+
+  { // second interface
+    fwDev2routerC = CreateObject<SimpleNetDevice> ();
+    fwDev2routerC->SetAddress (Mac48Address ("00:00:00:00:00:07"));
+    routerC->AddDevice (fwDev2routerC);
+  }
+  net4.Add (fwDev2routerC);
+
+  // Rx node
+  Ptr<SimpleNetDevice> rxDev;
+  { // first interface
+    rxDev = CreateObject<SimpleNetDevice> ();
+    rxDev->SetAddress (Mac48Address ("00:00:00:00:00:08"));
+    rxNode->AddDevice (rxDev);
+  }
+  net4.Add (rxDev);
+
+  // link the channels
+  Ptr<SimpleChannel> channel1 = CreateObject<SimpleChannel> ();
+  txDev->SetChannel (channel1);
+  fwDev1routerA->SetChannel (channel1);
+
+  Ptr<SimpleChannel> channel2 = CreateObject<SimpleChannel> ();
+  fwDev2routerA->SetChannel (channel2);
+  fwDev1routerB->SetChannel (channel2);
+
+  Ptr<SimpleChannel> channel3 = CreateObject<SimpleChannel> ();
+  fwDev2routerB->SetChannel (channel3);
+  fwDev1routerC->SetChannel (channel3);
+
+  Ptr<SimpleChannel> channel4 = CreateObject<SimpleChannel> ();
+  fwDev2routerC->SetChannel (channel4);
+  rxDev->SetChannel (channel4);
+
+  // Setup IPv6 addresses and forwarding
+  Ipv6AddressHelper ipv6;
+
+  ipv6.SetBase (Ipv6Address ("2001:1::"), Ipv6Prefix (64));
+  Ipv6InterfaceContainer iic1 = ipv6.Assign (net1);
+  iic1.SetForwarding (1, true);
+  iic1.SetDefaultRouteInAllNodes (1);
+
+  Ipv6InterfaceContainer iic2 = ipv6.AssignWithoutAddress (net2);
+  iic2.SetForwarding (0, true);
+  iic2.SetForwarding (1, true);
+
+  Ipv6InterfaceContainer iic3 = ipv6.AssignWithoutAddress (net3);
+  iic3.SetForwarding (0, true);
+  iic3.SetForwarding (1, true);
+
+  ipv6.SetBase (Ipv6Address ("2001:2::"), Ipv6Prefix (64));
+  Ipv6InterfaceContainer iic4 = ipv6.Assign (net4);
+  iic4.SetForwarding (0, true);
+  iic4.SetDefaultRouteInAllNodes (0);
+
+  // Create the UDP sockets
+  Ptr<SocketFactory> rxSocketFactory = rxNode->GetObject<UdpSocketFactory> ();
+  Ptr<Socket> rxSocket = rxSocketFactory->CreateSocket ();
+  NS_TEST_EXPECT_MSG_EQ (rxSocket->Bind (Inet6SocketAddress (Ipv6Address ("2001:2::200:ff:fe00:8"), 1234)), 0, "trivial");
+  rxSocket->SetRecvCallback (MakeCallback (&Ipv6RipngCountToInfinityTest::ReceivePkt, this));
+
+  Ptr<SocketFactory> txSocketFactory = txNode->GetObject<UdpSocketFactory> ();
+  Ptr<Socket> txSocket = txSocketFactory->CreateSocket ();
+  txSocket->SetAllowBroadcast (true);
+
+  // ------ Now the tests ------------
+
+  SendData (txSocket, "2001:2::200:ff:fe00:8");
+  NS_TEST_EXPECT_MSG_EQ (m_receivedPacket->GetSize (), 0, "RIPng counting to infinity.");
+
+  Simulator::Destroy ();
+}
+
+// Ipv6RipngSplitHorizonStrategyTest
+
+class Ipv6RipngSplitHorizonStrategyTest : public TestCase
+{
+  RipNg::SplitHorizonType_e m_setStrategy;
+  RipNg::SplitHorizonType_e m_detectedStrategy;
+
+public:
+  virtual void DoRun (void);
+  Ipv6RipngSplitHorizonStrategyTest (RipNg::SplitHorizonType_e strategy);
+
+  void ReceivePktProbe (Ptr<Socket> socket);
+};
+
+Ipv6RipngSplitHorizonStrategyTest::Ipv6RipngSplitHorizonStrategyTest (RipNg::SplitHorizonType_e strategy)
+  : TestCase ("RIPng Split Horizon strategy")
+{
+  m_setStrategy = strategy;
+}
+
+void Ipv6RipngSplitHorizonStrategyTest::ReceivePktProbe (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 ());
+  SocketAddressTag tag;
+  receivedPacketProbe->RemovePacketTag (tag);
+  Ipv6Address senderAddress = Inet6SocketAddress::ConvertFrom (tag.GetAddress ()).GetIpv6 ();
+
+  if (senderAddress == "fe80::200:ff:fe00:4")
+    {
+      RipNgHeader hdr;
+      receivedPacketProbe->RemoveHeader (hdr);
+      std::list<RipNgRte> rtes = hdr.GetRteList ();
+
+      // validate the RTEs before processing
+      for (std::list<RipNgRte>::iterator iter = rtes.begin ();
+          iter != rtes.end (); iter++)
+        {
+          if (iter->GetPrefix () == "2001:1::")
+            {
+              bool correct = false;
+              if (iter->GetRouteMetric () == 16)
+                {
+                  correct = true;
+                  m_detectedStrategy = RipNg::POISON_REVERSE;
+                }
+              else if (iter->GetRouteMetric () == 2)
+                {
+                  correct = true;
+                  m_detectedStrategy = RipNg::NO_SPLIT_HORIZON;
+                }
+              NS_TEST_EXPECT_MSG_EQ (correct, true, "RIPng: unexpected metric value: " << iter->GetRouteMetric ());
+            }
+        }
+    }
+
+  //cast availableData to void, to suppress 'availableData' set but not used
+  //compiler warning
+  (void) availableData;
+}
+
+void
+Ipv6RipngSplitHorizonStrategyTest::DoRun (void)
+{
+  // Create topology
+
+  Ptr<Node> fakeNode = CreateObject<Node> ();
+  Ptr<Node> listener = CreateObject<Node> ();
+
+  Ptr<Node> routerA = CreateObject<Node> ();
+  Ptr<Node> routerB = CreateObject<Node> ();
+
+  NodeContainer listeners (listener, fakeNode);
+  NodeContainer routers (routerA, routerB);
+  NodeContainer all (routers, listeners);
+
+  RipNgHelper ripNgRouting;
+  ripNgRouting.Set ("SplitHorizon", EnumValue (m_setStrategy));
+
+  Ipv6ListRoutingHelper listRH;
+  listRH.Add (ripNgRouting, 0);
+  InternetStackHelper internetv6routers;
+  internetv6routers.SetRoutingHelper (listRH);
+  internetv6routers.Install (routers);
+
+  InternetStackHelper internetv6nodes;
+  internetv6nodes.Install (listeners);
+
+  NetDeviceContainer net0;
+  NetDeviceContainer net1;
+
+  // Fake Node
+  Ptr<SimpleNetDevice> silentDev;
+  {
+    silentDev = CreateObject<SimpleNetDevice> ();
+    silentDev->SetAddress (Mac48Address ("00:00:00:00:00:01"));
+    fakeNode->AddDevice (silentDev);
+  }
+  net0.Add (silentDev);
+
+  // Router A
+  Ptr<SimpleNetDevice> silentDevRouterA, fwDevRouterA;
+  { // silent interface
+    silentDevRouterA = CreateObject<SimpleNetDevice> ();
+    silentDevRouterA->SetAddress (Mac48Address ("00:00:00:00:00:02"));
+    routerA->AddDevice (silentDevRouterA);
+  }
+  net0.Add (silentDevRouterA);
+
+  { // first interface
+    fwDevRouterA = CreateObject<SimpleNetDevice> ();
+    fwDevRouterA->SetAddress (Mac48Address ("00:00:00:00:00:03"));
+    routerA->AddDevice (fwDevRouterA);
+  }
+  net1.Add (fwDevRouterA);
+
+  // Router B
+  Ptr<SimpleNetDevice> fwDevRouterB;
+  { // first interface
+    fwDevRouterB = CreateObject<SimpleNetDevice> ();
+    fwDevRouterB->SetAddress (Mac48Address ("00:00:00:00:00:04"));
+    routerB->AddDevice (fwDevRouterB);
+  }
+  net1.Add (fwDevRouterB);
+
+  // listener A
+  Ptr<SimpleNetDevice> listenerDev;
+  {
+    listenerDev = CreateObject<SimpleNetDevice> ();
+    listenerDev->SetAddress (Mac48Address ("00:00:00:00:00:05"));
+    listener->AddDevice (listenerDev);
+  }
+  net1.Add (listenerDev);
+
+  // link the channels
+  Ptr<SimpleChannel> channel0 = CreateObject<SimpleChannel> ();
+  silentDev->SetChannel (channel0);
+  silentDevRouterA->SetChannel (channel0);
+
+  Ptr<SimpleChannel> channel1 = CreateObject<SimpleChannel> ();
+  fwDevRouterA->SetChannel (channel1);
+  fwDevRouterB->SetChannel (channel1);
+  listenerDev->SetChannel (channel1);
+
+  // Setup IPv6 addresses and forwarding
+  Ipv6AddressHelper ipv6;
+
+  ipv6.SetBase (Ipv6Address ("2001:1::"), Ipv6Prefix (64));
+  Ipv6InterfaceContainer iic0 = ipv6.Assign (net0);
+
+  Ipv6InterfaceContainer iic1 = ipv6.AssignWithoutAddress (net1);
+  iic1.SetForwarding (0, true);
+  iic1.SetForwarding (1, true);
+
+  // Create the UDP sockets
+  Ptr<SocketFactory> rxSocketFactory = listener->GetObject<UdpSocketFactory> ();
+  Ptr<Socket> rxSocket = rxSocketFactory->CreateSocket ();
+  NS_TEST_EXPECT_MSG_EQ (rxSocket->Bind (Inet6SocketAddress (Ipv6Address ("ff02::9"), 521)), 0, "trivial");
+  rxSocket->SetRecvCallback (MakeCallback (&Ipv6RipngSplitHorizonStrategyTest::ReceivePktProbe, this));
+
+  // ------ Now the tests ------------
+
+  // If the strategy is Split Horizon, then no packet will be received.
+  m_detectedStrategy = RipNg::SPLIT_HORIZON;
+
+  Simulator::Stop (Seconds (66));
+  Simulator::Run ();
+  NS_TEST_EXPECT_MSG_EQ (m_detectedStrategy, m_setStrategy, "RIPng counting to infinity.");
+
+  Simulator::Destroy ();
+}
+
+//-----------------------------------------------------------------------------
+//-----------------------------------------------------------------------------
+class Ipv6RipngTestSuite : public TestSuite
+{
+public:
+  Ipv6RipngTestSuite () : TestSuite ("ipv6-ripng", UNIT)
+  {
+    AddTestCase (new Ipv6RipngTest, TestCase::QUICK);
+    AddTestCase (new Ipv6RipngCountToInfinityTest, TestCase::QUICK);
+    AddTestCase (new Ipv6RipngSplitHorizonStrategyTest (RipNg::POISON_REVERSE), TestCase::QUICK);
+    AddTestCase (new Ipv6RipngSplitHorizonStrategyTest (RipNg::SPLIT_HORIZON), TestCase::QUICK);
+    AddTestCase (new Ipv6RipngSplitHorizonStrategyTest (RipNg::NO_SPLIT_HORIZON), TestCase::QUICK);
+  }
+} g_ipv6ripngTestSuite;
diff -Naur ns-3.19/src/internet/test/ipv6-test.cc ns-3.20/src/internet/test/ipv6-test.cc
--- ns-3.19/src/internet/test/ipv6-test.cc	2014-06-17 10:34:00.558635735 -0700
+++ ns-3.20/src/internet/test/ipv6-test.cc	2014-06-17 10:33:13.883996039 -0700
@@ -30,7 +30,7 @@
 #include "ns3/ipv6-l3-protocol.h"
 #include "ns3/icmpv6-l4-protocol.h"
 
-namespace ns3 {
+using namespace ns3;
 
 class Ipv6L3ProtocolTestCase : public TestCase
 {
@@ -189,5 +189,3 @@
     AddTestCase (new Ipv6L3ProtocolTestCase (), TestCase::QUICK);
   }
 } g_ipv6protocolTestSuite;
-
-} // namespace ns3
diff -Naur ns-3.19/src/internet/test/tcp-test.cc ns-3.20/src/internet/test/tcp-test.cc
--- ns-3.19/src/internet/test/tcp-test.cc	2014-06-17 10:34:00.559635727 -0700
+++ ns-3.20/src/internet/test/tcp-test.cc	2014-06-17 10:33:13.883996039 -0700
@@ -108,14 +108,12 @@
   return oss.str ();
 }
 
-#ifdef NS3_LOG_ENABLE
-static std::string GetString (Ptr<Packet> p)
+static inline std::string GetString (Ptr<Packet> p)
 {
   std::ostringstream oss;
   p->CopyData (&oss, p->GetSize ());
   return oss.str ();
 }
-#endif /* NS3_LOG_ENABLE */
 
 TcpTestCase::TcpTestCase (uint32_t totalStreamSize,
                           uint32_t sourceWriteSize,
diff -Naur ns-3.19/src/internet/waf ns-3.20/src/internet/waf
--- ns-3.19/src/internet/waf	2014-06-17 10:34:00.560635719 -0700
+++ ns-3.20/src/internet/waf	1969-12-31 16:00:00.000000000 -0800
@@ -1 +0,0 @@
-exec "`dirname "$0"`"/../../waf "$@"
\ No newline at end of file
diff -Naur ns-3.19/src/internet/wscript ns-3.20/src/internet/wscript
--- ns-3.19/src/internet/wscript	2014-06-17 10:34:00.561635712 -0700
+++ ns-3.20/src/internet/wscript	2014-06-17 10:33:13.885996023 -0700
@@ -192,6 +192,9 @@
         'model/ipv4-packet-probe.cc',
         'model/ipv6-packet-probe.cc',
         'model/ipv6-pmtu-cache.cc',
+        'model/ripng.cc',
+        'model/ripng-header.cc',
+        'helper/ripng-helper.cc',
         ]
 
     internet_test = bld.create_ns3_module_test_library('internet')
@@ -218,7 +221,8 @@
         'test/ipv6-dual-stack-test-suite.cc',
         'test/ipv6-fragmentation-test.cc',
         'test/ipv6-forwarding-test.cc',
-        'test/ipv6-address-helper-test-suite.cc',
+        'test/ipv6-ripng-test.cc',
+     	'test/ipv6-address-helper-test-suite.cc',
         'test/rtt-test.cc',
         ]
     headers = bld(features='ns3header')
@@ -305,6 +309,9 @@
         'model/ipv4-packet-probe.h',
         'model/ipv6-packet-probe.h',
         'model/ipv6-pmtu-cache.h',
+        'model/ripng.h',
+        'model/ripng-header.h',
+        'helper/ripng-helper.h',
        ]
 
     if bld.env['NSC_ENABLED']:
diff -Naur ns-3.19/src/lr-wpan/bindings/callbacks_list.py ns-3.20/src/lr-wpan/bindings/callbacks_list.py
--- ns-3.19/src/lr-wpan/bindings/callbacks_list.py	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.20/src/lr-wpan/bindings/callbacks_list.py	2014-06-17 10:33:13.885996023 -0700
@@ -0,0 +1,12 @@
+callback_classes = [
+    ['void', 'ns3::LrWpanPhyEnumeration', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
+    ['void', 'ns3::LrWpanPhyEnumeration', 'unsigned char', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
+    ['void', 'unsigned int', 'ns3::Ptr<ns3::Packet>', 'unsigned char', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
+    ['void', 'ns3::LrWpanMacState', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
+    ['void', 'ns3::LrWpanPhyEnumeration', 'ns3::LrWpanPibAttributeIdentifier', 'ns3::LrWpanPhyPibAttributes*', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
+    ['void', 'ns3::McpsDataIndicationParams', 'ns3::Ptr<ns3::Packet>', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
+    ['void', 'ns3::McpsDataConfirmParams', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
+    ['void', 'ns3::LrWpanPhyEnumeration', 'ns3::LrWpanPibAttributeIdentifier', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
+    ['bool', 'ns3::Ptr<ns3::NetDevice>', 'ns3::Ptr<ns3::Packet const>', 'unsigned short', 'ns3::Address const&', '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.19/src/lr-wpan/bindings/modulegen__gcc_ILP32.py ns-3.20/src/lr-wpan/bindings/modulegen__gcc_ILP32.py
--- ns-3.19/src/lr-wpan/bindings/modulegen__gcc_ILP32.py	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.20/src/lr-wpan/bindings/modulegen__gcc_ILP32.py	2014-06-17 10:33:13.888996000 -0700
@@ -0,0 +1,5861 @@
+from pybindgen import Module, FileCodeSink, param, retval, cppclass, typehandlers
+
+
+import pybindgen.settings
+import warnings
+
+class ErrorHandler(pybindgen.settings.ErrorHandler):
+    def handle_error(self, wrapper, exception, traceback_):
+        warnings.warn("exception %r in wrapper %s" % (exception, wrapper))
+        return True
+pybindgen.settings.error_handler = ErrorHandler()
+
+
+import sys
+
+def module_init():
+    root_module = Module('ns.lr_wpan', cpp_namespace='::ns3')
+    return root_module
+
+def register_types(module):
+    root_module = module.get_root()
+    
+    ## 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::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::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-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]
+    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')
+    ## trace-helper.h (module 'network'): ns3::AsciiTraceHelper [class]
+    module.add_class('AsciiTraceHelper', import_from_module='ns.network')
+    ## trace-helper.h (module 'network'): ns3::AsciiTraceHelperForDevice [class]
+    module.add_class('AsciiTraceHelperForDevice', allow_subclassing=True, 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]
+    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')
+    ## event-id.h (module 'core'): ns3::EventId [class]
+    module.add_class('EventId', 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')
+    ## lr-wpan-phy.h (module 'lr-wpan'): ns3::LrWpanEdPower [struct]
+    module.add_class('LrWpanEdPower')
+    ## lr-wpan-phy.h (module 'lr-wpan'): ns3::LrWpanPhyDataAndSymbolRates [struct]
+    module.add_class('LrWpanPhyDataAndSymbolRates')
+    ## lr-wpan-phy.h (module 'lr-wpan'): ns3::LrWpanPhyPibAttributes [struct]
+    module.add_class('LrWpanPhyPibAttributes')
+    ## lr-wpan-phy.h (module 'lr-wpan'): ns3::LrWpanPhyPpduHeaderSymbolNumber [struct]
+    module.add_class('LrWpanPhyPpduHeaderSymbolNumber')
+    ## lr-wpan-spectrum-value-helper.h (module 'lr-wpan'): ns3::LrWpanSpectrumValueHelper [class]
+    module.add_class('LrWpanSpectrumValueHelper')
+    ## mac16-address.h (module 'network'): ns3::Mac16Address [class]
+    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'])
+    ## 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]
+    root_module['ns3::Mac64Address'].implicitly_converts_to(root_module['ns3::Address'])
+    ## lr-wpan-mac.h (module 'lr-wpan'): ns3::McpsDataConfirmParams [struct]
+    module.add_class('McpsDataConfirmParams')
+    ## lr-wpan-mac.h (module 'lr-wpan'): ns3::McpsDataIndicationParams [struct]
+    module.add_class('McpsDataIndicationParams')
+    ## lr-wpan-mac.h (module 'lr-wpan'): ns3::McpsDataRequestParams [struct]
+    module.add_class('McpsDataRequestParams')
+    ## 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]
+    module.add_class('NodeContainer', import_from_module='ns.network')
+    ## 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]
+    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')
+    ## pcap-file.h (module 'network'): ns3::PcapFile [class]
+    module.add_class('PcapFile', import_from_module='ns.network')
+    ## 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')
+    ## 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]
+    module.add_class('SequenceNumber8', import_from_module='ns.network')
+    ## 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'))
+    ## simulator.h (module 'core'): ns3::Simulator [class]
+    module.add_class('Simulator', destructor_visibility='private', import_from_module='ns.core')
+    ## 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]
+    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]
+    module.add_enum('AttributeFlag', ['ATTR_GET', 'ATTR_SET', 'ATTR_CONSTRUCT', 'ATTR_SGC'], outer_class=root_module['ns3::TypeId'], import_from_module='ns.core')
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation [struct]
+    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'])
+    ## 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]
+    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]
+    module.add_class('Header', import_from_module='ns.network', parent=root_module['ns3::Chunk'])
+    ## lr-wpan-helper.h (module 'lr-wpan'): ns3::LrWpanHelper [class]
+    module.add_class('LrWpanHelper', parent=[root_module['ns3::PcapHelperForDevice'], root_module['ns3::AsciiTraceHelperForDevice']])
+    ## lr-wpan-lqi-tag.h (module 'lr-wpan'): ns3::LrWpanLqiTag [class]
+    module.add_class('LrWpanLqiTag', parent=root_module['ns3::Tag'])
+    ## lr-wpan-mac-header.h (module 'lr-wpan'): ns3::LrWpanMacHeader [class]
+    module.add_class('LrWpanMacHeader', parent=root_module['ns3::Header'])
+    ## lr-wpan-mac-header.h (module 'lr-wpan'): ns3::LrWpanMacHeader::LrWpanMacType [enumeration]
+    module.add_enum('LrWpanMacType', ['LRWPAN_MAC_BEACON', 'LRWPAN_MAC_DATA', 'LRWPAN_MAC_ACKNOWLEDGMENT', 'LRWPAN_MAC_COMMAND', 'LRWPAN_MAC_RESERVED'], outer_class=root_module['ns3::LrWpanMacHeader'])
+    ## lr-wpan-mac-header.h (module 'lr-wpan'): ns3::LrWpanMacHeader::AddrModeType [enumeration]
+    module.add_enum('AddrModeType', ['NOADDR', 'RESADDR', 'SHORTADDR', 'EXTADDR'], outer_class=root_module['ns3::LrWpanMacHeader'])
+    ## lr-wpan-mac-header.h (module 'lr-wpan'): ns3::LrWpanMacHeader::KeyIdModeType [enumeration]
+    module.add_enum('KeyIdModeType', ['IMPLICIT', 'NOKEYSOURCE', 'SHORTKEYSOURCE', 'LONGKEYSOURCE'], outer_class=root_module['ns3::LrWpanMacHeader'])
+    ## 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]
+    module.add_class('AggregateIterator', import_from_module='ns.core', outer_class=root_module['ns3::Object'])
+    ## pcap-file-wrapper.h (module 'network'): ns3::PcapFileWrapper [class]
+    module.add_class('PcapFileWrapper', import_from_module='ns.network', parent=root_module['ns3::Object'])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::AttributeAccessor, ns3::empty, ns3::DefaultDeleter<ns3::AttributeAccessor> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::AttributeAccessor', 'ns3::empty', 'ns3::DefaultDeleter<ns3::AttributeAccessor>'], 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::AttributeChecker, ns3::empty, ns3::DefaultDeleter<ns3::AttributeChecker> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::AttributeChecker', 'ns3::empty', 'ns3::DefaultDeleter<ns3::AttributeChecker>'], 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::AttributeValue, ns3::empty, ns3::DefaultDeleter<ns3::AttributeValue> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::AttributeValue', 'ns3::empty', 'ns3::DefaultDeleter<ns3::AttributeValue>'], 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::CallbackImplBase, ns3::empty, ns3::DefaultDeleter<ns3::CallbackImplBase> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::CallbackImplBase', 'ns3::empty', 'ns3::DefaultDeleter<ns3::CallbackImplBase>'], 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::EventImpl, ns3::empty, ns3::DefaultDeleter<ns3::EventImpl> > [class]
+    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::LrWpanInterferenceHelper, ns3::empty, ns3::DefaultDeleter<ns3::LrWpanInterferenceHelper> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, template_parameters=['ns3::LrWpanInterferenceHelper', 'ns3::empty', 'ns3::DefaultDeleter<ns3::LrWpanInterferenceHelper>'], 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::OutputStreamWrapper, ns3::empty, ns3::DefaultDeleter<ns3::OutputStreamWrapper> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::OutputStreamWrapper', 'ns3::empty', 'ns3::DefaultDeleter<ns3::OutputStreamWrapper>'], 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::SpectrumSignalParameters, ns3::empty, ns3::DefaultDeleter<ns3::SpectrumSignalParameters> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::SpectrumSignalParameters', 'ns3::empty', 'ns3::DefaultDeleter<ns3::SpectrumSignalParameters>'], 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'))
+    ## spectrum-phy.h (module 'spectrum'): ns3::SpectrumPhy [class]
+    module.add_class('SpectrumPhy', import_from_module='ns.spectrum', parent=root_module['ns3::Object'])
+    ## spectrum-signal-parameters.h (module 'spectrum'): ns3::SpectrumSignalParameters [struct]
+    module.add_class('SpectrumSignalParameters', import_from_module='ns.spectrum', parent=root_module['ns3::SimpleRefCount< ns3::SpectrumSignalParameters, ns3::empty, ns3::DefaultDeleter<ns3::SpectrumSignalParameters> >'])
+    ## nstime.h (module 'core'): ns3::Time [class]
+    module.add_class('Time', import_from_module='ns.core')
+    ## nstime.h (module 'core'): ns3::Time::Unit [enumeration]
+    module.add_enum('Unit', ['Y', 'D', 'H', 'MIN', 'S', 'MS', 'US', 'NS', 'PS', 'FS', 'LAST'], outer_class=root_module['ns3::Time'], import_from_module='ns.core')
+    ## nstime.h (module 'core'): ns3::Time [class]
+    root_module['ns3::Time'].implicitly_converts_to(root_module['ns3::int64x64_t'])
+    ## trace-source-accessor.h (module 'core'): ns3::TraceSourceAccessor [class]
+    module.add_class('TraceSourceAccessor', import_from_module='ns.core', parent=root_module['ns3::SimpleRefCount< ns3::TraceSourceAccessor, ns3::empty, ns3::DefaultDeleter<ns3::TraceSourceAccessor> >'])
+    ## trailer.h (module 'network'): ns3::Trailer [class]
+    module.add_class('Trailer', import_from_module='ns.network', parent=root_module['ns3::Chunk'])
+    ## attribute.h (module 'core'): ns3::AttributeAccessor [class]
+    module.add_class('AttributeAccessor', import_from_module='ns.core', parent=root_module['ns3::SimpleRefCount< ns3::AttributeAccessor, ns3::empty, ns3::DefaultDeleter<ns3::AttributeAccessor> >'])
+    ## attribute.h (module 'core'): ns3::AttributeChecker [class]
+    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> >'])
+    ## 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'])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeValue [class]
+    module.add_class('EmptyAttributeValue', 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> >'])
+    ## 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'])
+    ## lr-wpan-csmaca.h (module 'lr-wpan'): ns3::LrWpanCsmaCa [class]
+    module.add_class('LrWpanCsmaCa', parent=root_module['ns3::Object'])
+    ## lr-wpan-error-model.h (module 'lr-wpan'): ns3::LrWpanErrorModel [class]
+    module.add_class('LrWpanErrorModel', parent=root_module['ns3::Object'])
+    ## lr-wpan-interference-helper.h (module 'lr-wpan'): ns3::LrWpanInterferenceHelper [class]
+    module.add_class('LrWpanInterferenceHelper', parent=root_module['ns3::SimpleRefCount< ns3::LrWpanInterferenceHelper, ns3::empty, ns3::DefaultDeleter<ns3::LrWpanInterferenceHelper> >'])
+    ## lr-wpan-mac.h (module 'lr-wpan'): ns3::LrWpanMac [class]
+    module.add_class('LrWpanMac', parent=root_module['ns3::Object'])
+    ## lr-wpan-mac-trailer.h (module 'lr-wpan'): ns3::LrWpanMacTrailer [class]
+    module.add_class('LrWpanMacTrailer', parent=root_module['ns3::Trailer'])
+    ## lr-wpan-phy.h (module 'lr-wpan'): ns3::LrWpanPhy [class]
+    module.add_class('LrWpanPhy', parent=root_module['ns3::SpectrumPhy'])
+    ## lr-wpan-spectrum-signal-parameters.h (module 'lr-wpan'): ns3::LrWpanSpectrumSignalParameters [struct]
+    module.add_class('LrWpanSpectrumSignalParameters', parent=root_module['ns3::SpectrumSignalParameters'])
+    ## mac16-address.h (module 'network'): ns3::Mac16AddressChecker [class]
+    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'])
+    ## 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]
+    module.add_class('Mac64AddressValue', 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]
+    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'])
+    ## object-factory.h (module 'core'): ns3::ObjectFactoryChecker [class]
+    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'])
+    ## output-stream-wrapper.h (module 'network'): ns3::OutputStreamWrapper [class]
+    module.add_class('OutputStreamWrapper', import_from_module='ns.network', parent=root_module['ns3::SimpleRefCount< ns3::OutputStreamWrapper, ns3::empty, ns3::DefaultDeleter<ns3::OutputStreamWrapper> >'])
+    ## 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> >'])
+    ## nstime.h (module 'core'): ns3::TimeValue [class]
+    module.add_class('TimeValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
+    ## type-id.h (module 'core'): ns3::TypeIdChecker [class]
+    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'])
+    ## lr-wpan-net-device.h (module 'lr-wpan'): ns3::LrWpanNetDevice [class]
+    module.add_class('LrWpanNetDevice', parent=root_module['ns3::NetDevice'])
+    typehandlers.add_type_alias(u'ns3::Callback< void, ns3::LrWpanPhyEnumeration, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', u'ns3::PlmeCcaConfirmCallback')
+    typehandlers.add_type_alias(u'ns3::Callback< void, ns3::LrWpanPhyEnumeration, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >*', u'ns3::PlmeCcaConfirmCallback*')
+    typehandlers.add_type_alias(u'ns3::Callback< void, ns3::LrWpanPhyEnumeration, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >&', u'ns3::PlmeCcaConfirmCallback&')
+    typehandlers.add_type_alias(u'ns3::Callback< void, ns3::LrWpanPhyEnumeration, unsigned char, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', u'ns3::PlmeEdConfirmCallback')
+    typehandlers.add_type_alias(u'ns3::Callback< void, ns3::LrWpanPhyEnumeration, unsigned char, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >*', u'ns3::PlmeEdConfirmCallback*')
+    typehandlers.add_type_alias(u'ns3::Callback< void, ns3::LrWpanPhyEnumeration, unsigned char, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >&', u'ns3::PlmeEdConfirmCallback&')
+    typehandlers.add_type_alias(u'ns3::Callback< void, unsigned int, ns3::Ptr< ns3::Packet >, unsigned char, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', u'ns3::PdDataIndicationCallback')
+    typehandlers.add_type_alias(u'ns3::Callback< void, unsigned int, ns3::Ptr< ns3::Packet >, unsigned char, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >*', u'ns3::PdDataIndicationCallback*')
+    typehandlers.add_type_alias(u'ns3::Callback< void, unsigned int, ns3::Ptr< ns3::Packet >, unsigned char, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >&', u'ns3::PdDataIndicationCallback&')
+    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'ns3::Callback< void, ns3::LrWpanMacState, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', u'ns3::LrWpanMacStateCallback')
+    typehandlers.add_type_alias(u'ns3::Callback< void, ns3::LrWpanMacState, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >*', u'ns3::LrWpanMacStateCallback*')
+    typehandlers.add_type_alias(u'ns3::Callback< void, ns3::LrWpanMacState, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >&', u'ns3::LrWpanMacStateCallback&')
+    typehandlers.add_type_alias(u'ns3::Callback< void, ns3::LrWpanPhyEnumeration, ns3::LrWpanPibAttributeIdentifier, ns3::LrWpanPhyPibAttributes *, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', u'ns3::PlmeGetAttributeConfirmCallback')
+    typehandlers.add_type_alias(u'ns3::Callback< void, ns3::LrWpanPhyEnumeration, ns3::LrWpanPibAttributeIdentifier, ns3::LrWpanPhyPibAttributes *, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >*', u'ns3::PlmeGetAttributeConfirmCallback*')
+    typehandlers.add_type_alias(u'ns3::Callback< void, ns3::LrWpanPhyEnumeration, ns3::LrWpanPibAttributeIdentifier, ns3::LrWpanPhyPibAttributes *, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >&', u'ns3::PlmeGetAttributeConfirmCallback&')
+    typehandlers.add_type_alias(u'ns3::Callback< void, ns3::LrWpanPhyEnumeration, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', u'ns3::PdDataConfirmCallback')
+    typehandlers.add_type_alias(u'ns3::Callback< void, ns3::LrWpanPhyEnumeration, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >*', u'ns3::PdDataConfirmCallback*')
+    typehandlers.add_type_alias(u'ns3::Callback< void, ns3::LrWpanPhyEnumeration, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >&', u'ns3::PdDataConfirmCallback&')
+    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'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&')
+    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'ns3::Callback< void, ns3::LrWpanPhyEnumeration, ns3::LrWpanPibAttributeIdentifier, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', u'ns3::PlmeSetAttributeConfirmCallback')
+    typehandlers.add_type_alias(u'ns3::Callback< void, ns3::LrWpanPhyEnumeration, ns3::LrWpanPibAttributeIdentifier, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >*', u'ns3::PlmeSetAttributeConfirmCallback*')
+    typehandlers.add_type_alias(u'ns3::Callback< void, ns3::LrWpanPhyEnumeration, ns3::LrWpanPibAttributeIdentifier, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >&', u'ns3::PlmeSetAttributeConfirmCallback&')
+    typehandlers.add_type_alias(u'ns3::Callback< void, ns3::LrWpanPhyEnumeration, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', u'ns3::PlmeSetTRXStateConfirmCallback')
+    typehandlers.add_type_alias(u'ns3::Callback< void, ns3::LrWpanPhyEnumeration, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >*', u'ns3::PlmeSetTRXStateConfirmCallback*')
+    typehandlers.add_type_alias(u'ns3::Callback< void, ns3::LrWpanPhyEnumeration, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >&', u'ns3::PlmeSetTRXStateConfirmCallback&')
+    
+    ## Register a nested module for the namespace FatalImpl
+    
+    nested_module = module.add_cpp_namespace('FatalImpl')
+    register_types_ns3_FatalImpl(nested_module)
+    
+    
+    ## Register a nested module for the namespace Hash
+    
+    nested_module = module.add_cpp_namespace('Hash')
+    register_types_ns3_Hash(nested_module)
+    
+
+def register_types_ns3_FatalImpl(module):
+    root_module = module.get_root()
+    
+
+def register_types_ns3_Hash(module):
+    root_module = module.get_root()
+    
+    ## 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(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
+    
+    nested_module = module.add_cpp_namespace('Function')
+    register_types_ns3_Hash_Function(nested_module)
+    
+
+def register_types_ns3_Hash_Function(module):
+    root_module = module.get_root()
+    
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a [class]
+    module.add_class('Fnv1a', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32 [class]
+    module.add_class('Hash32', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64 [class]
+    module.add_class('Hash64', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## 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_methods(root_module):
+    register_Ns3Address_methods(root_module, root_module['ns3::Address'])
+    register_Ns3AsciiTraceHelper_methods(root_module, root_module['ns3::AsciiTraceHelper'])
+    register_Ns3AsciiTraceHelperForDevice_methods(root_module, root_module['ns3::AsciiTraceHelperForDevice'])
+    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_Ns3EventId_methods(root_module, root_module['ns3::EventId'])
+    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_Ns3LrWpanEdPower_methods(root_module, root_module['ns3::LrWpanEdPower'])
+    register_Ns3LrWpanPhyDataAndSymbolRates_methods(root_module, root_module['ns3::LrWpanPhyDataAndSymbolRates'])
+    register_Ns3LrWpanPhyPibAttributes_methods(root_module, root_module['ns3::LrWpanPhyPibAttributes'])
+    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_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'])
+    register_Ns3McpsDataRequestParams_methods(root_module, root_module['ns3::McpsDataRequestParams'])
+    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'])
+    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_Ns3PcapFile_methods(root_module, root_module['ns3::PcapFile'])
+    register_Ns3PcapHelper_methods(root_module, root_module['ns3::PcapHelper'])
+    register_Ns3PcapHelperForDevice_methods(root_module, root_module['ns3::PcapHelperForDevice'])
+    register_Ns3SequenceNumber8_methods(root_module, root_module['ns3::SequenceNumber8'])
+    register_Ns3SimpleRefCount__Ns3Object_Ns3ObjectBase_Ns3ObjectDeleter_methods(root_module, root_module['ns3::SimpleRefCount< ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter >'])
+    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'])
+    register_Ns3Empty_methods(root_module, root_module['ns3::empty'])
+    register_Ns3Int64x64_t_methods(root_module, root_module['ns3::int64x64_t'])
+    register_Ns3Chunk_methods(root_module, root_module['ns3::Chunk'])
+    register_Ns3Header_methods(root_module, root_module['ns3::Header'])
+    register_Ns3LrWpanHelper_methods(root_module, root_module['ns3::LrWpanHelper'])
+    register_Ns3LrWpanLqiTag_methods(root_module, root_module['ns3::LrWpanLqiTag'])
+    register_Ns3LrWpanMacHeader_methods(root_module, root_module['ns3::LrWpanMacHeader'])
+    register_Ns3Object_methods(root_module, root_module['ns3::Object'])
+    register_Ns3ObjectAggregateIterator_methods(root_module, root_module['ns3::Object::AggregateIterator'])
+    register_Ns3PcapFileWrapper_methods(root_module, root_module['ns3::PcapFileWrapper'])
+    register_Ns3SimpleRefCount__Ns3AttributeAccessor_Ns3Empty_Ns3DefaultDeleter__lt__ns3AttributeAccessor__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::AttributeAccessor, ns3::empty, ns3::DefaultDeleter<ns3::AttributeAccessor> >'])
+    register_Ns3SimpleRefCount__Ns3AttributeChecker_Ns3Empty_Ns3DefaultDeleter__lt__ns3AttributeChecker__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::AttributeChecker, ns3::empty, ns3::DefaultDeleter<ns3::AttributeChecker> >'])
+    register_Ns3SimpleRefCount__Ns3AttributeValue_Ns3Empty_Ns3DefaultDeleter__lt__ns3AttributeValue__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::AttributeValue, ns3::empty, ns3::DefaultDeleter<ns3::AttributeValue> >'])
+    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__Ns3LrWpanInterferenceHelper_Ns3Empty_Ns3DefaultDeleter__lt__ns3LrWpanInterferenceHelper__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::LrWpanInterferenceHelper, ns3::empty, ns3::DefaultDeleter<ns3::LrWpanInterferenceHelper> >'])
+    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__Ns3OutputStreamWrapper_Ns3Empty_Ns3DefaultDeleter__lt__ns3OutputStreamWrapper__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::OutputStreamWrapper, ns3::empty, ns3::DefaultDeleter<ns3::OutputStreamWrapper> >'])
+    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__Ns3SpectrumSignalParameters_Ns3Empty_Ns3DefaultDeleter__lt__ns3SpectrumSignalParameters__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::SpectrumSignalParameters, ns3::empty, ns3::DefaultDeleter<ns3::SpectrumSignalParameters> >'])
+    register_Ns3SimpleRefCount__Ns3TraceSourceAccessor_Ns3Empty_Ns3DefaultDeleter__lt__ns3TraceSourceAccessor__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::TraceSourceAccessor, ns3::empty, ns3::DefaultDeleter<ns3::TraceSourceAccessor> >'])
+    register_Ns3SpectrumPhy_methods(root_module, root_module['ns3::SpectrumPhy'])
+    register_Ns3SpectrumSignalParameters_methods(root_module, root_module['ns3::SpectrumSignalParameters'])
+    register_Ns3Time_methods(root_module, root_module['ns3::Time'])
+    register_Ns3TraceSourceAccessor_methods(root_module, root_module['ns3::TraceSourceAccessor'])
+    register_Ns3Trailer_methods(root_module, root_module['ns3::Trailer'])
+    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_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_Ns3EmptyAttributeValue_methods(root_module, root_module['ns3::EmptyAttributeValue'])
+    register_Ns3EventImpl_methods(root_module, root_module['ns3::EventImpl'])
+    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_Ns3LrWpanCsmaCa_methods(root_module, root_module['ns3::LrWpanCsmaCa'])
+    register_Ns3LrWpanErrorModel_methods(root_module, root_module['ns3::LrWpanErrorModel'])
+    register_Ns3LrWpanInterferenceHelper_methods(root_module, root_module['ns3::LrWpanInterferenceHelper'])
+    register_Ns3LrWpanMac_methods(root_module, root_module['ns3::LrWpanMac'])
+    register_Ns3LrWpanMacTrailer_methods(root_module, root_module['ns3::LrWpanMacTrailer'])
+    register_Ns3LrWpanPhy_methods(root_module, root_module['ns3::LrWpanPhy'])
+    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_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'])
+    register_Ns3NixVector_methods(root_module, root_module['ns3::NixVector'])
+    register_Ns3Node_methods(root_module, root_module['ns3::Node'])
+    register_Ns3ObjectFactoryChecker_methods(root_module, root_module['ns3::ObjectFactoryChecker'])
+    register_Ns3ObjectFactoryValue_methods(root_module, root_module['ns3::ObjectFactoryValue'])
+    register_Ns3OutputStreamWrapper_methods(root_module, root_module['ns3::OutputStreamWrapper'])
+    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_Ns3LrWpanNetDevice_methods(root_module, root_module['ns3::LrWpanNetDevice'])
+    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'])
+    register_Ns3HashFunctionHash64_methods(root_module, root_module['ns3::Hash::Function::Hash64'])
+    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_Ns3AsciiTraceHelper_methods(root_module, cls):
+    ## trace-helper.h (module 'network'): ns3::AsciiTraceHelper::AsciiTraceHelper(ns3::AsciiTraceHelper const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::AsciiTraceHelper const &', 'arg0')])
+    ## trace-helper.h (module 'network'): ns3::AsciiTraceHelper::AsciiTraceHelper() [constructor]
+    cls.add_constructor([])
+    ## trace-helper.h (module 'network'): ns3::Ptr<ns3::OutputStreamWrapper> ns3::AsciiTraceHelper::CreateFileStream(std::string filename, std::_Ios_Openmode filemode=std::ios_base::out) [member function]
+    cls.add_method('CreateFileStream', 
+                   'ns3::Ptr< ns3::OutputStreamWrapper >', 
+                   [param('std::string', 'filename'), param('std::_Ios_Openmode', 'filemode', default_value='std::ios_base::out')])
+    ## trace-helper.h (module 'network'): static void ns3::AsciiTraceHelper::DefaultDequeueSinkWithContext(ns3::Ptr<ns3::OutputStreamWrapper> file, std::string context, ns3::Ptr<const ns3::Packet> p) [member function]
+    cls.add_method('DefaultDequeueSinkWithContext', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'file'), param('std::string', 'context'), param('ns3::Ptr< ns3::Packet const >', 'p')], 
+                   is_static=True)
+    ## trace-helper.h (module 'network'): static void ns3::AsciiTraceHelper::DefaultDequeueSinkWithoutContext(ns3::Ptr<ns3::OutputStreamWrapper> file, ns3::Ptr<const ns3::Packet> p) [member function]
+    cls.add_method('DefaultDequeueSinkWithoutContext', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'file'), param('ns3::Ptr< ns3::Packet const >', 'p')], 
+                   is_static=True)
+    ## trace-helper.h (module 'network'): static void ns3::AsciiTraceHelper::DefaultDropSinkWithContext(ns3::Ptr<ns3::OutputStreamWrapper> file, std::string context, ns3::Ptr<const ns3::Packet> p) [member function]
+    cls.add_method('DefaultDropSinkWithContext', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'file'), param('std::string', 'context'), param('ns3::Ptr< ns3::Packet const >', 'p')], 
+                   is_static=True)
+    ## trace-helper.h (module 'network'): static void ns3::AsciiTraceHelper::DefaultDropSinkWithoutContext(ns3::Ptr<ns3::OutputStreamWrapper> file, ns3::Ptr<const ns3::Packet> p) [member function]
+    cls.add_method('DefaultDropSinkWithoutContext', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'file'), param('ns3::Ptr< ns3::Packet const >', 'p')], 
+                   is_static=True)
+    ## trace-helper.h (module 'network'): static void ns3::AsciiTraceHelper::DefaultEnqueueSinkWithContext(ns3::Ptr<ns3::OutputStreamWrapper> file, std::string context, ns3::Ptr<const ns3::Packet> p) [member function]
+    cls.add_method('DefaultEnqueueSinkWithContext', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'file'), param('std::string', 'context'), param('ns3::Ptr< ns3::Packet const >', 'p')], 
+                   is_static=True)
+    ## trace-helper.h (module 'network'): static void ns3::AsciiTraceHelper::DefaultEnqueueSinkWithoutContext(ns3::Ptr<ns3::OutputStreamWrapper> file, ns3::Ptr<const ns3::Packet> p) [member function]
+    cls.add_method('DefaultEnqueueSinkWithoutContext', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'file'), param('ns3::Ptr< ns3::Packet const >', 'p')], 
+                   is_static=True)
+    ## trace-helper.h (module 'network'): static void ns3::AsciiTraceHelper::DefaultReceiveSinkWithContext(ns3::Ptr<ns3::OutputStreamWrapper> file, std::string context, ns3::Ptr<const ns3::Packet> p) [member function]
+    cls.add_method('DefaultReceiveSinkWithContext', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'file'), param('std::string', 'context'), param('ns3::Ptr< ns3::Packet const >', 'p')], 
+                   is_static=True)
+    ## trace-helper.h (module 'network'): static void ns3::AsciiTraceHelper::DefaultReceiveSinkWithoutContext(ns3::Ptr<ns3::OutputStreamWrapper> file, ns3::Ptr<const ns3::Packet> p) [member function]
+    cls.add_method('DefaultReceiveSinkWithoutContext', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'file'), param('ns3::Ptr< ns3::Packet const >', 'p')], 
+                   is_static=True)
+    ## trace-helper.h (module 'network'): std::string ns3::AsciiTraceHelper::GetFilenameFromDevice(std::string prefix, ns3::Ptr<ns3::NetDevice> device, bool useObjectNames=true) [member function]
+    cls.add_method('GetFilenameFromDevice', 
+                   'std::string', 
+                   [param('std::string', 'prefix'), param('ns3::Ptr< ns3::NetDevice >', 'device'), param('bool', 'useObjectNames', default_value='true')])
+    ## trace-helper.h (module 'network'): std::string ns3::AsciiTraceHelper::GetFilenameFromInterfacePair(std::string prefix, ns3::Ptr<ns3::Object> object, uint32_t interface, bool useObjectNames=true) [member function]
+    cls.add_method('GetFilenameFromInterfacePair', 
+                   'std::string', 
+                   [param('std::string', 'prefix'), param('ns3::Ptr< ns3::Object >', 'object'), param('uint32_t', 'interface'), param('bool', 'useObjectNames', default_value='true')])
+    return
+
+def register_Ns3AsciiTraceHelperForDevice_methods(root_module, cls):
+    ## trace-helper.h (module 'network'): ns3::AsciiTraceHelperForDevice::AsciiTraceHelperForDevice(ns3::AsciiTraceHelperForDevice const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::AsciiTraceHelperForDevice const &', 'arg0')])
+    ## trace-helper.h (module 'network'): ns3::AsciiTraceHelperForDevice::AsciiTraceHelperForDevice() [constructor]
+    cls.add_constructor([])
+    ## trace-helper.h (module 'network'): void ns3::AsciiTraceHelperForDevice::EnableAscii(std::string prefix, ns3::Ptr<ns3::NetDevice> nd, bool explicitFilename=false) [member function]
+    cls.add_method('EnableAscii', 
+                   'void', 
+                   [param('std::string', 'prefix'), param('ns3::Ptr< ns3::NetDevice >', 'nd'), param('bool', 'explicitFilename', default_value='false')])
+    ## trace-helper.h (module 'network'): void ns3::AsciiTraceHelperForDevice::EnableAscii(ns3::Ptr<ns3::OutputStreamWrapper> stream, ns3::Ptr<ns3::NetDevice> nd) [member function]
+    cls.add_method('EnableAscii', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream'), param('ns3::Ptr< ns3::NetDevice >', 'nd')])
+    ## trace-helper.h (module 'network'): void ns3::AsciiTraceHelperForDevice::EnableAscii(std::string prefix, std::string ndName, bool explicitFilename=false) [member function]
+    cls.add_method('EnableAscii', 
+                   'void', 
+                   [param('std::string', 'prefix'), param('std::string', 'ndName'), param('bool', 'explicitFilename', default_value='false')])
+    ## trace-helper.h (module 'network'): void ns3::AsciiTraceHelperForDevice::EnableAscii(ns3::Ptr<ns3::OutputStreamWrapper> stream, std::string ndName) [member function]
+    cls.add_method('EnableAscii', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream'), param('std::string', 'ndName')])
+    ## trace-helper.h (module 'network'): void ns3::AsciiTraceHelperForDevice::EnableAscii(std::string prefix, ns3::NetDeviceContainer d) [member function]
+    cls.add_method('EnableAscii', 
+                   'void', 
+                   [param('std::string', 'prefix'), param('ns3::NetDeviceContainer', 'd')])
+    ## trace-helper.h (module 'network'): void ns3::AsciiTraceHelperForDevice::EnableAscii(ns3::Ptr<ns3::OutputStreamWrapper> stream, ns3::NetDeviceContainer d) [member function]
+    cls.add_method('EnableAscii', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream'), param('ns3::NetDeviceContainer', 'd')])
+    ## trace-helper.h (module 'network'): void ns3::AsciiTraceHelperForDevice::EnableAscii(std::string prefix, ns3::NodeContainer n) [member function]
+    cls.add_method('EnableAscii', 
+                   'void', 
+                   [param('std::string', 'prefix'), param('ns3::NodeContainer', 'n')])
+    ## trace-helper.h (module 'network'): void ns3::AsciiTraceHelperForDevice::EnableAscii(ns3::Ptr<ns3::OutputStreamWrapper> stream, ns3::NodeContainer n) [member function]
+    cls.add_method('EnableAscii', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream'), param('ns3::NodeContainer', 'n')])
+    ## trace-helper.h (module 'network'): void ns3::AsciiTraceHelperForDevice::EnableAscii(std::string prefix, uint32_t nodeid, uint32_t deviceid, bool explicitFilename) [member function]
+    cls.add_method('EnableAscii', 
+                   'void', 
+                   [param('std::string', 'prefix'), param('uint32_t', 'nodeid'), param('uint32_t', 'deviceid'), param('bool', 'explicitFilename')])
+    ## trace-helper.h (module 'network'): void ns3::AsciiTraceHelperForDevice::EnableAscii(ns3::Ptr<ns3::OutputStreamWrapper> stream, uint32_t nodeid, uint32_t deviceid) [member function]
+    cls.add_method('EnableAscii', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream'), param('uint32_t', 'nodeid'), param('uint32_t', 'deviceid')])
+    ## trace-helper.h (module 'network'): void ns3::AsciiTraceHelperForDevice::EnableAsciiAll(std::string prefix) [member function]
+    cls.add_method('EnableAsciiAll', 
+                   'void', 
+                   [param('std::string', 'prefix')])
+    ## trace-helper.h (module 'network'): void ns3::AsciiTraceHelperForDevice::EnableAsciiAll(ns3::Ptr<ns3::OutputStreamWrapper> stream) [member function]
+    cls.add_method('EnableAsciiAll', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream')])
+    ## trace-helper.h (module 'network'): void ns3::AsciiTraceHelperForDevice::EnableAsciiInternal(ns3::Ptr<ns3::OutputStreamWrapper> stream, std::string prefix, ns3::Ptr<ns3::NetDevice> nd, bool explicitFilename) [member function]
+    cls.add_method('EnableAsciiInternal', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream'), param('std::string', 'prefix'), param('ns3::Ptr< ns3::NetDevice >', 'nd'), param('bool', 'explicitFilename')], 
+                   is_pure_virtual=True, is_virtual=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')])
+    ## attribute-construction-list.h (module 'core'): ns3::AttributeConstructionList::AttributeConstructionList() [constructor]
+    cls.add_constructor([])
+    ## attribute-construction-list.h (module 'core'): void ns3::AttributeConstructionList::Add(std::string name, ns3::Ptr<ns3::AttributeChecker const> checker, ns3::Ptr<ns3::AttributeValue> value) [member function]
+    cls.add_method('Add', 
+                   'void', 
+                   [param('std::string', 'name'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker'), param('ns3::Ptr< ns3::AttributeValue >', 'value')])
+    ## attribute-construction-list.h (module 'core'): std::_List_const_iterator<ns3::AttributeConstructionList::Item> ns3::AttributeConstructionList::Begin() const [member function]
+    cls.add_method('Begin', 
+                   'std::_List_const_iterator< ns3::AttributeConstructionList::Item >', 
+                   [], 
+                   is_const=True)
+    ## attribute-construction-list.h (module 'core'): std::_List_const_iterator<ns3::AttributeConstructionList::Item> ns3::AttributeConstructionList::End() const [member function]
+    cls.add_method('End', 
+                   'std::_List_const_iterator< ns3::AttributeConstructionList::Item >', 
+                   [], 
+                   is_const=True)
+    ## attribute-construction-list.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::AttributeConstructionList::Find(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
+    cls.add_method('Find', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_const=True)
+    return
+
+def register_Ns3AttributeConstructionListItem_methods(root_module, cls):
+    ## attribute-construction-list.h (module 'core'): ns3::AttributeConstructionList::Item::Item() [constructor]
+    cls.add_constructor([])
+    ## attribute-construction-list.h (module 'core'): ns3::AttributeConstructionList::Item::Item(ns3::AttributeConstructionList::Item const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::AttributeConstructionList::Item const &', 'arg0')])
+    ## attribute-construction-list.h (module 'core'): ns3::AttributeConstructionList::Item::checker [variable]
+    cls.add_instance_attribute('checker', 'ns3::Ptr< ns3::AttributeChecker const >', is_const=False)
+    ## attribute-construction-list.h (module 'core'): ns3::AttributeConstructionList::Item::name [variable]
+    cls.add_instance_attribute('name', 'std::string', is_const=False)
+    ## attribute-construction-list.h (module 'core'): ns3::AttributeConstructionList::Item::value [variable]
+    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')])
+    ## callback.h (module 'core'): ns3::CallbackBase::CallbackBase() [constructor]
+    cls.add_constructor([])
+    ## callback.h (module 'core'): ns3::Ptr<ns3::CallbackImplBase> ns3::CallbackBase::GetImpl() const [member function]
+    cls.add_method('GetImpl', 
+                   'ns3::Ptr< ns3::CallbackImplBase >', 
+                   [], 
+                   is_const=True)
+    ## 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):
+    cls.add_binary_comparison_operator('!=')
+    cls.add_binary_comparison_operator('==')
+    ## event-id.h (module 'core'): ns3::EventId::EventId(ns3::EventId const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EventId const &', 'arg0')])
+    ## event-id.h (module 'core'): ns3::EventId::EventId() [constructor]
+    cls.add_constructor([])
+    ## event-id.h (module 'core'): ns3::EventId::EventId(ns3::Ptr<ns3::EventImpl> const & impl, uint64_t ts, uint32_t context, uint32_t uid) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::EventImpl > const &', 'impl'), param('uint64_t', 'ts'), param('uint32_t', 'context'), param('uint32_t', 'uid')])
+    ## event-id.h (module 'core'): void ns3::EventId::Cancel() [member function]
+    cls.add_method('Cancel', 
+                   'void', 
+                   [])
+    ## event-id.h (module 'core'): uint32_t ns3::EventId::GetContext() const [member function]
+    cls.add_method('GetContext', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## event-id.h (module 'core'): uint64_t ns3::EventId::GetTs() const [member function]
+    cls.add_method('GetTs', 
+                   'uint64_t', 
+                   [], 
+                   is_const=True)
+    ## event-id.h (module 'core'): uint32_t ns3::EventId::GetUid() const [member function]
+    cls.add_method('GetUid', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## event-id.h (module 'core'): bool ns3::EventId::IsExpired() const [member function]
+    cls.add_method('IsExpired', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## event-id.h (module 'core'): bool ns3::EventId::IsRunning() const [member function]
+    cls.add_method('IsRunning', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## event-id.h (module 'core'): ns3::EventImpl * ns3::EventId::PeekEventImpl() const [member function]
+    cls.add_method('PeekEventImpl', 
+                   'ns3::EventImpl *', 
+                   [], 
+                   is_const=True)
+    return
+
+def register_Ns3Hasher_methods(root_module, cls):
+    ## hash.h (module 'core'): ns3::Hasher::Hasher(ns3::Hasher const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hasher const &', 'arg0')])
+    ## hash.h (module 'core'): ns3::Hasher::Hasher() [constructor]
+    cls.add_constructor([])
+    ## hash.h (module 'core'): ns3::Hasher::Hasher(ns3::Ptr<ns3::Hash::Implementation> hp) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::Hash::Implementation >', 'hp')])
+    ## hash.h (module 'core'): uint32_t ns3::Hasher::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')])
+    ## hash.h (module 'core'): uint32_t ns3::Hasher::GetHash32(std::string const s) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('std::string const', 's')])
+    ## hash.h (module 'core'): uint64_t ns3::Hasher::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')])
+    ## hash.h (module 'core'): uint64_t ns3::Hasher::GetHash64(std::string const s) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('std::string const', 's')])
+    ## hash.h (module 'core'): ns3::Hasher & ns3::Hasher::clear() [member function]
+    cls.add_method('clear', 
+                   'ns3::Hasher &', 
+                   [])
+    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_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::averagePower [variable]
+    cls.add_instance_attribute('averagePower', 'double', is_const=False)
+    ## lr-wpan-phy.h (module 'lr-wpan'): ns3::LrWpanEdPower::lastUpdate [variable]
+    cls.add_instance_attribute('lastUpdate', 'ns3::Time', is_const=False)
+    ## lr-wpan-phy.h (module 'lr-wpan'): ns3::LrWpanEdPower::measurementLength [variable]
+    cls.add_instance_attribute('measurementLength', 'ns3::Time', is_const=False)
+    return
+
+def register_Ns3LrWpanPhyDataAndSymbolRates_methods(root_module, cls):
+    ## lr-wpan-phy.h (module 'lr-wpan'): ns3::LrWpanPhyDataAndSymbolRates::LrWpanPhyDataAndSymbolRates() [constructor]
+    cls.add_constructor([])
+    ## lr-wpan-phy.h (module 'lr-wpan'): ns3::LrWpanPhyDataAndSymbolRates::LrWpanPhyDataAndSymbolRates(ns3::LrWpanPhyDataAndSymbolRates const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::LrWpanPhyDataAndSymbolRates const &', 'arg0')])
+    ## lr-wpan-phy.h (module 'lr-wpan'): ns3::LrWpanPhyDataAndSymbolRates::bitRate [variable]
+    cls.add_instance_attribute('bitRate', 'double', is_const=False)
+    ## lr-wpan-phy.h (module 'lr-wpan'): ns3::LrWpanPhyDataAndSymbolRates::symbolRate [variable]
+    cls.add_instance_attribute('symbolRate', 'double', is_const=False)
+    return
+
+def register_Ns3LrWpanPhyPibAttributes_methods(root_module, cls):
+    ## lr-wpan-phy.h (module 'lr-wpan'): ns3::LrWpanPhyPibAttributes::LrWpanPhyPibAttributes() [constructor]
+    cls.add_constructor([])
+    ## lr-wpan-phy.h (module 'lr-wpan'): ns3::LrWpanPhyPibAttributes::LrWpanPhyPibAttributes(ns3::LrWpanPhyPibAttributes const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::LrWpanPhyPibAttributes const &', 'arg0')])
+    ## lr-wpan-phy.h (module 'lr-wpan'): ns3::LrWpanPhyPibAttributes::phyCCAMode [variable]
+    cls.add_instance_attribute('phyCCAMode', 'uint8_t', is_const=False)
+    ## lr-wpan-phy.h (module 'lr-wpan'): ns3::LrWpanPhyPibAttributes::phyChannelsSupported [variable]
+    cls.add_instance_attribute('phyChannelsSupported', 'uint32_t [ 32 ]', is_const=False)
+    ## lr-wpan-phy.h (module 'lr-wpan'): ns3::LrWpanPhyPibAttributes::phyCurrentChannel [variable]
+    cls.add_instance_attribute('phyCurrentChannel', 'uint8_t', is_const=False)
+    ## lr-wpan-phy.h (module 'lr-wpan'): ns3::LrWpanPhyPibAttributes::phyCurrentPage [variable]
+    cls.add_instance_attribute('phyCurrentPage', 'uint32_t', is_const=False)
+    ## lr-wpan-phy.h (module 'lr-wpan'): ns3::LrWpanPhyPibAttributes::phyMaxFrameDuration [variable]
+    cls.add_instance_attribute('phyMaxFrameDuration', 'uint32_t', is_const=False)
+    ## lr-wpan-phy.h (module 'lr-wpan'): ns3::LrWpanPhyPibAttributes::phySHRDuration [variable]
+    cls.add_instance_attribute('phySHRDuration', 'uint32_t', is_const=False)
+    ## lr-wpan-phy.h (module 'lr-wpan'): ns3::LrWpanPhyPibAttributes::phySymbolsPerOctet [variable]
+    cls.add_instance_attribute('phySymbolsPerOctet', 'double', is_const=False)
+    ## lr-wpan-phy.h (module 'lr-wpan'): ns3::LrWpanPhyPibAttributes::phyTransmitPower [variable]
+    cls.add_instance_attribute('phyTransmitPower', 'uint8_t', is_const=False)
+    return
+
+def register_Ns3LrWpanPhyPpduHeaderSymbolNumber_methods(root_module, cls):
+    ## lr-wpan-phy.h (module 'lr-wpan'): ns3::LrWpanPhyPpduHeaderSymbolNumber::LrWpanPhyPpduHeaderSymbolNumber() [constructor]
+    cls.add_constructor([])
+    ## lr-wpan-phy.h (module 'lr-wpan'): ns3::LrWpanPhyPpduHeaderSymbolNumber::LrWpanPhyPpduHeaderSymbolNumber(ns3::LrWpanPhyPpduHeaderSymbolNumber const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::LrWpanPhyPpduHeaderSymbolNumber const &', 'arg0')])
+    ## lr-wpan-phy.h (module 'lr-wpan'): ns3::LrWpanPhyPpduHeaderSymbolNumber::phr [variable]
+    cls.add_instance_attribute('phr', 'double', is_const=False)
+    ## lr-wpan-phy.h (module 'lr-wpan'): ns3::LrWpanPhyPpduHeaderSymbolNumber::shrPreamble [variable]
+    cls.add_instance_attribute('shrPreamble', 'double', is_const=False)
+    ## lr-wpan-phy.h (module 'lr-wpan'): ns3::LrWpanPhyPpduHeaderSymbolNumber::shrSfd [variable]
+    cls.add_instance_attribute('shrSfd', 'double', is_const=False)
+    return
+
+def register_Ns3LrWpanSpectrumValueHelper_methods(root_module, cls):
+    ## lr-wpan-spectrum-value-helper.h (module 'lr-wpan'): ns3::LrWpanSpectrumValueHelper::LrWpanSpectrumValueHelper(ns3::LrWpanSpectrumValueHelper const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::LrWpanSpectrumValueHelper const &', 'arg0')])
+    ## lr-wpan-spectrum-value-helper.h (module 'lr-wpan'): ns3::LrWpanSpectrumValueHelper::LrWpanSpectrumValueHelper() [constructor]
+    cls.add_constructor([])
+    ## lr-wpan-spectrum-value-helper.h (module 'lr-wpan'): ns3::Ptr<ns3::SpectrumValue> ns3::LrWpanSpectrumValueHelper::CreateNoisePowerSpectralDensity(uint32_t channel) [member function]
+    cls.add_method('CreateNoisePowerSpectralDensity', 
+                   'ns3::Ptr< ns3::SpectrumValue >', 
+                   [param('uint32_t', 'channel')])
+    ## lr-wpan-spectrum-value-helper.h (module 'lr-wpan'): ns3::Ptr<ns3::SpectrumValue> ns3::LrWpanSpectrumValueHelper::CreateTxPowerSpectralDensity(double txPower, uint32_t channel) [member function]
+    cls.add_method('CreateTxPowerSpectralDensity', 
+                   'ns3::Ptr< ns3::SpectrumValue >', 
+                   [param('double', 'txPower'), param('uint32_t', 'channel')])
+    ## lr-wpan-spectrum-value-helper.h (module 'lr-wpan'): static double ns3::LrWpanSpectrumValueHelper::TotalAvgPower(ns3::Ptr<ns3::SpectrumValue const> psd) [member function]
+    cls.add_method('TotalAvgPower', 
+                   'double', 
+                   [param('ns3::Ptr< ns3::SpectrumValue const >', 'psd')], 
+                   is_static=True)
+    return
+
+def register_Ns3Mac16Address_methods(root_module, cls):
+    cls.add_binary_comparison_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')])
+    ## mac16-address.h (module 'network'): ns3::Mac16Address::Mac16Address() [constructor]
+    cls.add_constructor([])
+    ## mac16-address.h (module 'network'): ns3::Mac16Address::Mac16Address(char const * str) [constructor]
+    cls.add_constructor([param('char const *', 'str')])
+    ## mac16-address.h (module 'network'): static ns3::Mac16Address ns3::Mac16Address::Allocate() [member function]
+    cls.add_method('Allocate', 
+                   'ns3::Mac16Address', 
+                   [], 
+                   is_static=True)
+    ## mac16-address.h (module 'network'): static ns3::Mac16Address ns3::Mac16Address::ConvertFrom(ns3::Address const & address) [member function]
+    cls.add_method('ConvertFrom', 
+                   'ns3::Mac16Address', 
+                   [param('ns3::Address const &', 'address')], 
+                   is_static=True)
+    ## mac16-address.h (module 'network'): void ns3::Mac16Address::CopyFrom(uint8_t const * buffer) [member function]
+    cls.add_method('CopyFrom', 
+                   'void', 
+                   [param('uint8_t const *', 'buffer')])
+    ## mac16-address.h (module 'network'): void ns3::Mac16Address::CopyTo(uint8_t * buffer) const [member function]
+    cls.add_method('CopyTo', 
+                   'void', 
+                   [param('uint8_t *', 'buffer')], 
+                   is_const=True)
+    ## mac16-address.h (module 'network'): static bool ns3::Mac16Address::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('!=')
+    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')])
+    ## mac64-address.h (module 'network'): ns3::Mac64Address::Mac64Address() [constructor]
+    cls.add_constructor([])
+    ## mac64-address.h (module 'network'): ns3::Mac64Address::Mac64Address(char const * str) [constructor]
+    cls.add_constructor([param('char const *', 'str')])
+    ## mac64-address.h (module 'network'): static ns3::Mac64Address ns3::Mac64Address::Allocate() [member function]
+    cls.add_method('Allocate', 
+                   'ns3::Mac64Address', 
+                   [], 
+                   is_static=True)
+    ## mac64-address.h (module 'network'): static ns3::Mac64Address ns3::Mac64Address::ConvertFrom(ns3::Address const & address) [member function]
+    cls.add_method('ConvertFrom', 
+                   'ns3::Mac64Address', 
+                   [param('ns3::Address const &', 'address')], 
+                   is_static=True)
+    ## mac64-address.h (module 'network'): void ns3::Mac64Address::CopyFrom(uint8_t const * buffer) [member function]
+    cls.add_method('CopyFrom', 
+                   'void', 
+                   [param('uint8_t const *', 'buffer')])
+    ## mac64-address.h (module 'network'): void ns3::Mac64Address::CopyTo(uint8_t * buffer) const [member function]
+    cls.add_method('CopyTo', 
+                   'void', 
+                   [param('uint8_t *', 'buffer')], 
+                   is_const=True)
+    ## mac64-address.h (module 'network'): static bool ns3::Mac64Address::IsMatchingType(ns3::Address const & address) [member function]
+    cls.add_method('IsMatchingType', 
+                   'bool', 
+                   [param('ns3::Address const &', 'address')], 
+                   is_static=True)
+    return
+
+def register_Ns3McpsDataConfirmParams_methods(root_module, cls):
+    ## lr-wpan-mac.h (module 'lr-wpan'): ns3::McpsDataConfirmParams::McpsDataConfirmParams() [constructor]
+    cls.add_constructor([])
+    ## lr-wpan-mac.h (module 'lr-wpan'): ns3::McpsDataConfirmParams::McpsDataConfirmParams(ns3::McpsDataConfirmParams const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::McpsDataConfirmParams const &', 'arg0')])
+    ## lr-wpan-mac.h (module 'lr-wpan'): ns3::McpsDataConfirmParams::m_msduHandle [variable]
+    cls.add_instance_attribute('m_msduHandle', 'uint8_t', is_const=False)
+    ## lr-wpan-mac.h (module 'lr-wpan'): ns3::McpsDataConfirmParams::m_status [variable]
+    cls.add_instance_attribute('m_status', 'ns3::LrWpanMcpsDataConfirmStatus', is_const=False)
+    return
+
+def register_Ns3McpsDataIndicationParams_methods(root_module, cls):
+    ## lr-wpan-mac.h (module 'lr-wpan'): ns3::McpsDataIndicationParams::McpsDataIndicationParams() [constructor]
+    cls.add_constructor([])
+    ## lr-wpan-mac.h (module 'lr-wpan'): ns3::McpsDataIndicationParams::McpsDataIndicationParams(ns3::McpsDataIndicationParams const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::McpsDataIndicationParams const &', 'arg0')])
+    ## lr-wpan-mac.h (module 'lr-wpan'): ns3::McpsDataIndicationParams::m_dsn [variable]
+    cls.add_instance_attribute('m_dsn', 'uint8_t', is_const=False)
+    ## lr-wpan-mac.h (module 'lr-wpan'): ns3::McpsDataIndicationParams::m_dstAddr [variable]
+    cls.add_instance_attribute('m_dstAddr', 'ns3::Mac16Address', is_const=False)
+    ## lr-wpan-mac.h (module 'lr-wpan'): ns3::McpsDataIndicationParams::m_dstAddrMode [variable]
+    cls.add_instance_attribute('m_dstAddrMode', 'uint8_t', is_const=False)
+    ## lr-wpan-mac.h (module 'lr-wpan'): ns3::McpsDataIndicationParams::m_dstPanId [variable]
+    cls.add_instance_attribute('m_dstPanId', 'uint16_t', is_const=False)
+    ## lr-wpan-mac.h (module 'lr-wpan'): ns3::McpsDataIndicationParams::m_mpduLinkQuality [variable]
+    cls.add_instance_attribute('m_mpduLinkQuality', 'uint8_t', is_const=False)
+    ## lr-wpan-mac.h (module 'lr-wpan'): ns3::McpsDataIndicationParams::m_srcAddr [variable]
+    cls.add_instance_attribute('m_srcAddr', 'ns3::Mac16Address', is_const=False)
+    ## lr-wpan-mac.h (module 'lr-wpan'): ns3::McpsDataIndicationParams::m_srcAddrMode [variable]
+    cls.add_instance_attribute('m_srcAddrMode', 'uint8_t', is_const=False)
+    ## lr-wpan-mac.h (module 'lr-wpan'): ns3::McpsDataIndicationParams::m_srcPanId [variable]
+    cls.add_instance_attribute('m_srcPanId', 'uint16_t', is_const=False)
+    return
+
+def register_Ns3McpsDataRequestParams_methods(root_module, cls):
+    ## lr-wpan-mac.h (module 'lr-wpan'): ns3::McpsDataRequestParams::McpsDataRequestParams(ns3::McpsDataRequestParams const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::McpsDataRequestParams const &', 'arg0')])
+    ## lr-wpan-mac.h (module 'lr-wpan'): ns3::McpsDataRequestParams::McpsDataRequestParams() [constructor]
+    cls.add_constructor([])
+    ## lr-wpan-mac.h (module 'lr-wpan'): ns3::McpsDataRequestParams::m_dstAddr [variable]
+    cls.add_instance_attribute('m_dstAddr', 'ns3::Mac16Address', is_const=False)
+    ## lr-wpan-mac.h (module 'lr-wpan'): ns3::McpsDataRequestParams::m_dstAddrMode [variable]
+    cls.add_instance_attribute('m_dstAddrMode', 'ns3::LrWpanAddressMode', is_const=False)
+    ## lr-wpan-mac.h (module 'lr-wpan'): ns3::McpsDataRequestParams::m_dstPanId [variable]
+    cls.add_instance_attribute('m_dstPanId', 'uint16_t', is_const=False)
+    ## lr-wpan-mac.h (module 'lr-wpan'): ns3::McpsDataRequestParams::m_msduHandle [variable]
+    cls.add_instance_attribute('m_msduHandle', 'uint8_t', is_const=False)
+    ## lr-wpan-mac.h (module 'lr-wpan'): ns3::McpsDataRequestParams::m_srcAddrMode [variable]
+    cls.add_instance_attribute('m_srcAddrMode', 'ns3::LrWpanAddressMode', is_const=False)
+    ## lr-wpan-mac.h (module 'lr-wpan'): ns3::McpsDataRequestParams::m_txOptions [variable]
+    cls.add_instance_attribute('m_txOptions', 'uint8_t', is_const=False)
+    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')])
+    ## net-device-container.h (module 'network'): ns3::NetDeviceContainer::NetDeviceContainer() [constructor]
+    cls.add_constructor([])
+    ## net-device-container.h (module 'network'): ns3::NetDeviceContainer::NetDeviceContainer(ns3::Ptr<ns3::NetDevice> dev) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::NetDevice >', 'dev')])
+    ## net-device-container.h (module 'network'): ns3::NetDeviceContainer::NetDeviceContainer(std::string devName) [constructor]
+    cls.add_constructor([param('std::string', 'devName')])
+    ## net-device-container.h (module 'network'): ns3::NetDeviceContainer::NetDeviceContainer(ns3::NetDeviceContainer const & a, ns3::NetDeviceContainer const & b) [constructor]
+    cls.add_constructor([param('ns3::NetDeviceContainer const &', 'a'), param('ns3::NetDeviceContainer const &', 'b')])
+    ## net-device-container.h (module 'network'): void ns3::NetDeviceContainer::Add(ns3::NetDeviceContainer other) [member function]
+    cls.add_method('Add', 
+                   'void', 
+                   [param('ns3::NetDeviceContainer', 'other')])
+    ## net-device-container.h (module 'network'): void ns3::NetDeviceContainer::Add(ns3::Ptr<ns3::NetDevice> device) [member function]
+    cls.add_method('Add', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::NetDevice >', 'device')])
+    ## net-device-container.h (module 'network'): void ns3::NetDeviceContainer::Add(std::string deviceName) [member function]
+    cls.add_method('Add', 
+                   'void', 
+                   [param('std::string', 'deviceName')])
+    ## net-device-container.h (module 'network'): __gnu_cxx::__normal_iterator<const ns3::Ptr<ns3::NetDevice>*,std::vector<ns3::Ptr<ns3::NetDevice>, std::allocator<ns3::Ptr<ns3::NetDevice> > > > ns3::NetDeviceContainer::Begin() const [member function]
+    cls.add_method('Begin', 
+                   '__gnu_cxx::__normal_iterator< ns3::Ptr< ns3::NetDevice > const, std::vector< ns3::Ptr< ns3::NetDevice > > >', 
+                   [], 
+                   is_const=True)
+    ## net-device-container.h (module 'network'): __gnu_cxx::__normal_iterator<const ns3::Ptr<ns3::NetDevice>*,std::vector<ns3::Ptr<ns3::NetDevice>, std::allocator<ns3::Ptr<ns3::NetDevice> > > > ns3::NetDeviceContainer::End() const [member function]
+    cls.add_method('End', 
+                   '__gnu_cxx::__normal_iterator< ns3::Ptr< ns3::NetDevice > const, std::vector< ns3::Ptr< ns3::NetDevice > > >', 
+                   [], 
+                   is_const=True)
+    ## net-device-container.h (module 'network'): ns3::Ptr<ns3::NetDevice> ns3::NetDeviceContainer::Get(uint32_t i) const [member function]
+    cls.add_method('Get', 
+                   'ns3::Ptr< ns3::NetDevice >', 
+                   [param('uint32_t', 'i')], 
+                   is_const=True)
+    ## net-device-container.h (module 'network'): uint32_t ns3::NetDeviceContainer::GetN() const [member function]
+    cls.add_method('GetN', 
+                   'uint32_t', 
+                   [], 
+                   is_const=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')])
+    ## node-container.h (module 'network'): ns3::NodeContainer::NodeContainer() [constructor]
+    cls.add_constructor([])
+    ## node-container.h (module 'network'): ns3::NodeContainer::NodeContainer(ns3::Ptr<ns3::Node> node) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::Node >', 'node')])
+    ## node-container.h (module 'network'): ns3::NodeContainer::NodeContainer(std::string nodeName) [constructor]
+    cls.add_constructor([param('std::string', 'nodeName')])
+    ## node-container.h (module 'network'): ns3::NodeContainer::NodeContainer(ns3::NodeContainer const & a, ns3::NodeContainer const & b) [constructor]
+    cls.add_constructor([param('ns3::NodeContainer const &', 'a'), param('ns3::NodeContainer const &', 'b')])
+    ## node-container.h (module 'network'): ns3::NodeContainer::NodeContainer(ns3::NodeContainer const & a, ns3::NodeContainer const & b, ns3::NodeContainer const & c) [constructor]
+    cls.add_constructor([param('ns3::NodeContainer const &', 'a'), param('ns3::NodeContainer const &', 'b'), param('ns3::NodeContainer const &', 'c')])
+    ## node-container.h (module 'network'): ns3::NodeContainer::NodeContainer(ns3::NodeContainer const & a, ns3::NodeContainer const & b, ns3::NodeContainer const & c, ns3::NodeContainer const & d) [constructor]
+    cls.add_constructor([param('ns3::NodeContainer const &', 'a'), param('ns3::NodeContainer const &', 'b'), param('ns3::NodeContainer const &', 'c'), param('ns3::NodeContainer const &', 'd')])
+    ## node-container.h (module 'network'): ns3::NodeContainer::NodeContainer(ns3::NodeContainer const & a, ns3::NodeContainer const & b, ns3::NodeContainer const & c, ns3::NodeContainer const & d, ns3::NodeContainer const & e) [constructor]
+    cls.add_constructor([param('ns3::NodeContainer const &', 'a'), param('ns3::NodeContainer const &', 'b'), param('ns3::NodeContainer const &', 'c'), param('ns3::NodeContainer const &', 'd'), param('ns3::NodeContainer const &', 'e')])
+    ## node-container.h (module 'network'): void ns3::NodeContainer::Add(ns3::NodeContainer other) [member function]
+    cls.add_method('Add', 
+                   'void', 
+                   [param('ns3::NodeContainer', 'other')])
+    ## node-container.h (module 'network'): void ns3::NodeContainer::Add(ns3::Ptr<ns3::Node> node) [member function]
+    cls.add_method('Add', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Node >', 'node')])
+    ## node-container.h (module 'network'): void ns3::NodeContainer::Add(std::string nodeName) [member function]
+    cls.add_method('Add', 
+                   'void', 
+                   [param('std::string', 'nodeName')])
+    ## node-container.h (module 'network'): __gnu_cxx::__normal_iterator<const ns3::Ptr<ns3::Node>*,std::vector<ns3::Ptr<ns3::Node>, std::allocator<ns3::Ptr<ns3::Node> > > > ns3::NodeContainer::Begin() const [member function]
+    cls.add_method('Begin', 
+                   '__gnu_cxx::__normal_iterator< ns3::Ptr< ns3::Node > const, std::vector< ns3::Ptr< ns3::Node > > >', 
+                   [], 
+                   is_const=True)
+    ## node-container.h (module 'network'): void ns3::NodeContainer::Create(uint32_t n) [member function]
+    cls.add_method('Create', 
+                   'void', 
+                   [param('uint32_t', 'n')])
+    ## node-container.h (module 'network'): void ns3::NodeContainer::Create(uint32_t n, uint32_t systemId) [member function]
+    cls.add_method('Create', 
+                   'void', 
+                   [param('uint32_t', 'n'), param('uint32_t', 'systemId')])
+    ## node-container.h (module 'network'): __gnu_cxx::__normal_iterator<const ns3::Ptr<ns3::Node>*,std::vector<ns3::Ptr<ns3::Node>, std::allocator<ns3::Ptr<ns3::Node> > > > ns3::NodeContainer::End() const [member function]
+    cls.add_method('End', 
+                   '__gnu_cxx::__normal_iterator< ns3::Ptr< ns3::Node > const, std::vector< ns3::Ptr< ns3::Node > > >', 
+                   [], 
+                   is_const=True)
+    ## node-container.h (module 'network'): ns3::Ptr<ns3::Node> ns3::NodeContainer::Get(uint32_t i) const [member function]
+    cls.add_method('Get', 
+                   'ns3::Ptr< ns3::Node >', 
+                   [param('uint32_t', 'i')], 
+                   is_const=True)
+    ## node-container.h (module 'network'): static ns3::NodeContainer ns3::NodeContainer::GetGlobal() [member function]
+    cls.add_method('GetGlobal', 
+                   'ns3::NodeContainer', 
+                   [], 
+                   is_static=True)
+    ## node-container.h (module 'network'): uint32_t ns3::NodeContainer::GetN() const [member function]
+    cls.add_method('GetN', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    return
+
+def register_Ns3ObjectBase_methods(root_module, cls):
+    ## object-base.h (module 'core'): ns3::ObjectBase::ObjectBase() [constructor]
+    cls.add_constructor([])
+    ## object-base.h (module 'core'): ns3::ObjectBase::ObjectBase(ns3::ObjectBase const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::ObjectBase const &', 'arg0')])
+    ## object-base.h (module 'core'): void ns3::ObjectBase::GetAttribute(std::string name, ns3::AttributeValue & value) const [member function]
+    cls.add_method('GetAttribute', 
+                   '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]
+    cls.add_method('GetAttributeFailSafe', 
+                   'bool', 
+                   [param('std::string', 'name'), param('ns3::AttributeValue &', 'attribute')], 
+                   is_const=True)
+    ## object-base.h (module 'core'): ns3::TypeId ns3::ObjectBase::GetInstanceTypeId() const [member function]
+    cls.add_method('GetInstanceTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## object-base.h (module 'core'): static ns3::TypeId ns3::ObjectBase::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## object-base.h (module 'core'): void ns3::ObjectBase::SetAttribute(std::string name, ns3::AttributeValue const & value) [member function]
+    cls.add_method('SetAttribute', 
+                   'void', 
+                   [param('std::string', 'name'), param('ns3::AttributeValue const &', 'value')])
+    ## object-base.h (module 'core'): bool ns3::ObjectBase::SetAttributeFailSafe(std::string name, ns3::AttributeValue const & value) [member function]
+    cls.add_method('SetAttributeFailSafe', 
+                   'bool', 
+                   [param('std::string', 'name'), param('ns3::AttributeValue const &', 'value')])
+    ## object-base.h (module 'core'): bool ns3::ObjectBase::TraceConnect(std::string name, std::string context, ns3::CallbackBase const & cb) [member function]
+    cls.add_method('TraceConnect', 
+                   'bool', 
+                   [param('std::string', 'name'), param('std::string', 'context'), param('ns3::CallbackBase const &', 'cb')])
+    ## object-base.h (module 'core'): bool ns3::ObjectBase::TraceConnectWithoutContext(std::string name, ns3::CallbackBase const & cb) [member function]
+    cls.add_method('TraceConnectWithoutContext', 
+                   'bool', 
+                   [param('std::string', 'name'), param('ns3::CallbackBase const &', 'cb')])
+    ## object-base.h (module 'core'): bool ns3::ObjectBase::TraceDisconnect(std::string name, std::string context, ns3::CallbackBase const & cb) [member function]
+    cls.add_method('TraceDisconnect', 
+                   'bool', 
+                   [param('std::string', 'name'), param('std::string', 'context'), param('ns3::CallbackBase const &', 'cb')])
+    ## object-base.h (module 'core'): bool ns3::ObjectBase::TraceDisconnectWithoutContext(std::string name, ns3::CallbackBase const & cb) [member function]
+    cls.add_method('TraceDisconnectWithoutContext', 
+                   'bool', 
+                   [param('std::string', 'name'), param('ns3::CallbackBase const &', 'cb')])
+    ## object-base.h (module 'core'): void ns3::ObjectBase::ConstructSelf(ns3::AttributeConstructionList const & attributes) [member function]
+    cls.add_method('ConstructSelf', 
+                   'void', 
+                   [param('ns3::AttributeConstructionList const &', 'attributes')], 
+                   visibility='protected')
+    ## object-base.h (module 'core'): void ns3::ObjectBase::NotifyConstructionCompleted() [member function]
+    cls.add_method('NotifyConstructionCompleted', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    return
+
+def register_Ns3ObjectDeleter_methods(root_module, cls):
+    ## object.h (module 'core'): ns3::ObjectDeleter::ObjectDeleter() [constructor]
+    cls.add_constructor([])
+    ## object.h (module 'core'): ns3::ObjectDeleter::ObjectDeleter(ns3::ObjectDeleter const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::ObjectDeleter const &', 'arg0')])
+    ## object.h (module 'core'): static void ns3::ObjectDeleter::Delete(ns3::Object * object) [member function]
+    cls.add_method('Delete', 
+                   'void', 
+                   [param('ns3::Object *', 'object')], 
+                   is_static=True)
+    return
+
+def register_Ns3ObjectFactory_methods(root_module, cls):
+    cls.add_output_stream_operator()
+    ## object-factory.h (module 'core'): ns3::ObjectFactory::ObjectFactory(ns3::ObjectFactory const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::ObjectFactory const &', 'arg0')])
+    ## object-factory.h (module 'core'): ns3::ObjectFactory::ObjectFactory() [constructor]
+    cls.add_constructor([])
+    ## object-factory.h (module 'core'): ns3::ObjectFactory::ObjectFactory(std::string typeId) [constructor]
+    cls.add_constructor([param('std::string', 'typeId')])
+    ## object-factory.h (module 'core'): ns3::Ptr<ns3::Object> ns3::ObjectFactory::Create() const [member function]
+    cls.add_method('Create', 
+                   'ns3::Ptr< ns3::Object >', 
+                   [], 
+                   is_const=True)
+    ## object-factory.h (module 'core'): ns3::TypeId ns3::ObjectFactory::GetTypeId() const [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_const=True)
+    ## object-factory.h (module 'core'): void ns3::ObjectFactory::Set(std::string name, ns3::AttributeValue const & value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('std::string', 'name'), param('ns3::AttributeValue const &', 'value')])
+    ## object-factory.h (module 'core'): void ns3::ObjectFactory::SetTypeId(ns3::TypeId tid) [member function]
+    cls.add_method('SetTypeId', 
+                   'void', 
+                   [param('ns3::TypeId', 'tid')])
+    ## object-factory.h (module 'core'): void ns3::ObjectFactory::SetTypeId(char const * tid) [member function]
+    cls.add_method('SetTypeId', 
+                   'void', 
+                   [param('char const *', 'tid')])
+    ## object-factory.h (module 'core'): void ns3::ObjectFactory::SetTypeId(std::string tid) [member function]
+    cls.add_method('SetTypeId', 
+                   'void', 
+                   [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_Ns3PcapFile_methods(root_module, cls):
+    ## pcap-file.h (module 'network'): ns3::PcapFile::PcapFile() [constructor]
+    cls.add_constructor([])
+    ## pcap-file.h (module 'network'): void ns3::PcapFile::Clear() [member function]
+    cls.add_method('Clear', 
+                   'void', 
+                   [])
+    ## pcap-file.h (module 'network'): void ns3::PcapFile::Close() [member function]
+    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]
+    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')], 
+                   is_static=True)
+    ## pcap-file.h (module 'network'): bool ns3::PcapFile::Eof() const [member function]
+    cls.add_method('Eof', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## pcap-file.h (module 'network'): bool ns3::PcapFile::Fail() const [member function]
+    cls.add_method('Fail', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## pcap-file.h (module 'network'): uint32_t ns3::PcapFile::GetDataLinkType() [member function]
+    cls.add_method('GetDataLinkType', 
+                   'uint32_t', 
+                   [])
+    ## pcap-file.h (module 'network'): uint32_t ns3::PcapFile::GetMagic() [member function]
+    cls.add_method('GetMagic', 
+                   'uint32_t', 
+                   [])
+    ## pcap-file.h (module 'network'): uint32_t ns3::PcapFile::GetSigFigs() [member function]
+    cls.add_method('GetSigFigs', 
+                   'uint32_t', 
+                   [])
+    ## pcap-file.h (module 'network'): uint32_t ns3::PcapFile::GetSnapLen() [member function]
+    cls.add_method('GetSnapLen', 
+                   'uint32_t', 
+                   [])
+    ## pcap-file.h (module 'network'): bool ns3::PcapFile::GetSwapMode() [member function]
+    cls.add_method('GetSwapMode', 
+                   'bool', 
+                   [])
+    ## pcap-file.h (module 'network'): int32_t ns3::PcapFile::GetTimeZoneOffset() [member function]
+    cls.add_method('GetTimeZoneOffset', 
+                   'int32_t', 
+                   [])
+    ## pcap-file.h (module 'network'): uint16_t ns3::PcapFile::GetVersionMajor() [member function]
+    cls.add_method('GetVersionMajor', 
+                   'uint16_t', 
+                   [])
+    ## pcap-file.h (module 'network'): uint16_t ns3::PcapFile::GetVersionMinor() [member function]
+    cls.add_method('GetVersionMinor', 
+                   'uint16_t', 
+                   [])
+    ## pcap-file.h (module 'network'): void ns3::PcapFile::Init(uint32_t dataLinkType, uint32_t snapLen=ns3::PcapFile::SNAPLEN_DEFAULT, int32_t timeZoneCorrection=ns3::PcapFile::ZONE_DEFAULT, bool swapMode=false) [member function]
+    cls.add_method('Init', 
+                   'void', 
+                   [param('uint32_t', 'dataLinkType'), param('uint32_t', 'snapLen', default_value='ns3::PcapFile::SNAPLEN_DEFAULT'), param('int32_t', 'timeZoneCorrection', default_value='ns3::PcapFile::ZONE_DEFAULT'), param('bool', 'swapMode', default_value='false')])
+    ## pcap-file.h (module 'network'): void ns3::PcapFile::Open(std::string const & filename, std::_Ios_Openmode mode) [member function]
+    cls.add_method('Open', 
+                   'void', 
+                   [param('std::string const &', 'filename'), param('std::_Ios_Openmode', 'mode')])
+    ## pcap-file.h (module 'network'): void ns3::PcapFile::Read(uint8_t * const data, uint32_t maxBytes, uint32_t & tsSec, uint32_t & tsUsec, uint32_t & inclLen, uint32_t & origLen, uint32_t & readLen) [member function]
+    cls.add_method('Read', 
+                   'void', 
+                   [param('uint8_t * const', 'data'), param('uint32_t', 'maxBytes'), param('uint32_t &', 'tsSec'), param('uint32_t &', 'tsUsec'), param('uint32_t &', 'inclLen'), param('uint32_t &', 'origLen'), param('uint32_t &', 'readLen')])
+    ## pcap-file.h (module 'network'): void ns3::PcapFile::Write(uint32_t tsSec, uint32_t tsUsec, uint8_t const * const data, uint32_t totalLen) [member function]
+    cls.add_method('Write', 
+                   'void', 
+                   [param('uint32_t', 'tsSec'), param('uint32_t', 'tsUsec'), param('uint8_t const * const', 'data'), param('uint32_t', 'totalLen')])
+    ## pcap-file.h (module 'network'): void ns3::PcapFile::Write(uint32_t tsSec, uint32_t tsUsec, ns3::Ptr<const ns3::Packet> p) [member function]
+    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]
+    cls.add_method('Write', 
+                   'void', 
+                   [param('uint32_t', 'tsSec'), param('uint32_t', 'tsUsec'), param('ns3::Header &', '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]
+    cls.add_static_attribute('ZONE_DEFAULT', 'int32_t const', is_const=True)
+    return
+
+def register_Ns3PcapHelper_methods(root_module, cls):
+    ## trace-helper.h (module 'network'): ns3::PcapHelper::PcapHelper(ns3::PcapHelper const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::PcapHelper const &', 'arg0')])
+    ## trace-helper.h (module 'network'): ns3::PcapHelper::PcapHelper() [constructor]
+    cls.add_constructor([])
+    ## trace-helper.h (module 'network'): ns3::Ptr<ns3::PcapFileWrapper> ns3::PcapHelper::CreateFile(std::string filename, std::_Ios_Openmode filemode, uint32_t dataLinkType, uint32_t snapLen=65535, int32_t tzCorrection=0) [member function]
+    cls.add_method('CreateFile', 
+                   'ns3::Ptr< ns3::PcapFileWrapper >', 
+                   [param('std::string', 'filename'), param('std::_Ios_Openmode', 'filemode'), param('uint32_t', 'dataLinkType'), param('uint32_t', 'snapLen', default_value='65535'), param('int32_t', 'tzCorrection', default_value='0')])
+    ## trace-helper.h (module 'network'): std::string ns3::PcapHelper::GetFilenameFromDevice(std::string prefix, ns3::Ptr<ns3::NetDevice> device, bool useObjectNames=true) [member function]
+    cls.add_method('GetFilenameFromDevice', 
+                   'std::string', 
+                   [param('std::string', 'prefix'), param('ns3::Ptr< ns3::NetDevice >', 'device'), param('bool', 'useObjectNames', default_value='true')])
+    ## trace-helper.h (module 'network'): std::string ns3::PcapHelper::GetFilenameFromInterfacePair(std::string prefix, ns3::Ptr<ns3::Object> object, uint32_t interface, bool useObjectNames=true) [member function]
+    cls.add_method('GetFilenameFromInterfacePair', 
+                   'std::string', 
+                   [param('std::string', 'prefix'), param('ns3::Ptr< ns3::Object >', 'object'), param('uint32_t', 'interface'), param('bool', 'useObjectNames', default_value='true')])
+    return
+
+def register_Ns3PcapHelperForDevice_methods(root_module, cls):
+    ## trace-helper.h (module 'network'): ns3::PcapHelperForDevice::PcapHelperForDevice(ns3::PcapHelperForDevice const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::PcapHelperForDevice const &', 'arg0')])
+    ## trace-helper.h (module 'network'): ns3::PcapHelperForDevice::PcapHelperForDevice() [constructor]
+    cls.add_constructor([])
+    ## trace-helper.h (module 'network'): void ns3::PcapHelperForDevice::EnablePcap(std::string prefix, ns3::Ptr<ns3::NetDevice> nd, bool promiscuous=false, bool explicitFilename=false) [member function]
+    cls.add_method('EnablePcap', 
+                   'void', 
+                   [param('std::string', 'prefix'), param('ns3::Ptr< ns3::NetDevice >', 'nd'), param('bool', 'promiscuous', default_value='false'), param('bool', 'explicitFilename', default_value='false')])
+    ## trace-helper.h (module 'network'): void ns3::PcapHelperForDevice::EnablePcap(std::string prefix, std::string ndName, bool promiscuous=false, bool explicitFilename=false) [member function]
+    cls.add_method('EnablePcap', 
+                   'void', 
+                   [param('std::string', 'prefix'), param('std::string', 'ndName'), param('bool', 'promiscuous', default_value='false'), param('bool', 'explicitFilename', default_value='false')])
+    ## trace-helper.h (module 'network'): void ns3::PcapHelperForDevice::EnablePcap(std::string prefix, ns3::NetDeviceContainer d, bool promiscuous=false) [member function]
+    cls.add_method('EnablePcap', 
+                   'void', 
+                   [param('std::string', 'prefix'), param('ns3::NetDeviceContainer', 'd'), param('bool', 'promiscuous', default_value='false')])
+    ## trace-helper.h (module 'network'): void ns3::PcapHelperForDevice::EnablePcap(std::string prefix, ns3::NodeContainer n, bool promiscuous=false) [member function]
+    cls.add_method('EnablePcap', 
+                   'void', 
+                   [param('std::string', 'prefix'), param('ns3::NodeContainer', 'n'), param('bool', 'promiscuous', default_value='false')])
+    ## trace-helper.h (module 'network'): void ns3::PcapHelperForDevice::EnablePcap(std::string prefix, uint32_t nodeid, uint32_t deviceid, bool promiscuous=false) [member function]
+    cls.add_method('EnablePcap', 
+                   'void', 
+                   [param('std::string', 'prefix'), param('uint32_t', 'nodeid'), param('uint32_t', 'deviceid'), param('bool', 'promiscuous', default_value='false')])
+    ## trace-helper.h (module 'network'): void ns3::PcapHelperForDevice::EnablePcapAll(std::string prefix, bool promiscuous=false) [member function]
+    cls.add_method('EnablePcapAll', 
+                   'void', 
+                   [param('std::string', 'prefix'), param('bool', 'promiscuous', default_value='false')])
+    ## trace-helper.h (module 'network'): void ns3::PcapHelperForDevice::EnablePcapInternal(std::string prefix, ns3::Ptr<ns3::NetDevice> nd, bool promiscuous, bool explicitFilename) [member function]
+    cls.add_method('EnablePcapInternal', 
+                   'void', 
+                   [param('std::string', 'prefix'), param('ns3::Ptr< ns3::NetDevice >', 'nd'), param('bool', 'promiscuous'), param('bool', 'explicitFilename')], 
+                   is_pure_virtual=True, is_virtual=True)
+    return
+
+def register_Ns3SequenceNumber8_methods(root_module, cls):
+    cls.add_binary_comparison_operator('!=')
+    cls.add_binary_numeric_operator('+', root_module['ns3::SequenceNumber8'], root_module['ns3::SequenceNumber8'], param('ns3::SequenceNumber< unsigned char, signed char > const &', u'right'))
+    cls.add_binary_numeric_operator('+', root_module['ns3::SequenceNumber8'], root_module['ns3::SequenceNumber8'], param('signed char', u'right'))
+    cls.add_inplace_numeric_operator('+=', param('signed char', u'right'))
+    cls.add_binary_numeric_operator('-', root_module['ns3::SequenceNumber8'], root_module['ns3::SequenceNumber8'], param('signed char', u'right'))
+    cls.add_inplace_numeric_operator('-=', param('signed char', u'right'))
+    cls.add_binary_comparison_operator('<')
+    cls.add_binary_comparison_operator('<=')
+    cls.add_binary_comparison_operator('==')
+    cls.add_binary_comparison_operator('>')
+    cls.add_binary_comparison_operator('>=')
+    ## sequence-number.h (module 'network'): ns3::SequenceNumber<unsigned char, signed char>::SequenceNumber() [constructor]
+    cls.add_constructor([])
+    ## sequence-number.h (module 'network'): ns3::SequenceNumber<unsigned char, signed char>::SequenceNumber(unsigned char value) [constructor]
+    cls.add_constructor([param('unsigned char', 'value')])
+    ## sequence-number.h (module 'network'): ns3::SequenceNumber<unsigned char, signed char>::SequenceNumber(ns3::SequenceNumber<unsigned char, signed char> const & value) [copy constructor]
+    cls.add_constructor([param('ns3::SequenceNumber< unsigned char, signed char > const &', 'value')])
+    ## sequence-number.h (module 'network'): unsigned char ns3::SequenceNumber<unsigned char, signed char>::GetValue() const [member function]
+    cls.add_method('GetValue', 
+                   'unsigned char', 
+                   [], 
+                   is_const=True)
+    return
+
+def register_Ns3SimpleRefCount__Ns3Object_Ns3ObjectBase_Ns3ObjectDeleter_methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter>::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter>::SimpleRefCount(ns3::SimpleRefCount<ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter> const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter>::Cleanup() [member function]
+    cls.add_method('Cleanup', 
+                   'void', 
+                   [], 
+                   is_static=True)
+    return
+
+def register_Ns3Simulator_methods(root_module, cls):
+    ## simulator.h (module 'core'): ns3::Simulator::Simulator(ns3::Simulator const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Simulator const &', 'arg0')])
+    ## simulator.h (module 'core'): static void ns3::Simulator::Cancel(ns3::EventId const & id) [member function]
+    cls.add_method('Cancel', 
+                   'void', 
+                   [param('ns3::EventId const &', 'id')], 
+                   is_static=True)
+    ## simulator.h (module 'core'): static void ns3::Simulator::Destroy() [member function]
+    cls.add_method('Destroy', 
+                   'void', 
+                   [], 
+                   is_static=True)
+    ## simulator.h (module 'core'): static uint32_t ns3::Simulator::GetContext() [member function]
+    cls.add_method('GetContext', 
+                   'uint32_t', 
+                   [], 
+                   is_static=True)
+    ## simulator.h (module 'core'): static ns3::Time ns3::Simulator::GetDelayLeft(ns3::EventId const & id) [member function]
+    cls.add_method('GetDelayLeft', 
+                   'ns3::Time', 
+                   [param('ns3::EventId const &', 'id')], 
+                   is_static=True)
+    ## simulator.h (module 'core'): static ns3::Ptr<ns3::SimulatorImpl> ns3::Simulator::GetImplementation() [member function]
+    cls.add_method('GetImplementation', 
+                   'ns3::Ptr< ns3::SimulatorImpl >', 
+                   [], 
+                   is_static=True)
+    ## simulator.h (module 'core'): static ns3::Time ns3::Simulator::GetMaximumSimulationTime() [member function]
+    cls.add_method('GetMaximumSimulationTime', 
+                   'ns3::Time', 
+                   [], 
+                   is_static=True)
+    ## simulator.h (module 'core'): static uint32_t ns3::Simulator::GetSystemId() [member function]
+    cls.add_method('GetSystemId', 
+                   'uint32_t', 
+                   [], 
+                   is_static=True)
+    ## simulator.h (module 'core'): static bool ns3::Simulator::IsExpired(ns3::EventId const & id) [member function]
+    cls.add_method('IsExpired', 
+                   'bool', 
+                   [param('ns3::EventId const &', 'id')], 
+                   is_static=True)
+    ## simulator.h (module 'core'): static bool ns3::Simulator::IsFinished() [member function]
+    cls.add_method('IsFinished', 
+                   'bool', 
+                   [], 
+                   is_static=True)
+    ## simulator.h (module 'core'): static ns3::Time ns3::Simulator::Now() [member function]
+    cls.add_method('Now', 
+                   'ns3::Time', 
+                   [], 
+                   is_static=True)
+    ## simulator.h (module 'core'): static void ns3::Simulator::Remove(ns3::EventId const & id) [member function]
+    cls.add_method('Remove', 
+                   'void', 
+                   [param('ns3::EventId const &', 'id')], 
+                   is_static=True)
+    ## simulator.h (module 'core'): static void ns3::Simulator::SetImplementation(ns3::Ptr<ns3::SimulatorImpl> impl) [member function]
+    cls.add_method('SetImplementation', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::SimulatorImpl >', 'impl')], 
+                   is_static=True)
+    ## simulator.h (module 'core'): static void ns3::Simulator::SetScheduler(ns3::ObjectFactory schedulerFactory) [member function]
+    cls.add_method('SetScheduler', 
+                   'void', 
+                   [param('ns3::ObjectFactory', 'schedulerFactory')], 
+                   is_static=True)
+    ## simulator.h (module 'core'): static void ns3::Simulator::Stop() [member function]
+    cls.add_method('Stop', 
+                   'void', 
+                   [], 
+                   is_static=True)
+    ## simulator.h (module 'core'): static void ns3::Simulator::Stop(ns3::Time const & time) [member function]
+    cls.add_method('Stop', 
+                   'void', 
+                   [param('ns3::Time const &', 'time')], 
+                   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', 
+                   'void', 
+                   [param('ns3::TagBuffer', 'o')])
+    ## tag-buffer.h (module 'network'): void ns3::TagBuffer::Read(uint8_t * buffer, uint32_t size) [member function]
+    cls.add_method('Read', 
+                   'void', 
+                   [param('uint8_t *', 'buffer'), param('uint32_t', 'size')])
+    ## tag-buffer.h (module 'network'): double ns3::TagBuffer::ReadDouble() [member function]
+    cls.add_method('ReadDouble', 
+                   'double', 
+                   [])
+    ## tag-buffer.h (module 'network'): uint16_t ns3::TagBuffer::ReadU16() [member function]
+    cls.add_method('ReadU16', 
+                   'uint16_t', 
+                   [])
+    ## tag-buffer.h (module 'network'): uint32_t ns3::TagBuffer::ReadU32() [member function]
+    cls.add_method('ReadU32', 
+                   'uint32_t', 
+                   [])
+    ## tag-buffer.h (module 'network'): uint64_t ns3::TagBuffer::ReadU64() [member function]
+    cls.add_method('ReadU64', 
+                   'uint64_t', 
+                   [])
+    ## tag-buffer.h (module 'network'): uint8_t ns3::TagBuffer::ReadU8() [member function]
+    cls.add_method('ReadU8', 
+                   'uint8_t', 
+                   [])
+    ## tag-buffer.h (module 'network'): void ns3::TagBuffer::TrimAtEnd(uint32_t trim) [member function]
+    cls.add_method('TrimAtEnd', 
+                   'void', 
+                   [param('uint32_t', 'trim')])
+    ## tag-buffer.h (module 'network'): void ns3::TagBuffer::Write(uint8_t const * buffer, uint32_t size) [member function]
+    cls.add_method('Write', 
+                   'void', 
+                   [param('uint8_t const *', 'buffer'), param('uint32_t', 'size')])
+    ## tag-buffer.h (module 'network'): void ns3::TagBuffer::WriteDouble(double v) [member function]
+    cls.add_method('WriteDouble', 
+                   'void', 
+                   [param('double', 'v')])
+    ## tag-buffer.h (module 'network'): void ns3::TagBuffer::WriteU16(uint16_t data) [member function]
+    cls.add_method('WriteU16', 
+                   'void', 
+                   [param('uint16_t', 'data')])
+    ## tag-buffer.h (module 'network'): void ns3::TagBuffer::WriteU32(uint32_t data) [member function]
+    cls.add_method('WriteU32', 
+                   'void', 
+                   [param('uint32_t', 'data')])
+    ## tag-buffer.h (module 'network'): void ns3::TagBuffer::WriteU64(uint64_t v) [member function]
+    cls.add_method('WriteU64', 
+                   'void', 
+                   [param('uint64_t', 'v')])
+    ## tag-buffer.h (module 'network'): void ns3::TagBuffer::WriteU8(uint8_t v) [member function]
+    cls.add_method('WriteU8', 
+                   'void', 
+                   [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('!=')
+    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')])
+    ## type-id.h (module 'core'): ns3::TypeId::TypeId() [constructor]
+    cls.add_constructor([])
+    ## type-id.h (module 'core'): ns3::TypeId::TypeId(ns3::TypeId const & o) [copy constructor]
+    cls.add_constructor([param('ns3::TypeId const &', 'o')])
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::AddAttribute(std::string name, std::string help, ns3::AttributeValue const & initialValue, ns3::Ptr<ns3::AttributeAccessor const> accessor, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
+    cls.add_method('AddAttribute', 
+                   'ns3::TypeId', 
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::AttributeValue const &', 'initialValue'), param('ns3::Ptr< ns3::AttributeAccessor const >', 'accessor'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')])
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::AddAttribute(std::string name, std::string help, uint32_t flags, ns3::AttributeValue const & initialValue, ns3::Ptr<ns3::AttributeAccessor const> accessor, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
+    cls.add_method('AddAttribute', 
+                   'ns3::TypeId', 
+                   [param('std::string', 'name'), param('std::string', 'help'), param('uint32_t', 'flags'), param('ns3::AttributeValue const &', 'initialValue'), param('ns3::Ptr< ns3::AttributeAccessor const >', 'accessor'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')])
+    ## 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')])
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation ns3::TypeId::GetAttribute(uint32_t i) const [member function]
+    cls.add_method('GetAttribute', 
+                   'ns3::TypeId::AttributeInformation', 
+                   [param('uint32_t', 'i')], 
+                   is_const=True)
+    ## type-id.h (module 'core'): std::string ns3::TypeId::GetAttributeFullName(uint32_t i) const [member function]
+    cls.add_method('GetAttributeFullName', 
+                   'std::string', 
+                   [param('uint32_t', 'i')], 
+                   is_const=True)
+    ## type-id.h (module 'core'): uint32_t ns3::TypeId::GetAttributeN() const [member function]
+    cls.add_method('GetAttributeN', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## type-id.h (module 'core'): ns3::Callback<ns3::ObjectBase*,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> ns3::TypeId::GetConstructor() const [member function]
+    cls.add_method('GetConstructor', 
+                   'ns3::Callback< ns3::ObjectBase *, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 
+                   [], 
+                   is_const=True)
+    ## type-id.h (module 'core'): std::string ns3::TypeId::GetGroupName() const [member function]
+    cls.add_method('GetGroupName', 
+                   'std::string', 
+                   [], 
+                   is_const=True)
+    ## type-id.h (module 'core'): uint32_t ns3::TypeId::GetHash() const [member function]
+    cls.add_method('GetHash', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## type-id.h (module 'core'): std::string ns3::TypeId::GetName() const [member function]
+    cls.add_method('GetName', 
+                   'std::string', 
+                   [], 
+                   is_const=True)
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::GetParent() const [member function]
+    cls.add_method('GetParent', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_const=True)
+    ## type-id.h (module 'core'): static ns3::TypeId ns3::TypeId::GetRegistered(uint32_t i) [member function]
+    cls.add_method('GetRegistered', 
+                   'ns3::TypeId', 
+                   [param('uint32_t', 'i')], 
+                   is_static=True)
+    ## type-id.h (module 'core'): static uint32_t ns3::TypeId::GetRegisteredN() [member function]
+    cls.add_method('GetRegisteredN', 
+                   'uint32_t', 
+                   [], 
+                   is_static=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', 
+                   [param('uint32_t', 'i')], 
+                   is_const=True)
+    ## type-id.h (module 'core'): uint32_t ns3::TypeId::GetTraceSourceN() const [member function]
+    cls.add_method('GetTraceSourceN', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## type-id.h (module 'core'): uint16_t ns3::TypeId::GetUid() const [member function]
+    cls.add_method('GetUid', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## type-id.h (module 'core'): bool ns3::TypeId::HasConstructor() const [member function]
+    cls.add_method('HasConstructor', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## type-id.h (module 'core'): bool ns3::TypeId::HasParent() const [member function]
+    cls.add_method('HasParent', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::HideFromDocumentation() [member function]
+    cls.add_method('HideFromDocumentation', 
+                   'ns3::TypeId', 
+                   [])
+    ## type-id.h (module 'core'): bool ns3::TypeId::IsChildOf(ns3::TypeId other) const [member function]
+    cls.add_method('IsChildOf', 
+                   'bool', 
+                   [param('ns3::TypeId', 'other')], 
+                   is_const=True)
+    ## type-id.h (module 'core'): bool ns3::TypeId::LookupAttributeByName(std::string name, ns3::TypeId::AttributeInformation * info) const [member function]
+    cls.add_method('LookupAttributeByName', 
+                   'bool', 
+                   [param('std::string', 'name'), param('ns3::TypeId::AttributeInformation *', 'info', transfer_ownership=False)], 
+                   is_const=True)
+    ## type-id.h (module 'core'): static ns3::TypeId ns3::TypeId::LookupByHash(uint32_t hash) [member function]
+    cls.add_method('LookupByHash', 
+                   'ns3::TypeId', 
+                   [param('uint32_t', 'hash')], 
+                   is_static=True)
+    ## type-id.h (module 'core'): static bool ns3::TypeId::LookupByHashFailSafe(uint32_t hash, ns3::TypeId * tid) [member function]
+    cls.add_method('LookupByHashFailSafe', 
+                   'bool', 
+                   [param('uint32_t', 'hash'), param('ns3::TypeId *', 'tid')], 
+                   is_static=True)
+    ## type-id.h (module 'core'): static ns3::TypeId ns3::TypeId::LookupByName(std::string name) [member function]
+    cls.add_method('LookupByName', 
+                   'ns3::TypeId', 
+                   [param('std::string', 'name')], 
+                   is_static=True)
+    ## type-id.h (module 'core'): ns3::Ptr<ns3::TraceSourceAccessor const> ns3::TypeId::LookupTraceSourceByName(std::string name) const [member function]
+    cls.add_method('LookupTraceSourceByName', 
+                   'ns3::Ptr< ns3::TraceSourceAccessor const >', 
+                   [param('std::string', 'name')], 
+                   is_const=True)
+    ## type-id.h (module 'core'): bool ns3::TypeId::MustHideFromDocumentation() const [member function]
+    cls.add_method('MustHideFromDocumentation', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## type-id.h (module 'core'): bool ns3::TypeId::SetAttributeInitialValue(uint32_t i, ns3::Ptr<ns3::AttributeValue const> initialValue) [member function]
+    cls.add_method('SetAttributeInitialValue', 
+                   'bool', 
+                   [param('uint32_t', 'i'), param('ns3::Ptr< ns3::AttributeValue const >', 'initialValue')])
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::SetGroupName(std::string groupName) [member function]
+    cls.add_method('SetGroupName', 
+                   'ns3::TypeId', 
+                   [param('std::string', 'groupName')])
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::SetParent(ns3::TypeId tid) [member function]
+    cls.add_method('SetParent', 
+                   'ns3::TypeId', 
+                   [param('ns3::TypeId', 'tid')])
+    ## type-id.h (module 'core'): void ns3::TypeId::SetUid(uint16_t tid) [member function]
+    cls.add_method('SetUid', 
+                   'void', 
+                   [param('uint16_t', 'tid')])
+    return
+
+def register_Ns3TypeIdAttributeInformation_methods(root_module, cls):
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::AttributeInformation() [constructor]
+    cls.add_constructor([])
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::AttributeInformation(ns3::TypeId::AttributeInformation const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::TypeId::AttributeInformation const &', 'arg0')])
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::accessor [variable]
+    cls.add_instance_attribute('accessor', 'ns3::Ptr< ns3::AttributeAccessor const >', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::checker [variable]
+    cls.add_instance_attribute('checker', 'ns3::Ptr< ns3::AttributeChecker const >', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::flags [variable]
+    cls.add_instance_attribute('flags', 'uint32_t', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::help [variable]
+    cls.add_instance_attribute('help', 'std::string', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::initialValue [variable]
+    cls.add_instance_attribute('initialValue', 'ns3::Ptr< ns3::AttributeValue const >', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::name [variable]
+    cls.add_instance_attribute('name', 'std::string', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::originalInitialValue [variable]
+    cls.add_instance_attribute('originalInitialValue', 'ns3::Ptr< ns3::AttributeValue const >', is_const=False)
+    return
+
+def register_Ns3TypeIdTraceSourceInformation_methods(root_module, cls):
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::TraceSourceInformation() [constructor]
+    cls.add_constructor([])
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::TraceSourceInformation(ns3::TypeId::TraceSourceInformation const & arg0) [copy constructor]
+    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::help [variable]
+    cls.add_instance_attribute('help', 'std::string', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::name [variable]
+    cls.add_instance_attribute('name', 'std::string', is_const=False)
+    return
+
+def register_Ns3Empty_methods(root_module, cls):
+    ## empty.h (module 'core'): ns3::empty::empty() [constructor]
+    cls.add_constructor([])
+    ## empty.h (module 'core'): ns3::empty::empty(ns3::empty const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::empty const &', 'arg0')])
+    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('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 &', 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 &', 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('==')
+    cls.add_binary_comparison_operator('>=')
+    ## int64x64-double.h (module 'core'): ns3::int64x64_t::int64x64_t() [constructor]
+    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]
+    cls.add_constructor([param('long int', 'v')])
+    ## int64x64-double.h (module 'core'): ns3::int64x64_t::int64x64_t(long long int v) [constructor]
+    cls.add_constructor([param('long long int', 'v')])
+    ## int64x64-double.h (module 'core'): ns3::int64x64_t::int64x64_t(unsigned int v) [constructor]
+    cls.add_constructor([param('unsigned int', 'v')])
+    ## int64x64-double.h (module 'core'): ns3::int64x64_t::int64x64_t(long unsigned int v) [constructor]
+    cls.add_constructor([param('long unsigned int', 'v')])
+    ## int64x64-double.h (module 'core'): ns3::int64x64_t::int64x64_t(long long unsigned int v) [constructor]
+    cls.add_constructor([param('long long unsigned int', 'v')])
+    ## int64x64-double.h (module 'core'): ns3::int64x64_t::int64x64_t(int64_t hi, uint64_t lo) [constructor]
+    cls.add_constructor([param('int64_t', 'hi'), param('uint64_t', 'lo')])
+    ## int64x64-double.h (module 'core'): ns3::int64x64_t::int64x64_t(ns3::int64x64_t const & o) [copy constructor]
+    cls.add_constructor([param('ns3::int64x64_t const &', 'o')])
+    ## int64x64-double.h (module 'core'): double ns3::int64x64_t::GetDouble() const [member function]
+    cls.add_method('GetDouble', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## int64x64-double.h (module 'core'): int64_t ns3::int64x64_t::GetHigh() const [member function]
+    cls.add_method('GetHigh', 
+                   'int64_t', 
+                   [], 
+                   is_const=True)
+    ## int64x64-double.h (module 'core'): uint64_t ns3::int64x64_t::GetLow() const [member function]
+    cls.add_method('GetLow', 
+                   'uint64_t', 
+                   [], 
+                   is_const=True)
+    ## int64x64-double.h (module 'core'): static ns3::int64x64_t ns3::int64x64_t::Invert(uint64_t v) [member function]
+    cls.add_method('Invert', 
+                   'ns3::int64x64_t', 
+                   [param('uint64_t', 'v')], 
+                   is_static=True)
+    ## int64x64-double.h (module 'core'): void ns3::int64x64_t::MulByInvert(ns3::int64x64_t const & o) [member function]
+    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):
+    ## 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_Ns3LrWpanHelper_methods(root_module, cls):
+    ## lr-wpan-helper.h (module 'lr-wpan'): ns3::LrWpanHelper::LrWpanHelper() [constructor]
+    cls.add_constructor([])
+    ## lr-wpan-helper.h (module 'lr-wpan'): void ns3::LrWpanHelper::AddMobility(ns3::Ptr<ns3::LrWpanPhy> phy, ns3::Ptr<ns3::MobilityModel> m) [member function]
+    cls.add_method('AddMobility', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::LrWpanPhy >', 'phy'), param('ns3::Ptr< ns3::MobilityModel >', 'm')])
+    ## lr-wpan-helper.h (module 'lr-wpan'): ns3::NetDeviceContainer ns3::LrWpanHelper::Install(ns3::NodeContainer c) [member function]
+    cls.add_method('Install', 
+                   'ns3::NetDeviceContainer', 
+                   [param('ns3::NodeContainer', 'c')])
+    ## lr-wpan-helper.h (module 'lr-wpan'): void ns3::LrWpanHelper::AssociateToPan(ns3::NetDeviceContainer c, uint16_t panId) [member function]
+    cls.add_method('AssociateToPan', 
+                   'void', 
+                   [param('ns3::NetDeviceContainer', 'c'), param('uint16_t', 'panId')])
+    ## lr-wpan-helper.h (module 'lr-wpan'): void ns3::LrWpanHelper::EnableLogComponents() [member function]
+    cls.add_method('EnableLogComponents', 
+                   'void', 
+                   [])
+    ## lr-wpan-helper.h (module 'lr-wpan'): static std::string ns3::LrWpanHelper::LrWpanPhyEnumerationPrinter(ns3::LrWpanPhyEnumeration arg0) [member function]
+    cls.add_method('LrWpanPhyEnumerationPrinter', 
+                   'std::string', 
+                   [param('ns3::LrWpanPhyEnumeration', 'arg0')], 
+                   is_static=True)
+    ## lr-wpan-helper.h (module 'lr-wpan'): static std::string ns3::LrWpanHelper::LrWpanMacStatePrinter(ns3::LrWpanMacState e) [member function]
+    cls.add_method('LrWpanMacStatePrinter', 
+                   'std::string', 
+                   [param('ns3::LrWpanMacState', 'e')], 
+                   is_static=True)
+    ## lr-wpan-helper.h (module 'lr-wpan'): int64_t ns3::LrWpanHelper::AssignStreams(ns3::NetDeviceContainer c, int64_t stream) [member function]
+    cls.add_method('AssignStreams', 
+                   'int64_t', 
+                   [param('ns3::NetDeviceContainer', 'c'), param('int64_t', 'stream')])
+    ## lr-wpan-helper.h (module 'lr-wpan'): void ns3::LrWpanHelper::EnablePcapInternal(std::string prefix, ns3::Ptr<ns3::NetDevice> nd, bool promiscuous, bool explicitFilename) [member function]
+    cls.add_method('EnablePcapInternal', 
+                   'void', 
+                   [param('std::string', 'prefix'), param('ns3::Ptr< ns3::NetDevice >', 'nd'), param('bool', 'promiscuous'), param('bool', 'explicitFilename')], 
+                   visibility='private', is_virtual=True)
+    ## lr-wpan-helper.h (module 'lr-wpan'): void ns3::LrWpanHelper::EnableAsciiInternal(ns3::Ptr<ns3::OutputStreamWrapper> stream, std::string prefix, ns3::Ptr<ns3::NetDevice> nd, bool explicitFilename) [member function]
+    cls.add_method('EnableAsciiInternal', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream'), param('std::string', 'prefix'), param('ns3::Ptr< ns3::NetDevice >', 'nd'), param('bool', 'explicitFilename')], 
+                   visibility='private', is_virtual=True)
+    return
+
+def register_Ns3LrWpanLqiTag_methods(root_module, cls):
+    ## lr-wpan-lqi-tag.h (module 'lr-wpan'): ns3::LrWpanLqiTag::LrWpanLqiTag(ns3::LrWpanLqiTag const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::LrWpanLqiTag const &', 'arg0')])
+    ## lr-wpan-lqi-tag.h (module 'lr-wpan'): ns3::LrWpanLqiTag::LrWpanLqiTag() [constructor]
+    cls.add_constructor([])
+    ## lr-wpan-lqi-tag.h (module 'lr-wpan'): ns3::LrWpanLqiTag::LrWpanLqiTag(uint8_t lqi) [constructor]
+    cls.add_constructor([param('uint8_t', 'lqi')])
+    ## lr-wpan-lqi-tag.h (module 'lr-wpan'): void ns3::LrWpanLqiTag::Deserialize(ns3::TagBuffer i) [member function]
+    cls.add_method('Deserialize', 
+                   'void', 
+                   [param('ns3::TagBuffer', 'i')], 
+                   is_virtual=True)
+    ## lr-wpan-lqi-tag.h (module 'lr-wpan'): uint8_t ns3::LrWpanLqiTag::Get() const [member function]
+    cls.add_method('Get', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## lr-wpan-lqi-tag.h (module 'lr-wpan'): ns3::TypeId ns3::LrWpanLqiTag::GetInstanceTypeId() const [member function]
+    cls.add_method('GetInstanceTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## lr-wpan-lqi-tag.h (module 'lr-wpan'): uint32_t ns3::LrWpanLqiTag::GetSerializedSize() const [member function]
+    cls.add_method('GetSerializedSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## lr-wpan-lqi-tag.h (module 'lr-wpan'): static ns3::TypeId ns3::LrWpanLqiTag::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## lr-wpan-lqi-tag.h (module 'lr-wpan'): void ns3::LrWpanLqiTag::Print(std::ostream & os) const [member function]
+    cls.add_method('Print', 
+                   'void', 
+                   [param('std::ostream &', 'os')], 
+                   is_const=True, is_virtual=True)
+    ## lr-wpan-lqi-tag.h (module 'lr-wpan'): void ns3::LrWpanLqiTag::Serialize(ns3::TagBuffer i) const [member function]
+    cls.add_method('Serialize', 
+                   'void', 
+                   [param('ns3::TagBuffer', 'i')], 
+                   is_const=True, is_virtual=True)
+    ## lr-wpan-lqi-tag.h (module 'lr-wpan'): void ns3::LrWpanLqiTag::Set(uint8_t lqi) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('uint8_t', 'lqi')])
+    return
+
+def register_Ns3LrWpanMacHeader_methods(root_module, cls):
+    ## lr-wpan-mac-header.h (module 'lr-wpan'): ns3::LrWpanMacHeader::LrWpanMacHeader(ns3::LrWpanMacHeader const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::LrWpanMacHeader const &', 'arg0')])
+    ## lr-wpan-mac-header.h (module 'lr-wpan'): ns3::LrWpanMacHeader::LrWpanMacHeader() [constructor]
+    cls.add_constructor([])
+    ## lr-wpan-mac-header.h (module 'lr-wpan'): ns3::LrWpanMacHeader::LrWpanMacHeader(ns3::LrWpanMacHeader::LrWpanMacType wpanMacType, uint8_t seqNum) [constructor]
+    cls.add_constructor([param('ns3::LrWpanMacHeader::LrWpanMacType', 'wpanMacType'), param('uint8_t', 'seqNum')])
+    ## lr-wpan-mac-header.h (module 'lr-wpan'): uint32_t ns3::LrWpanMacHeader::Deserialize(ns3::Buffer::Iterator start) [member function]
+    cls.add_method('Deserialize', 
+                   'uint32_t', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_virtual=True)
+    ## lr-wpan-mac-header.h (module 'lr-wpan'): uint8_t ns3::LrWpanMacHeader::GetDstAddrMode() const [member function]
+    cls.add_method('GetDstAddrMode', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## lr-wpan-mac-header.h (module 'lr-wpan'): uint16_t ns3::LrWpanMacHeader::GetDstPanId() const [member function]
+    cls.add_method('GetDstPanId', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## lr-wpan-mac-header.h (module 'lr-wpan'): ns3::Mac64Address ns3::LrWpanMacHeader::GetExtDstAddr() const [member function]
+    cls.add_method('GetExtDstAddr', 
+                   'ns3::Mac64Address', 
+                   [], 
+                   is_const=True)
+    ## lr-wpan-mac-header.h (module 'lr-wpan'): ns3::Mac64Address ns3::LrWpanMacHeader::GetExtSrcAddr() const [member function]
+    cls.add_method('GetExtSrcAddr', 
+                   'ns3::Mac64Address', 
+                   [], 
+                   is_const=True)
+    ## lr-wpan-mac-header.h (module 'lr-wpan'): uint16_t ns3::LrWpanMacHeader::GetFrameControl() const [member function]
+    cls.add_method('GetFrameControl', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## lr-wpan-mac-header.h (module 'lr-wpan'): uint8_t ns3::LrWpanMacHeader::GetFrameVer() const [member function]
+    cls.add_method('GetFrameVer', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## lr-wpan-mac-header.h (module 'lr-wpan'): uint32_t ns3::LrWpanMacHeader::GetFrmCounter() const [member function]
+    cls.add_method('GetFrmCounter', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## lr-wpan-mac-header.h (module 'lr-wpan'): uint8_t ns3::LrWpanMacHeader::GetFrmCtrlRes() const [member function]
+    cls.add_method('GetFrmCtrlRes', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## lr-wpan-mac-header.h (module 'lr-wpan'): ns3::TypeId ns3::LrWpanMacHeader::GetInstanceTypeId() const [member function]
+    cls.add_method('GetInstanceTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## lr-wpan-mac-header.h (module 'lr-wpan'): uint8_t ns3::LrWpanMacHeader::GetKeyIdIndex() const [member function]
+    cls.add_method('GetKeyIdIndex', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## lr-wpan-mac-header.h (module 'lr-wpan'): uint8_t ns3::LrWpanMacHeader::GetKeyIdMode() const [member function]
+    cls.add_method('GetKeyIdMode', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## lr-wpan-mac-header.h (module 'lr-wpan'): uint32_t ns3::LrWpanMacHeader::GetKeyIdSrc32() const [member function]
+    cls.add_method('GetKeyIdSrc32', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## lr-wpan-mac-header.h (module 'lr-wpan'): uint64_t ns3::LrWpanMacHeader::GetKeyIdSrc64() const [member function]
+    cls.add_method('GetKeyIdSrc64', 
+                   'uint64_t', 
+                   [], 
+                   is_const=True)
+    ## lr-wpan-mac-header.h (module 'lr-wpan'): std::string ns3::LrWpanMacHeader::GetName() const [member function]
+    cls.add_method('GetName', 
+                   'std::string', 
+                   [], 
+                   is_const=True)
+    ## lr-wpan-mac-header.h (module 'lr-wpan'): uint8_t ns3::LrWpanMacHeader::GetSecControl() const [member function]
+    cls.add_method('GetSecControl', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## lr-wpan-mac-header.h (module 'lr-wpan'): uint8_t ns3::LrWpanMacHeader::GetSecLevel() const [member function]
+    cls.add_method('GetSecLevel', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## lr-wpan-mac-header.h (module 'lr-wpan'): uint8_t ns3::LrWpanMacHeader::GetSeqNum() const [member function]
+    cls.add_method('GetSeqNum', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## lr-wpan-mac-header.h (module 'lr-wpan'): uint32_t ns3::LrWpanMacHeader::GetSerializedSize() const [member function]
+    cls.add_method('GetSerializedSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## lr-wpan-mac-header.h (module 'lr-wpan'): ns3::Mac16Address ns3::LrWpanMacHeader::GetShortDstAddr() const [member function]
+    cls.add_method('GetShortDstAddr', 
+                   'ns3::Mac16Address', 
+                   [], 
+                   is_const=True)
+    ## lr-wpan-mac-header.h (module 'lr-wpan'): ns3::Mac16Address ns3::LrWpanMacHeader::GetShortSrcAddr() const [member function]
+    cls.add_method('GetShortSrcAddr', 
+                   'ns3::Mac16Address', 
+                   [], 
+                   is_const=True)
+    ## lr-wpan-mac-header.h (module 'lr-wpan'): uint8_t ns3::LrWpanMacHeader::GetSrcAddrMode() const [member function]
+    cls.add_method('GetSrcAddrMode', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## lr-wpan-mac-header.h (module 'lr-wpan'): uint16_t ns3::LrWpanMacHeader::GetSrcPanId() const [member function]
+    cls.add_method('GetSrcPanId', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## lr-wpan-mac-header.h (module 'lr-wpan'): ns3::LrWpanMacHeader::LrWpanMacType ns3::LrWpanMacHeader::GetType() const [member function]
+    cls.add_method('GetType', 
+                   'ns3::LrWpanMacHeader::LrWpanMacType', 
+                   [], 
+                   is_const=True)
+    ## lr-wpan-mac-header.h (module 'lr-wpan'): static ns3::TypeId ns3::LrWpanMacHeader::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## lr-wpan-mac-header.h (module 'lr-wpan'): uint8_t ns3::LrWpanMacHeader::GetsecctrlReserved() const [member function]
+    cls.add_method('GetsecctrlReserved', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## lr-wpan-mac-header.h (module 'lr-wpan'): bool ns3::LrWpanMacHeader::IsAckReq() const [member function]
+    cls.add_method('IsAckReq', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## lr-wpan-mac-header.h (module 'lr-wpan'): bool ns3::LrWpanMacHeader::IsAcknowledgment() const [member function]
+    cls.add_method('IsAcknowledgment', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## lr-wpan-mac-header.h (module 'lr-wpan'): bool ns3::LrWpanMacHeader::IsBeacon() const [member function]
+    cls.add_method('IsBeacon', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## lr-wpan-mac-header.h (module 'lr-wpan'): bool ns3::LrWpanMacHeader::IsCommand() const [member function]
+    cls.add_method('IsCommand', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## lr-wpan-mac-header.h (module 'lr-wpan'): bool ns3::LrWpanMacHeader::IsData() const [member function]
+    cls.add_method('IsData', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## lr-wpan-mac-header.h (module 'lr-wpan'): bool ns3::LrWpanMacHeader::IsFrmPend() const [member function]
+    cls.add_method('IsFrmPend', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## lr-wpan-mac-header.h (module 'lr-wpan'): bool ns3::LrWpanMacHeader::IsNoAckReq() const [member function]
+    cls.add_method('IsNoAckReq', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## lr-wpan-mac-header.h (module 'lr-wpan'): bool ns3::LrWpanMacHeader::IsNoFrmPend() const [member function]
+    cls.add_method('IsNoFrmPend', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## lr-wpan-mac-header.h (module 'lr-wpan'): bool ns3::LrWpanMacHeader::IsNoPanIdComp() const [member function]
+    cls.add_method('IsNoPanIdComp', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## lr-wpan-mac-header.h (module 'lr-wpan'): bool ns3::LrWpanMacHeader::IsPanIdComp() const [member function]
+    cls.add_method('IsPanIdComp', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## lr-wpan-mac-header.h (module 'lr-wpan'): bool ns3::LrWpanMacHeader::IsSecDisable() const [member function]
+    cls.add_method('IsSecDisable', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## lr-wpan-mac-header.h (module 'lr-wpan'): bool ns3::LrWpanMacHeader::IsSecEnable() const [member function]
+    cls.add_method('IsSecEnable', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## lr-wpan-mac-header.h (module 'lr-wpan'): void ns3::LrWpanMacHeader::Print(std::ostream & os) const [member function]
+    cls.add_method('Print', 
+                   'void', 
+                   [param('std::ostream &', 'os')], 
+                   is_const=True, is_virtual=True)
+    ## lr-wpan-mac-header.h (module 'lr-wpan'): void ns3::LrWpanMacHeader::PrintFrameControl(std::ostream & os) const [member function]
+    cls.add_method('PrintFrameControl', 
+                   'void', 
+                   [param('std::ostream &', 'os')], 
+                   is_const=True)
+    ## lr-wpan-mac-header.h (module 'lr-wpan'): void ns3::LrWpanMacHeader::Serialize(ns3::Buffer::Iterator start) const [member function]
+    cls.add_method('Serialize', 
+                   'void', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_const=True, is_virtual=True)
+    ## lr-wpan-mac-header.h (module 'lr-wpan'): void ns3::LrWpanMacHeader::SetAckReq() [member function]
+    cls.add_method('SetAckReq', 
+                   'void', 
+                   [])
+    ## lr-wpan-mac-header.h (module 'lr-wpan'): void ns3::LrWpanMacHeader::SetDstAddrFields(uint16_t panId, ns3::Mac16Address addr) [member function]
+    cls.add_method('SetDstAddrFields', 
+                   'void', 
+                   [param('uint16_t', 'panId'), param('ns3::Mac16Address', 'addr')])
+    ## lr-wpan-mac-header.h (module 'lr-wpan'): void ns3::LrWpanMacHeader::SetDstAddrFields(uint16_t panId, ns3::Mac64Address addr) [member function]
+    cls.add_method('SetDstAddrFields', 
+                   'void', 
+                   [param('uint16_t', 'panId'), param('ns3::Mac64Address', 'addr')])
+    ## lr-wpan-mac-header.h (module 'lr-wpan'): void ns3::LrWpanMacHeader::SetDstAddrMode(uint8_t addrMode) [member function]
+    cls.add_method('SetDstAddrMode', 
+                   'void', 
+                   [param('uint8_t', 'addrMode')])
+    ## lr-wpan-mac-header.h (module 'lr-wpan'): void ns3::LrWpanMacHeader::SetFrameControl(uint16_t frameControl) [member function]
+    cls.add_method('SetFrameControl', 
+                   'void', 
+                   [param('uint16_t', 'frameControl')])
+    ## lr-wpan-mac-header.h (module 'lr-wpan'): void ns3::LrWpanMacHeader::SetFrameVer(uint8_t ver) [member function]
+    cls.add_method('SetFrameVer', 
+                   'void', 
+                   [param('uint8_t', 'ver')])
+    ## lr-wpan-mac-header.h (module 'lr-wpan'): void ns3::LrWpanMacHeader::SetFrmCounter(uint32_t frmCntr) [member function]
+    cls.add_method('SetFrmCounter', 
+                   'void', 
+                   [param('uint32_t', 'frmCntr')])
+    ## lr-wpan-mac-header.h (module 'lr-wpan'): void ns3::LrWpanMacHeader::SetFrmCtrlRes(uint8_t res) [member function]
+    cls.add_method('SetFrmCtrlRes', 
+                   'void', 
+                   [param('uint8_t', 'res')])
+    ## lr-wpan-mac-header.h (module 'lr-wpan'): void ns3::LrWpanMacHeader::SetFrmPend() [member function]
+    cls.add_method('SetFrmPend', 
+                   'void', 
+                   [])
+    ## lr-wpan-mac-header.h (module 'lr-wpan'): void ns3::LrWpanMacHeader::SetKeyId(uint8_t keyIndex) [member function]
+    cls.add_method('SetKeyId', 
+                   'void', 
+                   [param('uint8_t', 'keyIndex')])
+    ## lr-wpan-mac-header.h (module 'lr-wpan'): void ns3::LrWpanMacHeader::SetKeyId(uint32_t keySrc, uint8_t keyIndex) [member function]
+    cls.add_method('SetKeyId', 
+                   'void', 
+                   [param('uint32_t', 'keySrc'), param('uint8_t', 'keyIndex')])
+    ## lr-wpan-mac-header.h (module 'lr-wpan'): void ns3::LrWpanMacHeader::SetKeyId(uint64_t keySrc, uint8_t keyIndex) [member function]
+    cls.add_method('SetKeyId', 
+                   'void', 
+                   [param('uint64_t', 'keySrc'), param('uint8_t', 'keyIndex')])
+    ## lr-wpan-mac-header.h (module 'lr-wpan'): void ns3::LrWpanMacHeader::SetKeyIdMode(uint8_t keyIdMode) [member function]
+    cls.add_method('SetKeyIdMode', 
+                   'void', 
+                   [param('uint8_t', 'keyIdMode')])
+    ## lr-wpan-mac-header.h (module 'lr-wpan'): void ns3::LrWpanMacHeader::SetNoAckReq() [member function]
+    cls.add_method('SetNoAckReq', 
+                   'void', 
+                   [])
+    ## lr-wpan-mac-header.h (module 'lr-wpan'): void ns3::LrWpanMacHeader::SetNoFrmPend() [member function]
+    cls.add_method('SetNoFrmPend', 
+                   'void', 
+                   [])
+    ## lr-wpan-mac-header.h (module 'lr-wpan'): void ns3::LrWpanMacHeader::SetNoPanIdComp() [member function]
+    cls.add_method('SetNoPanIdComp', 
+                   'void', 
+                   [])
+    ## lr-wpan-mac-header.h (module 'lr-wpan'): void ns3::LrWpanMacHeader::SetPanIdComp() [member function]
+    cls.add_method('SetPanIdComp', 
+                   'void', 
+                   [])
+    ## lr-wpan-mac-header.h (module 'lr-wpan'): void ns3::LrWpanMacHeader::SetSecControl(uint8_t secLevel) [member function]
+    cls.add_method('SetSecControl', 
+                   'void', 
+                   [param('uint8_t', 'secLevel')])
+    ## lr-wpan-mac-header.h (module 'lr-wpan'): void ns3::LrWpanMacHeader::SetSecDisable() [member function]
+    cls.add_method('SetSecDisable', 
+                   'void', 
+                   [])
+    ## lr-wpan-mac-header.h (module 'lr-wpan'): void ns3::LrWpanMacHeader::SetSecEnable() [member function]
+    cls.add_method('SetSecEnable', 
+                   'void', 
+                   [])
+    ## lr-wpan-mac-header.h (module 'lr-wpan'): void ns3::LrWpanMacHeader::SetSecLevel(uint8_t secLevel) [member function]
+    cls.add_method('SetSecLevel', 
+                   'void', 
+                   [param('uint8_t', 'secLevel')])
+    ## lr-wpan-mac-header.h (module 'lr-wpan'): void ns3::LrWpanMacHeader::SetSeqNum(uint8_t seqNum) [member function]
+    cls.add_method('SetSeqNum', 
+                   'void', 
+                   [param('uint8_t', 'seqNum')])
+    ## lr-wpan-mac-header.h (module 'lr-wpan'): void ns3::LrWpanMacHeader::SetSrcAddrFields(uint16_t panId, ns3::Mac16Address addr) [member function]
+    cls.add_method('SetSrcAddrFields', 
+                   'void', 
+                   [param('uint16_t', 'panId'), param('ns3::Mac16Address', 'addr')])
+    ## lr-wpan-mac-header.h (module 'lr-wpan'): void ns3::LrWpanMacHeader::SetSrcAddrFields(uint16_t panId, ns3::Mac64Address addr) [member function]
+    cls.add_method('SetSrcAddrFields', 
+                   'void', 
+                   [param('uint16_t', 'panId'), param('ns3::Mac64Address', 'addr')])
+    ## lr-wpan-mac-header.h (module 'lr-wpan'): void ns3::LrWpanMacHeader::SetSrcAddrMode(uint8_t addrMode) [member function]
+    cls.add_method('SetSrcAddrMode', 
+                   'void', 
+                   [param('uint8_t', 'addrMode')])
+    ## lr-wpan-mac-header.h (module 'lr-wpan'): void ns3::LrWpanMacHeader::SetType(ns3::LrWpanMacHeader::LrWpanMacType wpanMacType) [member function]
+    cls.add_method('SetType', 
+                   'void', 
+                   [param('ns3::LrWpanMacHeader::LrWpanMacType', 'wpanMacType')])
+    ## lr-wpan-mac-header.h (module 'lr-wpan'): void ns3::LrWpanMacHeader::SetsecctrlReserved(uint8_t res) [member function]
+    cls.add_method('SetsecctrlReserved', 
+                   'void', 
+                   [param('uint8_t', 'res')])
+    return
+
+def register_Ns3Object_methods(root_module, cls):
+    ## object.h (module 'core'): ns3::Object::Object() [constructor]
+    cls.add_constructor([])
+    ## object.h (module 'core'): void ns3::Object::AggregateObject(ns3::Ptr<ns3::Object> other) [member function]
+    cls.add_method('AggregateObject', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Object >', 'other')])
+    ## object.h (module 'core'): void ns3::Object::Dispose() [member function]
+    cls.add_method('Dispose', 
+                   'void', 
+                   [])
+    ## object.h (module 'core'): ns3::Object::AggregateIterator ns3::Object::GetAggregateIterator() const [member function]
+    cls.add_method('GetAggregateIterator', 
+                   'ns3::Object::AggregateIterator', 
+                   [], 
+                   is_const=True)
+    ## object.h (module 'core'): ns3::TypeId ns3::Object::GetInstanceTypeId() const [member function]
+    cls.add_method('GetInstanceTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## object.h (module 'core'): static ns3::TypeId ns3::Object::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## object.h (module 'core'): void ns3::Object::Initialize() [member function]
+    cls.add_method('Initialize', 
+                   'void', 
+                   [])
+    ## object.h (module 'core'): ns3::Object::Object(ns3::Object const & o) [copy constructor]
+    cls.add_constructor([param('ns3::Object const &', 'o')], 
+                        visibility='protected')
+    ## object.h (module 'core'): void ns3::Object::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    ## object.h (module 'core'): void ns3::Object::DoInitialize() [member function]
+    cls.add_method('DoInitialize', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    ## object.h (module 'core'): void ns3::Object::NotifyNewAggregate() [member function]
+    cls.add_method('NotifyNewAggregate', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    return
+
+def register_Ns3ObjectAggregateIterator_methods(root_module, cls):
+    ## object.h (module 'core'): ns3::Object::AggregateIterator::AggregateIterator(ns3::Object::AggregateIterator const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Object::AggregateIterator const &', 'arg0')])
+    ## object.h (module 'core'): ns3::Object::AggregateIterator::AggregateIterator() [constructor]
+    cls.add_constructor([])
+    ## object.h (module 'core'): bool ns3::Object::AggregateIterator::HasNext() const [member function]
+    cls.add_method('HasNext', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## object.h (module 'core'): ns3::Ptr<ns3::Object const> ns3::Object::AggregateIterator::Next() [member function]
+    cls.add_method('Next', 
+                   'ns3::Ptr< ns3::Object const >', 
+                   [])
+    return
+
+def register_Ns3PcapFileWrapper_methods(root_module, cls):
+    ## pcap-file-wrapper.h (module 'network'): static ns3::TypeId ns3::PcapFileWrapper::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## pcap-file-wrapper.h (module 'network'): ns3::PcapFileWrapper::PcapFileWrapper() [constructor]
+    cls.add_constructor([])
+    ## pcap-file-wrapper.h (module 'network'): bool ns3::PcapFileWrapper::Fail() const [member function]
+    cls.add_method('Fail', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## pcap-file-wrapper.h (module 'network'): bool ns3::PcapFileWrapper::Eof() const [member function]
+    cls.add_method('Eof', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## pcap-file-wrapper.h (module 'network'): void ns3::PcapFileWrapper::Clear() [member function]
+    cls.add_method('Clear', 
+                   'void', 
+                   [])
+    ## pcap-file-wrapper.h (module 'network'): void ns3::PcapFileWrapper::Open(std::string const & filename, std::_Ios_Openmode mode) [member function]
+    cls.add_method('Open', 
+                   'void', 
+                   [param('std::string const &', 'filename'), param('std::_Ios_Openmode', 'mode')])
+    ## pcap-file-wrapper.h (module 'network'): void ns3::PcapFileWrapper::Close() [member function]
+    cls.add_method('Close', 
+                   'void', 
+                   [])
+    ## pcap-file-wrapper.h (module 'network'): void ns3::PcapFileWrapper::Init(uint32_t dataLinkType, uint32_t snapLen=std::numeric_limits<unsigned int>::max(), int32_t tzCorrection=ns3::PcapFile::ZONE_DEFAULT) [member function]
+    cls.add_method('Init', 
+                   'void', 
+                   [param('uint32_t', 'dataLinkType'), param('uint32_t', 'snapLen', default_value='std::numeric_limits<unsigned int>::max()'), param('int32_t', 'tzCorrection', default_value='ns3::PcapFile::ZONE_DEFAULT')])
+    ## pcap-file-wrapper.h (module 'network'): void ns3::PcapFileWrapper::Write(ns3::Time t, ns3::Ptr<const ns3::Packet> p) [member function]
+    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]
+    cls.add_method('Write', 
+                   'void', 
+                   [param('ns3::Time', 't'), param('ns3::Header &', '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', 
+                   [param('ns3::Time', 't'), param('uint8_t const *', 'buffer'), param('uint32_t', 'length')])
+    ## pcap-file-wrapper.h (module 'network'): uint32_t ns3::PcapFileWrapper::GetMagic() [member function]
+    cls.add_method('GetMagic', 
+                   'uint32_t', 
+                   [])
+    ## pcap-file-wrapper.h (module 'network'): uint16_t ns3::PcapFileWrapper::GetVersionMajor() [member function]
+    cls.add_method('GetVersionMajor', 
+                   'uint16_t', 
+                   [])
+    ## pcap-file-wrapper.h (module 'network'): uint16_t ns3::PcapFileWrapper::GetVersionMinor() [member function]
+    cls.add_method('GetVersionMinor', 
+                   'uint16_t', 
+                   [])
+    ## pcap-file-wrapper.h (module 'network'): int32_t ns3::PcapFileWrapper::GetTimeZoneOffset() [member function]
+    cls.add_method('GetTimeZoneOffset', 
+                   'int32_t', 
+                   [])
+    ## pcap-file-wrapper.h (module 'network'): uint32_t ns3::PcapFileWrapper::GetSigFigs() [member function]
+    cls.add_method('GetSigFigs', 
+                   'uint32_t', 
+                   [])
+    ## pcap-file-wrapper.h (module 'network'): uint32_t ns3::PcapFileWrapper::GetSnapLen() [member function]
+    cls.add_method('GetSnapLen', 
+                   'uint32_t', 
+                   [])
+    ## pcap-file-wrapper.h (module 'network'): uint32_t ns3::PcapFileWrapper::GetDataLinkType() [member function]
+    cls.add_method('GetDataLinkType', 
+                   'uint32_t', 
+                   [])
+    return
+
+def register_Ns3SimpleRefCount__Ns3AttributeAccessor_Ns3Empty_Ns3DefaultDeleter__lt__ns3AttributeAccessor__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::AttributeAccessor, ns3::empty, ns3::DefaultDeleter<ns3::AttributeAccessor> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::AttributeAccessor, ns3::empty, ns3::DefaultDeleter<ns3::AttributeAccessor> >::SimpleRefCount(ns3::SimpleRefCount<ns3::AttributeAccessor, ns3::empty, ns3::DefaultDeleter<ns3::AttributeAccessor> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::AttributeAccessor, ns3::empty, ns3::DefaultDeleter< ns3::AttributeAccessor > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::AttributeAccessor, ns3::empty, ns3::DefaultDeleter<ns3::AttributeAccessor> >::Cleanup() [member function]
+    cls.add_method('Cleanup', 
+                   'void', 
+                   [], 
+                   is_static=True)
+    return
+
+def register_Ns3SimpleRefCount__Ns3AttributeChecker_Ns3Empty_Ns3DefaultDeleter__lt__ns3AttributeChecker__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::AttributeChecker, ns3::empty, ns3::DefaultDeleter<ns3::AttributeChecker> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::AttributeChecker, ns3::empty, ns3::DefaultDeleter<ns3::AttributeChecker> >::SimpleRefCount(ns3::SimpleRefCount<ns3::AttributeChecker, ns3::empty, ns3::DefaultDeleter<ns3::AttributeChecker> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::AttributeChecker, ns3::empty, ns3::DefaultDeleter< ns3::AttributeChecker > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::AttributeChecker, ns3::empty, ns3::DefaultDeleter<ns3::AttributeChecker> >::Cleanup() [member function]
+    cls.add_method('Cleanup', 
+                   'void', 
+                   [], 
+                   is_static=True)
+    return
+
+def register_Ns3SimpleRefCount__Ns3AttributeValue_Ns3Empty_Ns3DefaultDeleter__lt__ns3AttributeValue__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::AttributeValue, ns3::empty, ns3::DefaultDeleter<ns3::AttributeValue> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::AttributeValue, ns3::empty, ns3::DefaultDeleter<ns3::AttributeValue> >::SimpleRefCount(ns3::SimpleRefCount<ns3::AttributeValue, ns3::empty, ns3::DefaultDeleter<ns3::AttributeValue> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::AttributeValue, ns3::empty, ns3::DefaultDeleter< ns3::AttributeValue > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::AttributeValue, ns3::empty, ns3::DefaultDeleter<ns3::AttributeValue> >::Cleanup() [member function]
+    cls.add_method('Cleanup', 
+                   'void', 
+                   [], 
+                   is_static=True)
+    return
+
+def register_Ns3SimpleRefCount__Ns3CallbackImplBase_Ns3Empty_Ns3DefaultDeleter__lt__ns3CallbackImplBase__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::CallbackImplBase, ns3::empty, ns3::DefaultDeleter<ns3::CallbackImplBase> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::CallbackImplBase, ns3::empty, ns3::DefaultDeleter<ns3::CallbackImplBase> >::SimpleRefCount(ns3::SimpleRefCount<ns3::CallbackImplBase, ns3::empty, ns3::DefaultDeleter<ns3::CallbackImplBase> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::CallbackImplBase, ns3::empty, ns3::DefaultDeleter< ns3::CallbackImplBase > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::CallbackImplBase, ns3::empty, ns3::DefaultDeleter<ns3::CallbackImplBase> >::Cleanup() [member function]
+    cls.add_method('Cleanup', 
+                   'void', 
+                   [], 
+                   is_static=True)
+    return
+
+def register_Ns3SimpleRefCount__Ns3EventImpl_Ns3Empty_Ns3DefaultDeleter__lt__ns3EventImpl__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::EventImpl, ns3::empty, ns3::DefaultDeleter<ns3::EventImpl> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::EventImpl, ns3::empty, ns3::DefaultDeleter<ns3::EventImpl> >::SimpleRefCount(ns3::SimpleRefCount<ns3::EventImpl, ns3::empty, ns3::DefaultDeleter<ns3::EventImpl> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::EventImpl, ns3::empty, ns3::DefaultDeleter< ns3::EventImpl > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::EventImpl, ns3::empty, ns3::DefaultDeleter<ns3::EventImpl> >::Cleanup() [member function]
+    cls.add_method('Cleanup', 
+                   'void', 
+                   [], 
+                   is_static=True)
+    return
+
+def register_Ns3SimpleRefCount__Ns3HashImplementation_Ns3Empty_Ns3DefaultDeleter__lt__ns3HashImplementation__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::SimpleRefCount(ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter< ns3::Hash::Implementation > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::Cleanup() [member function]
+    cls.add_method('Cleanup', 
+                   'void', 
+                   [], 
+                   is_static=True)
+    return
+
+def register_Ns3SimpleRefCount__Ns3LrWpanInterferenceHelper_Ns3Empty_Ns3DefaultDeleter__lt__ns3LrWpanInterferenceHelper__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::LrWpanInterferenceHelper, ns3::empty, ns3::DefaultDeleter<ns3::LrWpanInterferenceHelper> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::LrWpanInterferenceHelper, ns3::empty, ns3::DefaultDeleter<ns3::LrWpanInterferenceHelper> >::SimpleRefCount(ns3::SimpleRefCount<ns3::LrWpanInterferenceHelper, ns3::empty, ns3::DefaultDeleter<ns3::LrWpanInterferenceHelper> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::LrWpanInterferenceHelper, ns3::empty, ns3::DefaultDeleter< ns3::LrWpanInterferenceHelper > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::LrWpanInterferenceHelper, ns3::empty, ns3::DefaultDeleter<ns3::LrWpanInterferenceHelper> >::Cleanup() [member function]
+    cls.add_method('Cleanup', 
+                   'void', 
+                   [], 
+                   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__Ns3OutputStreamWrapper_Ns3Empty_Ns3DefaultDeleter__lt__ns3OutputStreamWrapper__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::OutputStreamWrapper, ns3::empty, ns3::DefaultDeleter<ns3::OutputStreamWrapper> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::OutputStreamWrapper, ns3::empty, ns3::DefaultDeleter<ns3::OutputStreamWrapper> >::SimpleRefCount(ns3::SimpleRefCount<ns3::OutputStreamWrapper, ns3::empty, ns3::DefaultDeleter<ns3::OutputStreamWrapper> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::OutputStreamWrapper, ns3::empty, ns3::DefaultDeleter< ns3::OutputStreamWrapper > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::OutputStreamWrapper, ns3::empty, ns3::DefaultDeleter<ns3::OutputStreamWrapper> >::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__Ns3SpectrumSignalParameters_Ns3Empty_Ns3DefaultDeleter__lt__ns3SpectrumSignalParameters__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::SpectrumSignalParameters, ns3::empty, ns3::DefaultDeleter<ns3::SpectrumSignalParameters> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::SpectrumSignalParameters, ns3::empty, ns3::DefaultDeleter<ns3::SpectrumSignalParameters> >::SimpleRefCount(ns3::SimpleRefCount<ns3::SpectrumSignalParameters, ns3::empty, ns3::DefaultDeleter<ns3::SpectrumSignalParameters> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::SpectrumSignalParameters, ns3::empty, ns3::DefaultDeleter< ns3::SpectrumSignalParameters > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::SpectrumSignalParameters, ns3::empty, ns3::DefaultDeleter<ns3::SpectrumSignalParameters> >::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([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::TraceSourceAccessor, ns3::empty, ns3::DefaultDeleter<ns3::TraceSourceAccessor> >::SimpleRefCount(ns3::SimpleRefCount<ns3::TraceSourceAccessor, ns3::empty, ns3::DefaultDeleter<ns3::TraceSourceAccessor> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::TraceSourceAccessor, ns3::empty, ns3::DefaultDeleter< ns3::TraceSourceAccessor > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::TraceSourceAccessor, ns3::empty, ns3::DefaultDeleter<ns3::TraceSourceAccessor> >::Cleanup() [member function]
+    cls.add_method('Cleanup', 
+                   'void', 
+                   [], 
+                   is_static=True)
+    return
+
+def register_Ns3SpectrumPhy_methods(root_module, cls):
+    ## spectrum-phy.h (module 'spectrum'): ns3::SpectrumPhy::SpectrumPhy() [constructor]
+    cls.add_constructor([])
+    ## spectrum-phy.h (module 'spectrum'): static ns3::TypeId ns3::SpectrumPhy::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## spectrum-phy.h (module 'spectrum'): void ns3::SpectrumPhy::SetDevice(ns3::Ptr<ns3::NetDevice> d) [member function]
+    cls.add_method('SetDevice', 
+                   '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]
+    cls.add_method('GetDevice', 
+                   'ns3::Ptr< ns3::NetDevice >', 
+                   [], 
+                   is_pure_virtual=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', 
+                   [param('ns3::Ptr< ns3::MobilityModel >', 'm')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## spectrum-phy.h (module 'spectrum'): ns3::Ptr<ns3::MobilityModel> ns3::SpectrumPhy::GetMobility() [member function]
+    cls.add_method('GetMobility', 
+                   'ns3::Ptr< ns3::MobilityModel >', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## spectrum-phy.h (module 'spectrum'): void ns3::SpectrumPhy::SetChannel(ns3::Ptr<ns3::SpectrumChannel> c) [member function]
+    cls.add_method('SetChannel', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::SpectrumChannel >', 'c')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## spectrum-phy.h (module 'spectrum'): ns3::Ptr<ns3::SpectrumModel const> ns3::SpectrumPhy::GetRxSpectrumModel() const [member function]
+    cls.add_method('GetRxSpectrumModel', 
+                   'ns3::Ptr< ns3::SpectrumModel const >', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## spectrum-phy.h (module 'spectrum'): ns3::Ptr<ns3::AntennaModel> ns3::SpectrumPhy::GetRxAntenna() [member function]
+    cls.add_method('GetRxAntenna', 
+                   'ns3::Ptr< ns3::AntennaModel >', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## spectrum-phy.h (module 'spectrum'): void ns3::SpectrumPhy::StartRx(ns3::Ptr<ns3::SpectrumSignalParameters> params) [member function]
+    cls.add_method('StartRx', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::SpectrumSignalParameters >', 'params')], 
+                   is_pure_virtual=True, is_virtual=True)
+    return
+
+def register_Ns3SpectrumSignalParameters_methods(root_module, cls):
+    ## spectrum-signal-parameters.h (module 'spectrum'): ns3::SpectrumSignalParameters::SpectrumSignalParameters() [constructor]
+    cls.add_constructor([])
+    ## spectrum-signal-parameters.h (module 'spectrum'): ns3::SpectrumSignalParameters::SpectrumSignalParameters(ns3::SpectrumSignalParameters const & p) [copy constructor]
+    cls.add_constructor([param('ns3::SpectrumSignalParameters const &', 'p')])
+    ## spectrum-signal-parameters.h (module 'spectrum'): ns3::Ptr<ns3::SpectrumSignalParameters> ns3::SpectrumSignalParameters::Copy() [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::SpectrumSignalParameters >', 
+                   [], 
+                   is_virtual=True)
+    ## spectrum-signal-parameters.h (module 'spectrum'): ns3::SpectrumSignalParameters::duration [variable]
+    cls.add_instance_attribute('duration', 'ns3::Time', is_const=False)
+    ## spectrum-signal-parameters.h (module 'spectrum'): ns3::SpectrumSignalParameters::psd [variable]
+    cls.add_instance_attribute('psd', 'ns3::Ptr< ns3::SpectrumValue >', is_const=False)
+    ## spectrum-signal-parameters.h (module 'spectrum'): ns3::SpectrumSignalParameters::txAntenna [variable]
+    cls.add_instance_attribute('txAntenna', 'ns3::Ptr< ns3::AntennaModel >', is_const=False)
+    ## spectrum-signal-parameters.h (module 'spectrum'): ns3::SpectrumSignalParameters::txPhy [variable]
+    cls.add_instance_attribute('txPhy', 'ns3::Ptr< ns3::SpectrumPhy >', is_const=False)
+    return
+
+def register_Ns3Time_methods(root_module, cls):
+    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 &', 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('==')
+    cls.add_binary_comparison_operator('>=')
+    ## nstime.h (module 'core'): ns3::Time::Time() [constructor]
+    cls.add_constructor([])
+    ## nstime.h (module 'core'): ns3::Time::Time(ns3::Time const & o) [copy constructor]
+    cls.add_constructor([param('ns3::Time const &', 'o')])
+    ## nstime.h (module 'core'): ns3::Time::Time(double v) [constructor]
+    cls.add_constructor([param('double', 'v')])
+    ## nstime.h (module 'core'): ns3::Time::Time(int v) [constructor]
+    cls.add_constructor([param('int', 'v')])
+    ## nstime.h (module 'core'): ns3::Time::Time(long int v) [constructor]
+    cls.add_constructor([param('long int', 'v')])
+    ## nstime.h (module 'core'): ns3::Time::Time(long long int v) [constructor]
+    cls.add_constructor([param('long long int', 'v')])
+    ## nstime.h (module 'core'): ns3::Time::Time(unsigned int v) [constructor]
+    cls.add_constructor([param('unsigned int', 'v')])
+    ## nstime.h (module 'core'): ns3::Time::Time(long unsigned int v) [constructor]
+    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(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]
+    cls.add_method('From', 
+                   'ns3::Time', 
+                   [param('ns3::int64x64_t const &', 'from'), param('ns3::Time::Unit', 'timeUnit')], 
+                   is_static=True)
+    ## 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 &', 'value')], 
+                   is_static=True)
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::FromDouble(double value, ns3::Time::Unit timeUnit) [member function]
+    cls.add_method('FromDouble', 
+                   'ns3::Time', 
+                   [param('double', 'value'), param('ns3::Time::Unit', 'timeUnit')], 
+                   is_static=True)
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::FromInteger(uint64_t value, ns3::Time::Unit timeUnit) [member function]
+    cls.add_method('FromInteger', 
+                   'ns3::Time', 
+                   [param('uint64_t', 'value'), param('ns3::Time::Unit', 'timeUnit')], 
+                   is_static=True)
+    ## nstime.h (module 'core'): double ns3::Time::GetDays() const [member function]
+    cls.add_method('GetDays', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## nstime.h (module 'core'): double ns3::Time::GetDouble() const [member function]
+    cls.add_method('GetDouble', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## nstime.h (module 'core'): int64_t ns3::Time::GetFemtoSeconds() const [member function]
+    cls.add_method('GetFemtoSeconds', 
+                   'int64_t', 
+                   [], 
+                   is_const=True)
+    ## nstime.h (module 'core'): double ns3::Time::GetHours() const [member function]
+    cls.add_method('GetHours', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## nstime.h (module 'core'): int64_t ns3::Time::GetInteger() const [member function]
+    cls.add_method('GetInteger', 
+                   'int64_t', 
+                   [], 
+                   is_const=True)
+    ## nstime.h (module 'core'): int64_t ns3::Time::GetMicroSeconds() const [member function]
+    cls.add_method('GetMicroSeconds', 
+                   'int64_t', 
+                   [], 
+                   is_const=True)
+    ## nstime.h (module 'core'): int64_t ns3::Time::GetMilliSeconds() const [member function]
+    cls.add_method('GetMilliSeconds', 
+                   'int64_t', 
+                   [], 
+                   is_const=True)
+    ## nstime.h (module 'core'): double ns3::Time::GetMinutes() const [member function]
+    cls.add_method('GetMinutes', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## nstime.h (module 'core'): int64_t ns3::Time::GetNanoSeconds() const [member function]
+    cls.add_method('GetNanoSeconds', 
+                   'int64_t', 
+                   [], 
+                   is_const=True)
+    ## nstime.h (module 'core'): int64_t ns3::Time::GetPicoSeconds() const [member function]
+    cls.add_method('GetPicoSeconds', 
+                   'int64_t', 
+                   [], 
+                   is_const=True)
+    ## nstime.h (module 'core'): static ns3::Time::Unit ns3::Time::GetResolution() [member function]
+    cls.add_method('GetResolution', 
+                   'ns3::Time::Unit', 
+                   [], 
+                   is_static=True)
+    ## nstime.h (module 'core'): double ns3::Time::GetSeconds() const [member function]
+    cls.add_method('GetSeconds', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## nstime.h (module 'core'): int64_t ns3::Time::GetTimeStep() const [member function]
+    cls.add_method('GetTimeStep', 
+                   'int64_t', 
+                   [], 
+                   is_const=True)
+    ## nstime.h (module 'core'): double ns3::Time::GetYears() const [member function]
+    cls.add_method('GetYears', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## nstime.h (module 'core'): bool ns3::Time::IsNegative() const [member function]
+    cls.add_method('IsNegative', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## nstime.h (module 'core'): bool ns3::Time::IsPositive() const [member function]
+    cls.add_method('IsPositive', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## nstime.h (module 'core'): bool ns3::Time::IsStrictlyNegative() const [member function]
+    cls.add_method('IsStrictlyNegative', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## nstime.h (module 'core'): bool ns3::Time::IsStrictlyPositive() const [member function]
+    cls.add_method('IsStrictlyPositive', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## nstime.h (module 'core'): bool ns3::Time::IsZero() const [member function]
+    cls.add_method('IsZero', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::Max() [member function]
+    cls.add_method('Max', 
+                   'ns3::Time', 
+                   [], 
+                   is_static=True)
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::Min() [member function]
+    cls.add_method('Min', 
+                   'ns3::Time', 
+                   [], 
+                   is_static=True)
+    ## nstime.h (module 'core'): static void ns3::Time::SetResolution(ns3::Time::Unit resolution) [member function]
+    cls.add_method('SetResolution', 
+                   'void', 
+                   [param('ns3::Time::Unit', 'resolution')], 
+                   is_static=True)
+    ## nstime.h (module 'core'): static bool ns3::Time::StaticInit() [member function]
+    cls.add_method('StaticInit', 
+                   'bool', 
+                   [], 
+                   is_static=True)
+    ## nstime.h (module 'core'): ns3::int64x64_t ns3::Time::To(ns3::Time::Unit timeUnit) const [member function]
+    cls.add_method('To', 
+                   'ns3::int64x64_t', 
+                   [param('ns3::Time::Unit', 'timeUnit')], 
+                   is_const=True)
+    ## nstime.h (module 'core'): double ns3::Time::ToDouble(ns3::Time::Unit timeUnit) const [member function]
+    cls.add_method('ToDouble', 
+                   'double', 
+                   [param('ns3::Time::Unit', 'timeUnit')], 
+                   is_const=True)
+    ## nstime.h (module 'core'): int64_t ns3::Time::ToInteger(ns3::Time::Unit timeUnit) const [member function]
+    cls.add_method('ToInteger', 
+                   'int64_t', 
+                   [param('ns3::Time::Unit', 'timeUnit')], 
+                   is_const=True)
+    return
+
+def register_Ns3TraceSourceAccessor_methods(root_module, cls):
+    ## trace-source-accessor.h (module 'core'): ns3::TraceSourceAccessor::TraceSourceAccessor(ns3::TraceSourceAccessor const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::TraceSourceAccessor const &', 'arg0')])
+    ## trace-source-accessor.h (module 'core'): ns3::TraceSourceAccessor::TraceSourceAccessor() [constructor]
+    cls.add_constructor([])
+    ## trace-source-accessor.h (module 'core'): bool ns3::TraceSourceAccessor::Connect(ns3::ObjectBase * obj, std::string context, ns3::CallbackBase const & cb) const [member function]
+    cls.add_method('Connect', 
+                   'bool', 
+                   [param('ns3::ObjectBase *', 'obj', transfer_ownership=False), param('std::string', 'context'), param('ns3::CallbackBase const &', 'cb')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## trace-source-accessor.h (module 'core'): bool ns3::TraceSourceAccessor::ConnectWithoutContext(ns3::ObjectBase * obj, ns3::CallbackBase const & cb) const [member function]
+    cls.add_method('ConnectWithoutContext', 
+                   'bool', 
+                   [param('ns3::ObjectBase *', 'obj', transfer_ownership=False), param('ns3::CallbackBase const &', 'cb')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## trace-source-accessor.h (module 'core'): bool ns3::TraceSourceAccessor::Disconnect(ns3::ObjectBase * obj, std::string context, ns3::CallbackBase const & cb) const [member function]
+    cls.add_method('Disconnect', 
+                   'bool', 
+                   [param('ns3::ObjectBase *', 'obj', transfer_ownership=False), param('std::string', 'context'), param('ns3::CallbackBase const &', 'cb')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## trace-source-accessor.h (module 'core'): bool ns3::TraceSourceAccessor::DisconnectWithoutContext(ns3::ObjectBase * obj, ns3::CallbackBase const & cb) const [member function]
+    cls.add_method('DisconnectWithoutContext', 
+                   'bool', 
+                   [param('ns3::ObjectBase *', 'obj', transfer_ownership=False), param('ns3::CallbackBase const &', 'cb')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    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_Ns3AttributeAccessor_methods(root_module, cls):
+    ## attribute.h (module 'core'): ns3::AttributeAccessor::AttributeAccessor(ns3::AttributeAccessor const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::AttributeAccessor const &', 'arg0')])
+    ## attribute.h (module 'core'): ns3::AttributeAccessor::AttributeAccessor() [constructor]
+    cls.add_constructor([])
+    ## attribute.h (module 'core'): bool ns3::AttributeAccessor::Get(ns3::ObjectBase const * object, ns3::AttributeValue & attribute) const [member function]
+    cls.add_method('Get', 
+                   'bool', 
+                   [param('ns3::ObjectBase const *', 'object'), param('ns3::AttributeValue &', 'attribute')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::AttributeAccessor::HasGetter() const [member function]
+    cls.add_method('HasGetter', 
+                   'bool', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::AttributeAccessor::HasSetter() const [member function]
+    cls.add_method('HasSetter', 
+                   'bool', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::AttributeAccessor::Set(ns3::ObjectBase * object, ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Set', 
+                   'bool', 
+                   [param('ns3::ObjectBase *', 'object', transfer_ownership=False), param('ns3::AttributeValue const &', 'value')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    return
+
+def register_Ns3AttributeChecker_methods(root_module, cls):
+    ## attribute.h (module 'core'): ns3::AttributeChecker::AttributeChecker(ns3::AttributeChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::AttributeChecker const &', 'arg0')])
+    ## attribute.h (module 'core'): ns3::AttributeChecker::AttributeChecker() [constructor]
+    cls.add_constructor([])
+    ## attribute.h (module 'core'): bool ns3::AttributeChecker::Check(ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Check', 
+                   'bool', 
+                   [param('ns3::AttributeValue const &', 'value')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::AttributeChecker::Copy(ns3::AttributeValue const & source, ns3::AttributeValue & destination) const [member function]
+    cls.add_method('Copy', 
+                   'bool', 
+                   [param('ns3::AttributeValue const &', 'source'), param('ns3::AttributeValue &', 'destination')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::AttributeChecker::Create() const [member function]
+    cls.add_method('Create', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::AttributeChecker::CreateValidValue(ns3::AttributeValue const & value) const [member function]
+    cls.add_method('CreateValidValue', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True)
+    ## attribute.h (module 'core'): std::string ns3::AttributeChecker::GetUnderlyingTypeInformation() const [member function]
+    cls.add_method('GetUnderlyingTypeInformation', 
+                   'std::string', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): std::string ns3::AttributeChecker::GetValueTypeName() const [member function]
+    cls.add_method('GetValueTypeName', 
+                   'std::string', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::AttributeChecker::HasUnderlyingTypeInformation() const [member function]
+    cls.add_method('HasUnderlyingTypeInformation', 
+                   'bool', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    return
+
+def register_Ns3AttributeValue_methods(root_module, cls):
+    ## attribute.h (module 'core'): ns3::AttributeValue::AttributeValue(ns3::AttributeValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::AttributeValue const &', 'arg0')])
+    ## attribute.h (module 'core'): ns3::AttributeValue::AttributeValue() [constructor]
+    cls.add_constructor([])
+    ## attribute.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::AttributeValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::AttributeValue::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_pure_virtual=True, is_virtual=True)
+    ## attribute.h (module 'core'): std::string ns3::AttributeValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
+    cls.add_method('SerializeToString', 
+                   'std::string', 
+                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    return
+
+def register_Ns3CallbackChecker_methods(root_module, cls):
+    ## callback.h (module 'core'): ns3::CallbackChecker::CallbackChecker() [constructor]
+    cls.add_constructor([])
+    ## callback.h (module 'core'): ns3::CallbackChecker::CallbackChecker(ns3::CallbackChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::CallbackChecker const &', 'arg0')])
+    return
+
+def register_Ns3CallbackImplBase_methods(root_module, cls):
+    ## callback.h (module 'core'): ns3::CallbackImplBase::CallbackImplBase() [constructor]
+    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'): 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)
+    return
+
+def register_Ns3CallbackValue_methods(root_module, cls):
+    ## callback.h (module 'core'): ns3::CallbackValue::CallbackValue(ns3::CallbackValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::CallbackValue const &', 'arg0')])
+    ## callback.h (module 'core'): ns3::CallbackValue::CallbackValue() [constructor]
+    cls.add_constructor([])
+    ## callback.h (module 'core'): ns3::CallbackValue::CallbackValue(ns3::CallbackBase const & base) [constructor]
+    cls.add_constructor([param('ns3::CallbackBase const &', 'base')])
+    ## callback.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::CallbackValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## callback.h (module 'core'): bool ns3::CallbackValue::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)
+    ## callback.h (module 'core'): std::string ns3::CallbackValue::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)
+    ## callback.h (module 'core'): void ns3::CallbackValue::Set(ns3::CallbackBase base) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('ns3::CallbackBase', 'base')])
+    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')])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeValue::EmptyAttributeValue() [constructor]
+    cls.add_constructor([])
+    ## attribute.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::EmptyAttributeValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, visibility='private', is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeValue::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')], 
+                   visibility='private', is_virtual=True)
+    ## attribute.h (module 'core'): std::string ns3::EmptyAttributeValue::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, visibility='private', is_virtual=True)
+    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')])
+    ## event-impl.h (module 'core'): ns3::EventImpl::EventImpl() [constructor]
+    cls.add_constructor([])
+    ## event-impl.h (module 'core'): void ns3::EventImpl::Cancel() [member function]
+    cls.add_method('Cancel', 
+                   'void', 
+                   [])
+    ## event-impl.h (module 'core'): void ns3::EventImpl::Invoke() [member function]
+    cls.add_method('Invoke', 
+                   'void', 
+                   [])
+    ## event-impl.h (module 'core'): bool ns3::EventImpl::IsCancelled() [member function]
+    cls.add_method('IsCancelled', 
+                   'bool', 
+                   [])
+    ## event-impl.h (module 'core'): void ns3::EventImpl::Notify() [member function]
+    cls.add_method('Notify', 
+                   'void', 
+                   [], 
+                   is_pure_virtual=True, visibility='protected', 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_Ns3LrWpanCsmaCa_methods(root_module, cls):
+    ## lr-wpan-csmaca.h (module 'lr-wpan'): static ns3::TypeId ns3::LrWpanCsmaCa::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## lr-wpan-csmaca.h (module 'lr-wpan'): ns3::LrWpanCsmaCa::LrWpanCsmaCa() [constructor]
+    cls.add_constructor([])
+    ## lr-wpan-csmaca.h (module 'lr-wpan'): void ns3::LrWpanCsmaCa::SetMac(ns3::Ptr<ns3::LrWpanMac> mac) [member function]
+    cls.add_method('SetMac', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::LrWpanMac >', 'mac')])
+    ## lr-wpan-csmaca.h (module 'lr-wpan'): ns3::Ptr<ns3::LrWpanMac> ns3::LrWpanCsmaCa::GetMac() const [member function]
+    cls.add_method('GetMac', 
+                   'ns3::Ptr< ns3::LrWpanMac >', 
+                   [], 
+                   is_const=True)
+    ## lr-wpan-csmaca.h (module 'lr-wpan'): void ns3::LrWpanCsmaCa::SetSlottedCsmaCa() [member function]
+    cls.add_method('SetSlottedCsmaCa', 
+                   'void', 
+                   [])
+    ## lr-wpan-csmaca.h (module 'lr-wpan'): void ns3::LrWpanCsmaCa::SetUnSlottedCsmaCa() [member function]
+    cls.add_method('SetUnSlottedCsmaCa', 
+                   'void', 
+                   [])
+    ## lr-wpan-csmaca.h (module 'lr-wpan'): bool ns3::LrWpanCsmaCa::IsSlottedCsmaCa() const [member function]
+    cls.add_method('IsSlottedCsmaCa', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## lr-wpan-csmaca.h (module 'lr-wpan'): bool ns3::LrWpanCsmaCa::IsUnSlottedCsmaCa() const [member function]
+    cls.add_method('IsUnSlottedCsmaCa', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## lr-wpan-csmaca.h (module 'lr-wpan'): void ns3::LrWpanCsmaCa::SetMacMinBE(uint8_t macMinBE) [member function]
+    cls.add_method('SetMacMinBE', 
+                   'void', 
+                   [param('uint8_t', 'macMinBE')])
+    ## lr-wpan-csmaca.h (module 'lr-wpan'): uint8_t ns3::LrWpanCsmaCa::GetMacMinBE() const [member function]
+    cls.add_method('GetMacMinBE', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## lr-wpan-csmaca.h (module 'lr-wpan'): void ns3::LrWpanCsmaCa::SetMacMaxBE(uint8_t macMaxBE) [member function]
+    cls.add_method('SetMacMaxBE', 
+                   'void', 
+                   [param('uint8_t', 'macMaxBE')])
+    ## lr-wpan-csmaca.h (module 'lr-wpan'): uint8_t ns3::LrWpanCsmaCa::GetMacMaxBE() const [member function]
+    cls.add_method('GetMacMaxBE', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## lr-wpan-csmaca.h (module 'lr-wpan'): void ns3::LrWpanCsmaCa::SetMacMaxCSMABackoffs(uint8_t macMaxCSMABackoffs) [member function]
+    cls.add_method('SetMacMaxCSMABackoffs', 
+                   'void', 
+                   [param('uint8_t', 'macMaxCSMABackoffs')])
+    ## lr-wpan-csmaca.h (module 'lr-wpan'): uint8_t ns3::LrWpanCsmaCa::GetMacMaxCSMABackoffs() const [member function]
+    cls.add_method('GetMacMaxCSMABackoffs', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## lr-wpan-csmaca.h (module 'lr-wpan'): void ns3::LrWpanCsmaCa::SetUnitBackoffPeriod(uint64_t unitBackoffPeriod) [member function]
+    cls.add_method('SetUnitBackoffPeriod', 
+                   'void', 
+                   [param('uint64_t', 'unitBackoffPeriod')])
+    ## lr-wpan-csmaca.h (module 'lr-wpan'): uint64_t ns3::LrWpanCsmaCa::GetUnitBackoffPeriod() const [member function]
+    cls.add_method('GetUnitBackoffPeriod', 
+                   'uint64_t', 
+                   [], 
+                   is_const=True)
+    ## lr-wpan-csmaca.h (module 'lr-wpan'): ns3::Time ns3::LrWpanCsmaCa::GetTimeToNextSlot() const [member function]
+    cls.add_method('GetTimeToNextSlot', 
+                   'ns3::Time', 
+                   [], 
+                   is_const=True)
+    ## lr-wpan-csmaca.h (module 'lr-wpan'): void ns3::LrWpanCsmaCa::Start() [member function]
+    cls.add_method('Start', 
+                   'void', 
+                   [])
+    ## lr-wpan-csmaca.h (module 'lr-wpan'): void ns3::LrWpanCsmaCa::Cancel() [member function]
+    cls.add_method('Cancel', 
+                   'void', 
+                   [])
+    ## lr-wpan-csmaca.h (module 'lr-wpan'): void ns3::LrWpanCsmaCa::RandomBackoffDelay() [member function]
+    cls.add_method('RandomBackoffDelay', 
+                   'void', 
+                   [])
+    ## lr-wpan-csmaca.h (module 'lr-wpan'): void ns3::LrWpanCsmaCa::CanProceed() [member function]
+    cls.add_method('CanProceed', 
+                   'void', 
+                   [])
+    ## lr-wpan-csmaca.h (module 'lr-wpan'): void ns3::LrWpanCsmaCa::RequestCCA() [member function]
+    cls.add_method('RequestCCA', 
+                   'void', 
+                   [])
+    ## lr-wpan-csmaca.h (module 'lr-wpan'): void ns3::LrWpanCsmaCa::PlmeCcaConfirm(ns3::LrWpanPhyEnumeration status) [member function]
+    cls.add_method('PlmeCcaConfirm', 
+                   'void', 
+                   [param('ns3::LrWpanPhyEnumeration', 'status')])
+    ## lr-wpan-csmaca.h (module 'lr-wpan'): void ns3::LrWpanCsmaCa::SetLrWpanMacStateCallback(ns3::LrWpanMacStateCallback macState) [member function]
+    cls.add_method('SetLrWpanMacStateCallback', 
+                   'void', 
+                   [param('ns3::LrWpanMacStateCallback', 'macState')])
+    ## lr-wpan-csmaca.h (module 'lr-wpan'): int64_t ns3::LrWpanCsmaCa::AssignStreams(int64_t stream) [member function]
+    cls.add_method('AssignStreams', 
+                   'int64_t', 
+                   [param('int64_t', 'stream')])
+    ## lr-wpan-csmaca.h (module 'lr-wpan'): uint8_t ns3::LrWpanCsmaCa::GetNB() [member function]
+    cls.add_method('GetNB', 
+                   'uint8_t', 
+                   [])
+    ## lr-wpan-csmaca.h (module 'lr-wpan'): void ns3::LrWpanCsmaCa::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   visibility='private', is_virtual=True)
+    return
+
+def register_Ns3LrWpanErrorModel_methods(root_module, cls):
+    ## lr-wpan-error-model.h (module 'lr-wpan'): ns3::LrWpanErrorModel::LrWpanErrorModel(ns3::LrWpanErrorModel const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::LrWpanErrorModel const &', 'arg0')])
+    ## lr-wpan-error-model.h (module 'lr-wpan'): ns3::LrWpanErrorModel::LrWpanErrorModel() [constructor]
+    cls.add_constructor([])
+    ## lr-wpan-error-model.h (module 'lr-wpan'): double ns3::LrWpanErrorModel::GetChunkSuccessRate(double snr, uint32_t nbits) const [member function]
+    cls.add_method('GetChunkSuccessRate', 
+                   'double', 
+                   [param('double', 'snr'), param('uint32_t', 'nbits')], 
+                   is_const=True)
+    ## lr-wpan-error-model.h (module 'lr-wpan'): static ns3::TypeId ns3::LrWpanErrorModel::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    return
+
+def register_Ns3LrWpanInterferenceHelper_methods(root_module, cls):
+    ## lr-wpan-interference-helper.h (module 'lr-wpan'): ns3::LrWpanInterferenceHelper::LrWpanInterferenceHelper(ns3::Ptr<ns3::SpectrumModel const> spectrumModel) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::SpectrumModel const >', 'spectrumModel')])
+    ## lr-wpan-interference-helper.h (module 'lr-wpan'): bool ns3::LrWpanInterferenceHelper::AddSignal(ns3::Ptr<ns3::SpectrumValue const> signal) [member function]
+    cls.add_method('AddSignal', 
+                   'bool', 
+                   [param('ns3::Ptr< ns3::SpectrumValue const >', 'signal')])
+    ## lr-wpan-interference-helper.h (module 'lr-wpan'): bool ns3::LrWpanInterferenceHelper::RemoveSignal(ns3::Ptr<ns3::SpectrumValue const> signal) [member function]
+    cls.add_method('RemoveSignal', 
+                   'bool', 
+                   [param('ns3::Ptr< ns3::SpectrumValue const >', 'signal')])
+    ## lr-wpan-interference-helper.h (module 'lr-wpan'): void ns3::LrWpanInterferenceHelper::ClearSignals() [member function]
+    cls.add_method('ClearSignals', 
+                   'void', 
+                   [])
+    ## lr-wpan-interference-helper.h (module 'lr-wpan'): ns3::Ptr<ns3::SpectrumValue> ns3::LrWpanInterferenceHelper::GetSignalPsd() const [member function]
+    cls.add_method('GetSignalPsd', 
+                   'ns3::Ptr< ns3::SpectrumValue >', 
+                   [], 
+                   is_const=True)
+    ## lr-wpan-interference-helper.h (module 'lr-wpan'): ns3::Ptr<ns3::SpectrumModel const> ns3::LrWpanInterferenceHelper::GetSpectrumModel() const [member function]
+    cls.add_method('GetSpectrumModel', 
+                   'ns3::Ptr< ns3::SpectrumModel const >', 
+                   [], 
+                   is_const=True)
+    return
+
+def register_Ns3LrWpanMac_methods(root_module, cls):
+    ## lr-wpan-mac.h (module 'lr-wpan'): ns3::LrWpanMac::LrWpanMac(ns3::LrWpanMac const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::LrWpanMac const &', 'arg0')])
+    ## lr-wpan-mac.h (module 'lr-wpan'): ns3::LrWpanMac::LrWpanMac() [constructor]
+    cls.add_constructor([])
+    ## lr-wpan-mac.h (module 'lr-wpan'): ns3::LrWpanAssociationStatus ns3::LrWpanMac::GetAssociationStatus() const [member function]
+    cls.add_method('GetAssociationStatus', 
+                   'ns3::LrWpanAssociationStatus', 
+                   [], 
+                   is_const=True)
+    ## lr-wpan-mac.h (module 'lr-wpan'): ns3::Mac64Address ns3::LrWpanMac::GetExtendedAddress() const [member function]
+    cls.add_method('GetExtendedAddress', 
+                   'ns3::Mac64Address', 
+                   [], 
+                   is_const=True)
+    ## lr-wpan-mac.h (module 'lr-wpan'): uint64_t ns3::LrWpanMac::GetMacAckWaitDuration() const [member function]
+    cls.add_method('GetMacAckWaitDuration', 
+                   'uint64_t', 
+                   [], 
+                   is_const=True)
+    ## lr-wpan-mac.h (module 'lr-wpan'): uint8_t ns3::LrWpanMac::GetMacMaxFrameRetries() const [member function]
+    cls.add_method('GetMacMaxFrameRetries', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## lr-wpan-mac.h (module 'lr-wpan'): uint16_t ns3::LrWpanMac::GetPanId() const [member function]
+    cls.add_method('GetPanId', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## lr-wpan-mac.h (module 'lr-wpan'): ns3::Ptr<ns3::LrWpanPhy> ns3::LrWpanMac::GetPhy() [member function]
+    cls.add_method('GetPhy', 
+                   'ns3::Ptr< ns3::LrWpanPhy >', 
+                   [])
+    ## lr-wpan-mac.h (module 'lr-wpan'): bool ns3::LrWpanMac::GetRxOnWhenIdle() [member function]
+    cls.add_method('GetRxOnWhenIdle', 
+                   'bool', 
+                   [])
+    ## lr-wpan-mac.h (module 'lr-wpan'): ns3::Mac16Address ns3::LrWpanMac::GetShortAddress() const [member function]
+    cls.add_method('GetShortAddress', 
+                   'ns3::Mac16Address', 
+                   [], 
+                   is_const=True)
+    ## lr-wpan-mac.h (module 'lr-wpan'): static ns3::TypeId ns3::LrWpanMac::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## lr-wpan-mac.h (module 'lr-wpan'): void ns3::LrWpanMac::McpsDataRequest(ns3::McpsDataRequestParams params, ns3::Ptr<ns3::Packet> p) [member function]
+    cls.add_method('McpsDataRequest', 
+                   'void', 
+                   [param('ns3::McpsDataRequestParams', 'params'), param('ns3::Ptr< ns3::Packet >', 'p')])
+    ## lr-wpan-mac.h (module 'lr-wpan'): void ns3::LrWpanMac::PdDataConfirm(ns3::LrWpanPhyEnumeration status) [member function]
+    cls.add_method('PdDataConfirm', 
+                   'void', 
+                   [param('ns3::LrWpanPhyEnumeration', 'status')])
+    ## lr-wpan-mac.h (module 'lr-wpan'): void ns3::LrWpanMac::PdDataIndication(uint32_t psduLength, ns3::Ptr<ns3::Packet> p, uint8_t lqi) [member function]
+    cls.add_method('PdDataIndication', 
+                   'void', 
+                   [param('uint32_t', 'psduLength'), param('ns3::Ptr< ns3::Packet >', 'p'), param('uint8_t', 'lqi')])
+    ## lr-wpan-mac.h (module 'lr-wpan'): void ns3::LrWpanMac::PlmeCcaConfirm(ns3::LrWpanPhyEnumeration status) [member function]
+    cls.add_method('PlmeCcaConfirm', 
+                   'void', 
+                   [param('ns3::LrWpanPhyEnumeration', 'status')])
+    ## lr-wpan-mac.h (module 'lr-wpan'): void ns3::LrWpanMac::PlmeEdConfirm(ns3::LrWpanPhyEnumeration status, uint8_t energyLevel) [member function]
+    cls.add_method('PlmeEdConfirm', 
+                   'void', 
+                   [param('ns3::LrWpanPhyEnumeration', 'status'), param('uint8_t', 'energyLevel')])
+    ## lr-wpan-mac.h (module 'lr-wpan'): void ns3::LrWpanMac::PlmeGetAttributeConfirm(ns3::LrWpanPhyEnumeration status, ns3::LrWpanPibAttributeIdentifier id, ns3::LrWpanPhyPibAttributes * attribute) [member function]
+    cls.add_method('PlmeGetAttributeConfirm', 
+                   'void', 
+                   [param('ns3::LrWpanPhyEnumeration', 'status'), param('ns3::LrWpanPibAttributeIdentifier', 'id'), param('ns3::LrWpanPhyPibAttributes *', 'attribute')])
+    ## lr-wpan-mac.h (module 'lr-wpan'): void ns3::LrWpanMac::PlmeSetAttributeConfirm(ns3::LrWpanPhyEnumeration status, ns3::LrWpanPibAttributeIdentifier id) [member function]
+    cls.add_method('PlmeSetAttributeConfirm', 
+                   'void', 
+                   [param('ns3::LrWpanPhyEnumeration', 'status'), param('ns3::LrWpanPibAttributeIdentifier', 'id')])
+    ## lr-wpan-mac.h (module 'lr-wpan'): void ns3::LrWpanMac::PlmeSetTRXStateConfirm(ns3::LrWpanPhyEnumeration status) [member function]
+    cls.add_method('PlmeSetTRXStateConfirm', 
+                   'void', 
+                   [param('ns3::LrWpanPhyEnumeration', 'status')])
+    ## lr-wpan-mac.h (module 'lr-wpan'): void ns3::LrWpanMac::SetAssociationStatus(ns3::LrWpanAssociationStatus status) [member function]
+    cls.add_method('SetAssociationStatus', 
+                   'void', 
+                   [param('ns3::LrWpanAssociationStatus', 'status')])
+    ## lr-wpan-mac.h (module 'lr-wpan'): void ns3::LrWpanMac::SetCsmaCa(ns3::Ptr<ns3::LrWpanCsmaCa> csmaCa) [member function]
+    cls.add_method('SetCsmaCa', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::LrWpanCsmaCa >', 'csmaCa')])
+    ## lr-wpan-mac.h (module 'lr-wpan'): void ns3::LrWpanMac::SetExtendedAddress(ns3::Mac64Address address) [member function]
+    cls.add_method('SetExtendedAddress', 
+                   'void', 
+                   [param('ns3::Mac64Address', 'address')])
+    ## lr-wpan-mac.h (module 'lr-wpan'): void ns3::LrWpanMac::SetLrWpanMacState(ns3::LrWpanMacState macState) [member function]
+    cls.add_method('SetLrWpanMacState', 
+                   'void', 
+                   [param('ns3::LrWpanMacState', 'macState')])
+    ## lr-wpan-mac.h (module 'lr-wpan'): void ns3::LrWpanMac::SetMacMaxFrameRetries(uint8_t retries) [member function]
+    cls.add_method('SetMacMaxFrameRetries', 
+                   'void', 
+                   [param('uint8_t', 'retries')])
+    ## lr-wpan-mac.h (module 'lr-wpan'): void ns3::LrWpanMac::SetMcpsDataConfirmCallback(ns3::McpsDataConfirmCallback c) [member function]
+    cls.add_method('SetMcpsDataConfirmCallback', 
+                   'void', 
+                   [param('ns3::McpsDataConfirmCallback', 'c')])
+    ## lr-wpan-mac.h (module 'lr-wpan'): void ns3::LrWpanMac::SetMcpsDataIndicationCallback(ns3::McpsDataIndicationCallback c) [member function]
+    cls.add_method('SetMcpsDataIndicationCallback', 
+                   'void', 
+                   [param('ns3::McpsDataIndicationCallback', 'c')])
+    ## lr-wpan-mac.h (module 'lr-wpan'): void ns3::LrWpanMac::SetPanId(uint16_t panId) [member function]
+    cls.add_method('SetPanId', 
+                   'void', 
+                   [param('uint16_t', 'panId')])
+    ## lr-wpan-mac.h (module 'lr-wpan'): void ns3::LrWpanMac::SetPhy(ns3::Ptr<ns3::LrWpanPhy> phy) [member function]
+    cls.add_method('SetPhy', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::LrWpanPhy >', 'phy')])
+    ## lr-wpan-mac.h (module 'lr-wpan'): void ns3::LrWpanMac::SetRxOnWhenIdle(bool rxOnWhenIdle) [member function]
+    cls.add_method('SetRxOnWhenIdle', 
+                   'void', 
+                   [param('bool', 'rxOnWhenIdle')])
+    ## lr-wpan-mac.h (module 'lr-wpan'): void ns3::LrWpanMac::SetShortAddress(ns3::Mac16Address address) [member function]
+    cls.add_method('SetShortAddress', 
+                   'void', 
+                   [param('ns3::Mac16Address', 'address')])
+    ## lr-wpan-mac.h (module 'lr-wpan'): ns3::LrWpanMac::aMinMPDUOverhead [variable]
+    cls.add_static_attribute('aMinMPDUOverhead', 'uint32_t const', is_const=True)
+    ## lr-wpan-mac.h (module 'lr-wpan'): ns3::LrWpanMac::m_aBaseSlotDuration [variable]
+    cls.add_instance_attribute('m_aBaseSlotDuration', 'uint64_t', is_const=False)
+    ## lr-wpan-mac.h (module 'lr-wpan'): ns3::LrWpanMac::m_aBaseSuperframeDuration [variable]
+    cls.add_instance_attribute('m_aBaseSuperframeDuration', 'uint64_t', is_const=False)
+    ## lr-wpan-mac.h (module 'lr-wpan'): ns3::LrWpanMac::m_aNumSuperframeSlots [variable]
+    cls.add_instance_attribute('m_aNumSuperframeSlots', 'uint64_t', is_const=False)
+    ## lr-wpan-mac.h (module 'lr-wpan'): ns3::LrWpanMac::m_macBeaconOrder [variable]
+    cls.add_instance_attribute('m_macBeaconOrder', 'uint64_t', is_const=False)
+    ## lr-wpan-mac.h (module 'lr-wpan'): ns3::LrWpanMac::m_macBeaconTxTime [variable]
+    cls.add_instance_attribute('m_macBeaconTxTime', 'uint64_t', is_const=False)
+    ## lr-wpan-mac.h (module 'lr-wpan'): ns3::LrWpanMac::m_macDsn [variable]
+    cls.add_instance_attribute('m_macDsn', 'ns3::SequenceNumber8', is_const=False)
+    ## lr-wpan-mac.h (module 'lr-wpan'): ns3::LrWpanMac::m_macMaxFrameRetries [variable]
+    cls.add_instance_attribute('m_macMaxFrameRetries', 'uint8_t', is_const=False)
+    ## lr-wpan-mac.h (module 'lr-wpan'): ns3::LrWpanMac::m_macPanId [variable]
+    cls.add_instance_attribute('m_macPanId', 'uint16_t', is_const=False)
+    ## lr-wpan-mac.h (module 'lr-wpan'): ns3::LrWpanMac::m_macPromiscuousMode [variable]
+    cls.add_instance_attribute('m_macPromiscuousMode', 'bool', is_const=False)
+    ## lr-wpan-mac.h (module 'lr-wpan'): ns3::LrWpanMac::m_macRxOnWhenIdle [variable]
+    cls.add_instance_attribute('m_macRxOnWhenIdle', 'bool', is_const=False)
+    ## lr-wpan-mac.h (module 'lr-wpan'): ns3::LrWpanMac::m_macSuperframeOrder [variable]
+    cls.add_instance_attribute('m_macSuperframeOrder', 'uint64_t', is_const=False)
+    ## lr-wpan-mac.h (module 'lr-wpan'): ns3::LrWpanMac::m_macSyncSymbolOffset [variable]
+    cls.add_instance_attribute('m_macSyncSymbolOffset', 'uint64_t', is_const=False)
+    ## lr-wpan-mac.h (module 'lr-wpan'): void ns3::LrWpanMac::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    ## lr-wpan-mac.h (module 'lr-wpan'): void ns3::LrWpanMac::DoInitialize() [member function]
+    cls.add_method('DoInitialize', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    return
+
+def register_Ns3LrWpanMacTrailer_methods(root_module, cls):
+    ## lr-wpan-mac-trailer.h (module 'lr-wpan'): ns3::LrWpanMacTrailer::LrWpanMacTrailer(ns3::LrWpanMacTrailer const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::LrWpanMacTrailer const &', 'arg0')])
+    ## lr-wpan-mac-trailer.h (module 'lr-wpan'): ns3::LrWpanMacTrailer::LrWpanMacTrailer() [constructor]
+    cls.add_constructor([])
+    ## lr-wpan-mac-trailer.h (module 'lr-wpan'): bool ns3::LrWpanMacTrailer::CheckFcs(ns3::Ptr<const ns3::Packet> p) [member function]
+    cls.add_method('CheckFcs', 
+                   'bool', 
+                   [param('ns3::Ptr< ns3::Packet const >', 'p')])
+    ## lr-wpan-mac-trailer.h (module 'lr-wpan'): uint32_t ns3::LrWpanMacTrailer::Deserialize(ns3::Buffer::Iterator start) [member function]
+    cls.add_method('Deserialize', 
+                   'uint32_t', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_virtual=True)
+    ## lr-wpan-mac-trailer.h (module 'lr-wpan'): void ns3::LrWpanMacTrailer::EnableFcs(bool enable) [member function]
+    cls.add_method('EnableFcs', 
+                   'void', 
+                   [param('bool', 'enable')])
+    ## lr-wpan-mac-trailer.h (module 'lr-wpan'): uint16_t ns3::LrWpanMacTrailer::GetFcs() const [member function]
+    cls.add_method('GetFcs', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## lr-wpan-mac-trailer.h (module 'lr-wpan'): ns3::TypeId ns3::LrWpanMacTrailer::GetInstanceTypeId() const [member function]
+    cls.add_method('GetInstanceTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## lr-wpan-mac-trailer.h (module 'lr-wpan'): uint32_t ns3::LrWpanMacTrailer::GetSerializedSize() const [member function]
+    cls.add_method('GetSerializedSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## lr-wpan-mac-trailer.h (module 'lr-wpan'): static ns3::TypeId ns3::LrWpanMacTrailer::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## lr-wpan-mac-trailer.h (module 'lr-wpan'): bool ns3::LrWpanMacTrailer::IsFcsEnabled() [member function]
+    cls.add_method('IsFcsEnabled', 
+                   'bool', 
+                   [])
+    ## lr-wpan-mac-trailer.h (module 'lr-wpan'): void ns3::LrWpanMacTrailer::Print(std::ostream & os) const [member function]
+    cls.add_method('Print', 
+                   'void', 
+                   [param('std::ostream &', 'os')], 
+                   is_const=True, is_virtual=True)
+    ## lr-wpan-mac-trailer.h (module 'lr-wpan'): void ns3::LrWpanMacTrailer::Serialize(ns3::Buffer::Iterator start) const [member function]
+    cls.add_method('Serialize', 
+                   'void', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_const=True, is_virtual=True)
+    ## lr-wpan-mac-trailer.h (module 'lr-wpan'): void ns3::LrWpanMacTrailer::SetFcs(ns3::Ptr<const ns3::Packet> p) [member function]
+    cls.add_method('SetFcs', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Packet const >', 'p')])
+    ## lr-wpan-mac-trailer.h (module 'lr-wpan'): ns3::LrWpanMacTrailer::LR_WPAN_MAC_FCS_LENGTH [variable]
+    cls.add_static_attribute('LR_WPAN_MAC_FCS_LENGTH', 'uint16_t const', is_const=True)
+    return
+
+def register_Ns3LrWpanPhy_methods(root_module, cls):
+    ## lr-wpan-phy.h (module 'lr-wpan'): ns3::LrWpanPhy::aMaxPhyPacketSize [variable]
+    cls.add_static_attribute('aMaxPhyPacketSize', 'uint32_t const', is_const=True)
+    ## lr-wpan-phy.h (module 'lr-wpan'): ns3::LrWpanPhy::aTurnaroundTime [variable]
+    cls.add_static_attribute('aTurnaroundTime', 'uint32_t const', is_const=True)
+    ## lr-wpan-phy.h (module 'lr-wpan'): static ns3::TypeId ns3::LrWpanPhy::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## lr-wpan-phy.h (module 'lr-wpan'): ns3::LrWpanPhy::LrWpanPhy() [constructor]
+    cls.add_constructor([])
+    ## lr-wpan-phy.h (module 'lr-wpan'): void ns3::LrWpanPhy::SetMobility(ns3::Ptr<ns3::MobilityModel> m) [member function]
+    cls.add_method('SetMobility', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::MobilityModel >', 'm')], 
+                   is_virtual=True)
+    ## lr-wpan-phy.h (module 'lr-wpan'): ns3::Ptr<ns3::MobilityModel> ns3::LrWpanPhy::GetMobility() [member function]
+    cls.add_method('GetMobility', 
+                   'ns3::Ptr< ns3::MobilityModel >', 
+                   [], 
+                   is_virtual=True)
+    ## lr-wpan-phy.h (module 'lr-wpan'): void ns3::LrWpanPhy::SetChannel(ns3::Ptr<ns3::SpectrumChannel> c) [member function]
+    cls.add_method('SetChannel', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::SpectrumChannel >', 'c')], 
+                   is_virtual=True)
+    ## lr-wpan-phy.h (module 'lr-wpan'): ns3::Ptr<ns3::SpectrumChannel> ns3::LrWpanPhy::GetChannel() [member function]
+    cls.add_method('GetChannel', 
+                   'ns3::Ptr< ns3::SpectrumChannel >', 
+                   [])
+    ## lr-wpan-phy.h (module 'lr-wpan'): void ns3::LrWpanPhy::SetDevice(ns3::Ptr<ns3::NetDevice> d) [member function]
+    cls.add_method('SetDevice', 
+                   '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]
+    cls.add_method('GetDevice', 
+                   'ns3::Ptr< ns3::NetDevice >', 
+                   [], 
+                   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', 
+                   [param('ns3::Ptr< ns3::AntennaModel >', 'a')])
+    ## lr-wpan-phy.h (module 'lr-wpan'): ns3::Ptr<ns3::AntennaModel> ns3::LrWpanPhy::GetRxAntenna() [member function]
+    cls.add_method('GetRxAntenna', 
+                   'ns3::Ptr< ns3::AntennaModel >', 
+                   [], 
+                   is_virtual=True)
+    ## lr-wpan-phy.h (module 'lr-wpan'): ns3::Ptr<ns3::SpectrumModel const> ns3::LrWpanPhy::GetRxSpectrumModel() const [member function]
+    cls.add_method('GetRxSpectrumModel', 
+                   'ns3::Ptr< ns3::SpectrumModel const >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## lr-wpan-phy.h (module 'lr-wpan'): void ns3::LrWpanPhy::SetTxPowerSpectralDensity(ns3::Ptr<ns3::SpectrumValue> txPsd) [member function]
+    cls.add_method('SetTxPowerSpectralDensity', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::SpectrumValue >', 'txPsd')])
+    ## lr-wpan-phy.h (module 'lr-wpan'): void ns3::LrWpanPhy::SetNoisePowerSpectralDensity(ns3::Ptr<ns3::SpectrumValue const> noisePsd) [member function]
+    cls.add_method('SetNoisePowerSpectralDensity', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::SpectrumValue const >', 'noisePsd')])
+    ## lr-wpan-phy.h (module 'lr-wpan'): ns3::Ptr<ns3::SpectrumValue const> ns3::LrWpanPhy::GetNoisePowerSpectralDensity() [member function]
+    cls.add_method('GetNoisePowerSpectralDensity', 
+                   'ns3::Ptr< ns3::SpectrumValue const >', 
+                   [])
+    ## lr-wpan-phy.h (module 'lr-wpan'): void ns3::LrWpanPhy::StartRx(ns3::Ptr<ns3::SpectrumSignalParameters> params) [member function]
+    cls.add_method('StartRx', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::SpectrumSignalParameters >', 'params')], 
+                   is_virtual=True)
+    ## lr-wpan-phy.h (module 'lr-wpan'): void ns3::LrWpanPhy::PdDataRequest(uint32_t const psduLength, ns3::Ptr<ns3::Packet> p) [member function]
+    cls.add_method('PdDataRequest', 
+                   'void', 
+                   [param('uint32_t const', 'psduLength'), param('ns3::Ptr< ns3::Packet >', 'p')])
+    ## lr-wpan-phy.h (module 'lr-wpan'): void ns3::LrWpanPhy::PlmeCcaRequest() [member function]
+    cls.add_method('PlmeCcaRequest', 
+                   'void', 
+                   [])
+    ## lr-wpan-phy.h (module 'lr-wpan'): void ns3::LrWpanPhy::PlmeEdRequest() [member function]
+    cls.add_method('PlmeEdRequest', 
+                   'void', 
+                   [])
+    ## lr-wpan-phy.h (module 'lr-wpan'): void ns3::LrWpanPhy::PlmeGetAttributeRequest(ns3::LrWpanPibAttributeIdentifier id) [member function]
+    cls.add_method('PlmeGetAttributeRequest', 
+                   'void', 
+                   [param('ns3::LrWpanPibAttributeIdentifier', 'id')])
+    ## lr-wpan-phy.h (module 'lr-wpan'): void ns3::LrWpanPhy::PlmeSetTRXStateRequest(ns3::LrWpanPhyEnumeration state) [member function]
+    cls.add_method('PlmeSetTRXStateRequest', 
+                   'void', 
+                   [param('ns3::LrWpanPhyEnumeration', 'state')])
+    ## lr-wpan-phy.h (module 'lr-wpan'): void ns3::LrWpanPhy::PlmeSetAttributeRequest(ns3::LrWpanPibAttributeIdentifier id, ns3::LrWpanPhyPibAttributes * attribute) [member function]
+    cls.add_method('PlmeSetAttributeRequest', 
+                   'void', 
+                   [param('ns3::LrWpanPibAttributeIdentifier', 'id'), param('ns3::LrWpanPhyPibAttributes *', 'attribute')])
+    ## lr-wpan-phy.h (module 'lr-wpan'): void ns3::LrWpanPhy::SetPdDataIndicationCallback(ns3::PdDataIndicationCallback c) [member function]
+    cls.add_method('SetPdDataIndicationCallback', 
+                   'void', 
+                   [param('ns3::PdDataIndicationCallback', 'c')])
+    ## lr-wpan-phy.h (module 'lr-wpan'): void ns3::LrWpanPhy::SetPdDataConfirmCallback(ns3::PdDataConfirmCallback c) [member function]
+    cls.add_method('SetPdDataConfirmCallback', 
+                   'void', 
+                   [param('ns3::PdDataConfirmCallback', 'c')])
+    ## lr-wpan-phy.h (module 'lr-wpan'): void ns3::LrWpanPhy::SetPlmeCcaConfirmCallback(ns3::PlmeCcaConfirmCallback c) [member function]
+    cls.add_method('SetPlmeCcaConfirmCallback', 
+                   'void', 
+                   [param('ns3::PlmeCcaConfirmCallback', 'c')])
+    ## lr-wpan-phy.h (module 'lr-wpan'): void ns3::LrWpanPhy::SetPlmeEdConfirmCallback(ns3::PlmeEdConfirmCallback c) [member function]
+    cls.add_method('SetPlmeEdConfirmCallback', 
+                   'void', 
+                   [param('ns3::PlmeEdConfirmCallback', 'c')])
+    ## lr-wpan-phy.h (module 'lr-wpan'): void ns3::LrWpanPhy::SetPlmeGetAttributeConfirmCallback(ns3::PlmeGetAttributeConfirmCallback c) [member function]
+    cls.add_method('SetPlmeGetAttributeConfirmCallback', 
+                   'void', 
+                   [param('ns3::PlmeGetAttributeConfirmCallback', 'c')])
+    ## lr-wpan-phy.h (module 'lr-wpan'): void ns3::LrWpanPhy::SetPlmeSetTRXStateConfirmCallback(ns3::PlmeSetTRXStateConfirmCallback c) [member function]
+    cls.add_method('SetPlmeSetTRXStateConfirmCallback', 
+                   'void', 
+                   [param('ns3::PlmeSetTRXStateConfirmCallback', 'c')])
+    ## lr-wpan-phy.h (module 'lr-wpan'): void ns3::LrWpanPhy::SetPlmeSetAttributeConfirmCallback(ns3::PlmeSetAttributeConfirmCallback c) [member function]
+    cls.add_method('SetPlmeSetAttributeConfirmCallback', 
+                   'void', 
+                   [param('ns3::PlmeSetAttributeConfirmCallback', 'c')])
+    ## lr-wpan-phy.h (module 'lr-wpan'): double ns3::LrWpanPhy::GetDataOrSymbolRate(bool isData) [member function]
+    cls.add_method('GetDataOrSymbolRate', 
+                   'double', 
+                   [param('bool', 'isData')])
+    ## lr-wpan-phy.h (module 'lr-wpan'): void ns3::LrWpanPhy::SetErrorModel(ns3::Ptr<ns3::LrWpanErrorModel> e) [member function]
+    cls.add_method('SetErrorModel', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::LrWpanErrorModel >', 'e')])
+    ## lr-wpan-phy.h (module 'lr-wpan'): ns3::Ptr<ns3::LrWpanErrorModel> ns3::LrWpanPhy::GetErrorModel() const [member function]
+    cls.add_method('GetErrorModel', 
+                   'ns3::Ptr< ns3::LrWpanErrorModel >', 
+                   [], 
+                   is_const=True)
+    ## lr-wpan-phy.h (module 'lr-wpan'): uint64_t ns3::LrWpanPhy::GetPhySHRDuration() const [member function]
+    cls.add_method('GetPhySHRDuration', 
+                   'uint64_t', 
+                   [], 
+                   is_const=True)
+    ## lr-wpan-phy.h (module 'lr-wpan'): double ns3::LrWpanPhy::GetPhySymbolsPerOctet() const [member function]
+    cls.add_method('GetPhySymbolsPerOctet', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## lr-wpan-phy.h (module 'lr-wpan'): int64_t ns3::LrWpanPhy::AssignStreams(int64_t stream) [member function]
+    cls.add_method('AssignStreams', 
+                   'int64_t', 
+                   [param('int64_t', 'stream')])
+    ## lr-wpan-phy.h (module 'lr-wpan'): void ns3::LrWpanPhy::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   visibility='private', is_virtual=True)
+    return
+
+def register_Ns3LrWpanSpectrumSignalParameters_methods(root_module, cls):
+    ## lr-wpan-spectrum-signal-parameters.h (module 'lr-wpan'): ns3::LrWpanSpectrumSignalParameters::LrWpanSpectrumSignalParameters() [constructor]
+    cls.add_constructor([])
+    ## lr-wpan-spectrum-signal-parameters.h (module 'lr-wpan'): ns3::LrWpanSpectrumSignalParameters::LrWpanSpectrumSignalParameters(ns3::LrWpanSpectrumSignalParameters const & p) [copy constructor]
+    cls.add_constructor([param('ns3::LrWpanSpectrumSignalParameters const &', 'p')])
+    ## lr-wpan-spectrum-signal-parameters.h (module 'lr-wpan'): ns3::Ptr<ns3::SpectrumSignalParameters> ns3::LrWpanSpectrumSignalParameters::Copy() [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::SpectrumSignalParameters >', 
+                   [], 
+                   is_virtual=True)
+    ## lr-wpan-spectrum-signal-parameters.h (module 'lr-wpan'): ns3::LrWpanSpectrumSignalParameters::packetBurst [variable]
+    cls.add_instance_attribute('packetBurst', 'ns3::Ptr< ns3::PacketBurst >', is_const=False)
+    return
+
+def register_Ns3Mac16AddressChecker_methods(root_module, cls):
+    ## mac16-address.h (module 'network'): ns3::Mac16AddressChecker::Mac16AddressChecker() [constructor]
+    cls.add_constructor([])
+    ## mac16-address.h (module 'network'): ns3::Mac16AddressChecker::Mac16AddressChecker(ns3::Mac16AddressChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Mac16AddressChecker const &', 'arg0')])
+    return
+
+def register_Ns3Mac16AddressValue_methods(root_module, cls):
+    ## mac16-address.h (module 'network'): ns3::Mac16AddressValue::Mac16AddressValue() [constructor]
+    cls.add_constructor([])
+    ## mac16-address.h (module 'network'): ns3::Mac16AddressValue::Mac16AddressValue(ns3::Mac16AddressValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Mac16AddressValue const &', 'arg0')])
+    ## mac16-address.h (module 'network'): ns3::Mac16AddressValue::Mac16AddressValue(ns3::Mac16Address const & value) [constructor]
+    cls.add_constructor([param('ns3::Mac16Address const &', 'value')])
+    ## mac16-address.h (module 'network'): ns3::Ptr<ns3::AttributeValue> ns3::Mac16AddressValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## mac16-address.h (module 'network'): bool ns3::Mac16AddressValue::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)
+    ## mac16-address.h (module 'network'): ns3::Mac16Address ns3::Mac16AddressValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'ns3::Mac16Address', 
+                   [], 
+                   is_const=True)
+    ## mac16-address.h (module 'network'): std::string ns3::Mac16AddressValue::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)
+    ## mac16-address.h (module 'network'): void ns3::Mac16AddressValue::Set(ns3::Mac16Address const & value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('ns3::Mac16Address const &', 'value')])
+    return
+
+def register_Ns3Mac64AddressChecker_methods(root_module, cls):
+    ## mac64-address.h (module 'network'): ns3::Mac64AddressChecker::Mac64AddressChecker() [constructor]
+    cls.add_constructor([])
+    ## mac64-address.h (module 'network'): ns3::Mac64AddressChecker::Mac64AddressChecker(ns3::Mac64AddressChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Mac64AddressChecker const &', 'arg0')])
+    return
+
+def register_Ns3Mac64AddressValue_methods(root_module, cls):
+    ## mac64-address.h (module 'network'): ns3::Mac64AddressValue::Mac64AddressValue() [constructor]
+    cls.add_constructor([])
+    ## mac64-address.h (module 'network'): ns3::Mac64AddressValue::Mac64AddressValue(ns3::Mac64AddressValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Mac64AddressValue const &', 'arg0')])
+    ## mac64-address.h (module 'network'): ns3::Mac64AddressValue::Mac64AddressValue(ns3::Mac64Address const & value) [constructor]
+    cls.add_constructor([param('ns3::Mac64Address const &', 'value')])
+    ## mac64-address.h (module 'network'): ns3::Ptr<ns3::AttributeValue> ns3::Mac64AddressValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## mac64-address.h (module 'network'): bool ns3::Mac64AddressValue::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)
+    ## mac64-address.h (module 'network'): ns3::Mac64Address ns3::Mac64AddressValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'ns3::Mac64Address', 
+                   [], 
+                   is_const=True)
+    ## mac64-address.h (module 'network'): std::string ns3::Mac64AddressValue::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)
+    ## mac64-address.h (module 'network'): void ns3::Mac64AddressValue::Set(ns3::Mac64Address const & value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('ns3::Mac64Address const &', 'value')])
+    return
+
+def register_Ns3NetDevice_methods(root_module, cls):
+    ## net-device.h (module 'network'): ns3::NetDevice::NetDevice() [constructor]
+    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]
+    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')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## net-device.h (module 'network'): ns3::Address ns3::NetDevice::GetAddress() const [member function]
+    cls.add_method('GetAddress', 
+                   'ns3::Address', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## net-device.h (module 'network'): ns3::Address ns3::NetDevice::GetBroadcast() const [member function]
+    cls.add_method('GetBroadcast', 
+                   'ns3::Address', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## net-device.h (module 'network'): ns3::Ptr<ns3::Channel> ns3::NetDevice::GetChannel() const [member function]
+    cls.add_method('GetChannel', 
+                   'ns3::Ptr< ns3::Channel >', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## net-device.h (module 'network'): uint32_t ns3::NetDevice::GetIfIndex() const [member function]
+    cls.add_method('GetIfIndex', 
+                   'uint32_t', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## net-device.h (module 'network'): uint16_t ns3::NetDevice::GetMtu() const [member function]
+    cls.add_method('GetMtu', 
+                   'uint16_t', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## net-device.h (module 'network'): ns3::Address ns3::NetDevice::GetMulticast(ns3::Ipv4Address multicastGroup) const [member function]
+    cls.add_method('GetMulticast', 
+                   'ns3::Address', 
+                   [param('ns3::Ipv4Address', 'multicastGroup')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## net-device.h (module 'network'): ns3::Address ns3::NetDevice::GetMulticast(ns3::Ipv6Address addr) const [member function]
+    cls.add_method('GetMulticast', 
+                   'ns3::Address', 
+                   [param('ns3::Ipv6Address', 'addr')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## net-device.h (module 'network'): ns3::Ptr<ns3::Node> ns3::NetDevice::GetNode() const [member function]
+    cls.add_method('GetNode', 
+                   'ns3::Ptr< ns3::Node >', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## net-device.h (module 'network'): static ns3::TypeId ns3::NetDevice::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## net-device.h (module 'network'): bool ns3::NetDevice::IsBridge() const [member function]
+    cls.add_method('IsBridge', 
+                   'bool', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## net-device.h (module 'network'): bool ns3::NetDevice::IsBroadcast() const [member function]
+    cls.add_method('IsBroadcast', 
+                   'bool', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## net-device.h (module 'network'): bool ns3::NetDevice::IsLinkUp() const [member function]
+    cls.add_method('IsLinkUp', 
+                   'bool', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## net-device.h (module 'network'): bool ns3::NetDevice::IsMulticast() const [member function]
+    cls.add_method('IsMulticast', 
+                   'bool', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## net-device.h (module 'network'): bool ns3::NetDevice::IsPointToPoint() const [member function]
+    cls.add_method('IsPointToPoint', 
+                   'bool', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## net-device.h (module 'network'): bool ns3::NetDevice::NeedsArp() const [member function]
+    cls.add_method('NeedsArp', 
+                   'bool', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## net-device.h (module 'network'): bool ns3::NetDevice::Send(ns3::Ptr<ns3::Packet> packet, ns3::Address const & dest, uint16_t protocolNumber) [member function]
+    cls.add_method('Send', 
+                   'bool', 
+                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('ns3::Address const &', 'dest'), param('uint16_t', 'protocolNumber')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## net-device.h (module 'network'): bool ns3::NetDevice::SendFrom(ns3::Ptr<ns3::Packet> packet, ns3::Address const & source, ns3::Address const & dest, uint16_t protocolNumber) [member function]
+    cls.add_method('SendFrom', 
+                   'bool', 
+                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('ns3::Address const &', 'source'), param('ns3::Address const &', 'dest'), param('uint16_t', 'protocolNumber')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## net-device.h (module 'network'): void ns3::NetDevice::SetAddress(ns3::Address address) [member function]
+    cls.add_method('SetAddress', 
+                   'void', 
+                   [param('ns3::Address', 'address')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## net-device.h (module 'network'): void ns3::NetDevice::SetIfIndex(uint32_t const index) [member function]
+    cls.add_method('SetIfIndex', 
+                   'void', 
+                   [param('uint32_t const', 'index')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## net-device.h (module 'network'): bool ns3::NetDevice::SetMtu(uint16_t const mtu) [member function]
+    cls.add_method('SetMtu', 
+                   'bool', 
+                   [param('uint16_t const', 'mtu')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## net-device.h (module 'network'): void ns3::NetDevice::SetNode(ns3::Ptr<ns3::Node> node) [member function]
+    cls.add_method('SetNode', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Node >', 'node')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## net-device.h (module 'network'): void ns3::NetDevice::SetPromiscReceiveCallback(ns3::Callback<bool,ns3::Ptr<ns3::NetDevice>,ns3::Ptr<const ns3::Packet>,short unsigned int,const ns3::Address&,const ns3::Address&,ns3::NetDevice::PacketType,ns3::empty,ns3::empty,ns3::empty> cb) [member function]
+    cls.add_method('SetPromiscReceiveCallback', 
+                   'void', 
+                   [param('ns3::Callback< bool, ns3::Ptr< ns3::NetDevice >, ns3::Ptr< ns3::Packet const >, short unsigned int, ns3::Address const &, ns3::Address const &, ns3::NetDevice::PacketType, ns3::empty, ns3::empty, ns3::empty >', 'cb')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## net-device.h (module 'network'): void ns3::NetDevice::SetReceiveCallback(ns3::Callback<bool, ns3::Ptr<ns3::NetDevice>, ns3::Ptr<ns3::Packet const>, unsigned short, ns3::Address const&, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> cb) [member function]
+    cls.add_method('SetReceiveCallback', 
+                   'void', 
+                   [param('ns3::Callback< bool, ns3::Ptr< ns3::NetDevice >, ns3::Ptr< ns3::Packet const >, unsigned short, ns3::Address const &, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'cb')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## net-device.h (module 'network'): bool ns3::NetDevice::SupportsSendFrom() const [member function]
+    cls.add_method('SupportsSendFrom', 
+                   'bool', 
+                   [], 
+                   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')])
+    ## node.h (module 'network'): ns3::Node::Node() [constructor]
+    cls.add_constructor([])
+    ## node.h (module 'network'): ns3::Node::Node(uint32_t systemId) [constructor]
+    cls.add_constructor([param('uint32_t', 'systemId')])
+    ## node.h (module 'network'): uint32_t ns3::Node::AddApplication(ns3::Ptr<ns3::Application> application) [member function]
+    cls.add_method('AddApplication', 
+                   'uint32_t', 
+                   [param('ns3::Ptr< ns3::Application >', 'application')])
+    ## node.h (module 'network'): uint32_t ns3::Node::AddDevice(ns3::Ptr<ns3::NetDevice> device) [member function]
+    cls.add_method('AddDevice', 
+                   'uint32_t', 
+                   [param('ns3::Ptr< ns3::NetDevice >', 'device')])
+    ## node.h (module 'network'): static bool ns3::Node::ChecksumEnabled() [member function]
+    cls.add_method('ChecksumEnabled', 
+                   'bool', 
+                   [], 
+                   is_static=True)
+    ## node.h (module 'network'): ns3::Ptr<ns3::Application> ns3::Node::GetApplication(uint32_t index) const [member function]
+    cls.add_method('GetApplication', 
+                   'ns3::Ptr< ns3::Application >', 
+                   [param('uint32_t', 'index')], 
+                   is_const=True)
+    ## node.h (module 'network'): ns3::Ptr<ns3::NetDevice> ns3::Node::GetDevice(uint32_t index) const [member function]
+    cls.add_method('GetDevice', 
+                   'ns3::Ptr< ns3::NetDevice >', 
+                   [param('uint32_t', 'index')], 
+                   is_const=True)
+    ## node.h (module 'network'): uint32_t ns3::Node::GetId() const [member function]
+    cls.add_method('GetId', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## node.h (module 'network'): uint32_t ns3::Node::GetNApplications() const [member function]
+    cls.add_method('GetNApplications', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## node.h (module 'network'): uint32_t ns3::Node::GetNDevices() const [member function]
+    cls.add_method('GetNDevices', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## node.h (module 'network'): uint32_t ns3::Node::GetSystemId() const [member function]
+    cls.add_method('GetSystemId', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## node.h (module 'network'): static ns3::TypeId ns3::Node::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## node.h (module 'network'): void ns3::Node::RegisterDeviceAdditionListener(ns3::Callback<void,ns3::Ptr<ns3::NetDevice>,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> listener) [member function]
+    cls.add_method('RegisterDeviceAdditionListener', 
+                   'void', 
+                   [param('ns3::Callback< void, ns3::Ptr< ns3::NetDevice >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'listener')])
+    ## node.h (module 'network'): void ns3::Node::RegisterProtocolHandler(ns3::Callback<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> handler, uint16_t protocolType, ns3::Ptr<ns3::NetDevice> device, bool promiscuous=false) [member function]
+    cls.add_method('RegisterProtocolHandler', 
+                   'void', 
+                   [param('ns3::Callback< 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 >', 'handler'), param('uint16_t', 'protocolType'), param('ns3::Ptr< ns3::NetDevice >', 'device'), param('bool', 'promiscuous', default_value='false')])
+    ## node.h (module 'network'): void ns3::Node::UnregisterDeviceAdditionListener(ns3::Callback<void,ns3::Ptr<ns3::NetDevice>,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> listener) [member function]
+    cls.add_method('UnregisterDeviceAdditionListener', 
+                   'void', 
+                   [param('ns3::Callback< void, ns3::Ptr< ns3::NetDevice >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'listener')])
+    ## node.h (module 'network'): void ns3::Node::UnregisterProtocolHandler(ns3::Callback<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> handler) [member function]
+    cls.add_method('UnregisterProtocolHandler', 
+                   'void', 
+                   [param('ns3::Callback< 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 >', 'handler')])
+    ## node.h (module 'network'): void ns3::Node::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    ## node.h (module 'network'): void ns3::Node::DoInitialize() [member function]
+    cls.add_method('DoInitialize', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    return
+
+def register_Ns3ObjectFactoryChecker_methods(root_module, cls):
+    ## object-factory.h (module 'core'): ns3::ObjectFactoryChecker::ObjectFactoryChecker() [constructor]
+    cls.add_constructor([])
+    ## object-factory.h (module 'core'): ns3::ObjectFactoryChecker::ObjectFactoryChecker(ns3::ObjectFactoryChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::ObjectFactoryChecker const &', 'arg0')])
+    return
+
+def register_Ns3ObjectFactoryValue_methods(root_module, cls):
+    ## object-factory.h (module 'core'): ns3::ObjectFactoryValue::ObjectFactoryValue() [constructor]
+    cls.add_constructor([])
+    ## object-factory.h (module 'core'): ns3::ObjectFactoryValue::ObjectFactoryValue(ns3::ObjectFactoryValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::ObjectFactoryValue const &', 'arg0')])
+    ## object-factory.h (module 'core'): ns3::ObjectFactoryValue::ObjectFactoryValue(ns3::ObjectFactory const & value) [constructor]
+    cls.add_constructor([param('ns3::ObjectFactory const &', 'value')])
+    ## object-factory.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::ObjectFactoryValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## object-factory.h (module 'core'): bool ns3::ObjectFactoryValue::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)
+    ## object-factory.h (module 'core'): ns3::ObjectFactory ns3::ObjectFactoryValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'ns3::ObjectFactory', 
+                   [], 
+                   is_const=True)
+    ## object-factory.h (module 'core'): std::string ns3::ObjectFactoryValue::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)
+    ## object-factory.h (module 'core'): void ns3::ObjectFactoryValue::Set(ns3::ObjectFactory const & value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('ns3::ObjectFactory const &', 'value')])
+    return
+
+def register_Ns3OutputStreamWrapper_methods(root_module, cls):
+    ## output-stream-wrapper.h (module 'network'): ns3::OutputStreamWrapper::OutputStreamWrapper(ns3::OutputStreamWrapper const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::OutputStreamWrapper const &', 'arg0')])
+    ## output-stream-wrapper.h (module 'network'): ns3::OutputStreamWrapper::OutputStreamWrapper(std::string filename, std::_Ios_Openmode filemode) [constructor]
+    cls.add_constructor([param('std::string', 'filename'), param('std::_Ios_Openmode', 'filemode')])
+    ## output-stream-wrapper.h (module 'network'): ns3::OutputStreamWrapper::OutputStreamWrapper(std::ostream * os) [constructor]
+    cls.add_constructor([param('std::ostream *', 'os')])
+    ## output-stream-wrapper.h (module 'network'): std::ostream * ns3::OutputStreamWrapper::GetStream() [member function]
+    cls.add_method('GetStream', 
+                   'std::ostream *', 
+                   [])
+    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'): 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', 
+                   [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')])
+    return
+
+def register_Ns3TimeValue_methods(root_module, cls):
+    ## nstime.h (module 'core'): ns3::TimeValue::TimeValue() [constructor]
+    cls.add_constructor([])
+    ## nstime.h (module 'core'): ns3::TimeValue::TimeValue(ns3::TimeValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::TimeValue const &', 'arg0')])
+    ## nstime.h (module 'core'): ns3::TimeValue::TimeValue(ns3::Time const & value) [constructor]
+    cls.add_constructor([param('ns3::Time const &', 'value')])
+    ## nstime.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::TimeValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## nstime.h (module 'core'): bool ns3::TimeValue::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)
+    ## nstime.h (module 'core'): ns3::Time ns3::TimeValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'ns3::Time', 
+                   [], 
+                   is_const=True)
+    ## nstime.h (module 'core'): std::string ns3::TimeValue::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)
+    ## nstime.h (module 'core'): void ns3::TimeValue::Set(ns3::Time const & value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('ns3::Time const &', 'value')])
+    return
+
+def register_Ns3TypeIdChecker_methods(root_module, cls):
+    ## type-id.h (module 'core'): ns3::TypeIdChecker::TypeIdChecker() [constructor]
+    cls.add_constructor([])
+    ## type-id.h (module 'core'): ns3::TypeIdChecker::TypeIdChecker(ns3::TypeIdChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::TypeIdChecker const &', 'arg0')])
+    return
+
+def register_Ns3TypeIdValue_methods(root_module, cls):
+    ## type-id.h (module 'core'): ns3::TypeIdValue::TypeIdValue() [constructor]
+    cls.add_constructor([])
+    ## type-id.h (module 'core'): ns3::TypeIdValue::TypeIdValue(ns3::TypeIdValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::TypeIdValue const &', 'arg0')])
+    ## type-id.h (module 'core'): ns3::TypeIdValue::TypeIdValue(ns3::TypeId const & value) [constructor]
+    cls.add_constructor([param('ns3::TypeId const &', 'value')])
+    ## type-id.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::TypeIdValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## type-id.h (module 'core'): bool ns3::TypeIdValue::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)
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeIdValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_const=True)
+    ## type-id.h (module 'core'): std::string ns3::TypeIdValue::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)
+    ## type-id.h (module 'core'): void ns3::TypeIdValue::Set(ns3::TypeId const & value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [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_Ns3LrWpanNetDevice_methods(root_module, cls):
+    ## lr-wpan-net-device.h (module 'lr-wpan'): ns3::LrWpanNetDevice::LrWpanNetDevice(ns3::LrWpanNetDevice const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::LrWpanNetDevice const &', 'arg0')])
+    ## lr-wpan-net-device.h (module 'lr-wpan'): ns3::LrWpanNetDevice::LrWpanNetDevice() [constructor]
+    cls.add_constructor([])
+    ## lr-wpan-net-device.h (module 'lr-wpan'): void ns3::LrWpanNetDevice::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')], 
+                   is_virtual=True)
+    ## lr-wpan-net-device.h (module 'lr-wpan'): int64_t ns3::LrWpanNetDevice::AssignStreams(int64_t stream) [member function]
+    cls.add_method('AssignStreams', 
+                   'int64_t', 
+                   [param('int64_t', 'stream')])
+    ## lr-wpan-net-device.h (module 'lr-wpan'): ns3::Address ns3::LrWpanNetDevice::GetAddress() const [member function]
+    cls.add_method('GetAddress', 
+                   'ns3::Address', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## lr-wpan-net-device.h (module 'lr-wpan'): ns3::Address ns3::LrWpanNetDevice::GetBroadcast() const [member function]
+    cls.add_method('GetBroadcast', 
+                   'ns3::Address', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## lr-wpan-net-device.h (module 'lr-wpan'): ns3::Ptr<ns3::Channel> ns3::LrWpanNetDevice::GetChannel() const [member function]
+    cls.add_method('GetChannel', 
+                   'ns3::Ptr< ns3::Channel >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## lr-wpan-net-device.h (module 'lr-wpan'): ns3::Ptr<ns3::LrWpanCsmaCa> ns3::LrWpanNetDevice::GetCsmaCa() const [member function]
+    cls.add_method('GetCsmaCa', 
+                   'ns3::Ptr< ns3::LrWpanCsmaCa >', 
+                   [], 
+                   is_const=True)
+    ## lr-wpan-net-device.h (module 'lr-wpan'): uint32_t ns3::LrWpanNetDevice::GetIfIndex() const [member function]
+    cls.add_method('GetIfIndex', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## lr-wpan-net-device.h (module 'lr-wpan'): ns3::Ptr<ns3::LrWpanMac> ns3::LrWpanNetDevice::GetMac() const [member function]
+    cls.add_method('GetMac', 
+                   'ns3::Ptr< ns3::LrWpanMac >', 
+                   [], 
+                   is_const=True)
+    ## lr-wpan-net-device.h (module 'lr-wpan'): uint16_t ns3::LrWpanNetDevice::GetMtu() const [member function]
+    cls.add_method('GetMtu', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## lr-wpan-net-device.h (module 'lr-wpan'): ns3::Address ns3::LrWpanNetDevice::GetMulticast(ns3::Ipv4Address multicastGroup) const [member function]
+    cls.add_method('GetMulticast', 
+                   'ns3::Address', 
+                   [param('ns3::Ipv4Address', 'multicastGroup')], 
+                   is_const=True, is_virtual=True)
+    ## lr-wpan-net-device.h (module 'lr-wpan'): ns3::Address ns3::LrWpanNetDevice::GetMulticast(ns3::Ipv6Address addr) const [member function]
+    cls.add_method('GetMulticast', 
+                   'ns3::Address', 
+                   [param('ns3::Ipv6Address', 'addr')], 
+                   is_const=True, is_virtual=True)
+    ## lr-wpan-net-device.h (module 'lr-wpan'): ns3::Ptr<ns3::Node> ns3::LrWpanNetDevice::GetNode() const [member function]
+    cls.add_method('GetNode', 
+                   'ns3::Ptr< ns3::Node >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## lr-wpan-net-device.h (module 'lr-wpan'): ns3::Ptr<ns3::LrWpanPhy> ns3::LrWpanNetDevice::GetPhy() const [member function]
+    cls.add_method('GetPhy', 
+                   'ns3::Ptr< ns3::LrWpanPhy >', 
+                   [], 
+                   is_const=True)
+    ## lr-wpan-net-device.h (module 'lr-wpan'): static ns3::TypeId ns3::LrWpanNetDevice::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## lr-wpan-net-device.h (module 'lr-wpan'): bool ns3::LrWpanNetDevice::IsBridge() const [member function]
+    cls.add_method('IsBridge', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## lr-wpan-net-device.h (module 'lr-wpan'): bool ns3::LrWpanNetDevice::IsBroadcast() const [member function]
+    cls.add_method('IsBroadcast', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## lr-wpan-net-device.h (module 'lr-wpan'): bool ns3::LrWpanNetDevice::IsLinkUp() const [member function]
+    cls.add_method('IsLinkUp', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## lr-wpan-net-device.h (module 'lr-wpan'): bool ns3::LrWpanNetDevice::IsMulticast() const [member function]
+    cls.add_method('IsMulticast', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## lr-wpan-net-device.h (module 'lr-wpan'): bool ns3::LrWpanNetDevice::IsPointToPoint() const [member function]
+    cls.add_method('IsPointToPoint', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## lr-wpan-net-device.h (module 'lr-wpan'): void ns3::LrWpanNetDevice::McpsDataIndication(ns3::McpsDataIndicationParams params, ns3::Ptr<ns3::Packet> pkt) [member function]
+    cls.add_method('McpsDataIndication', 
+                   'void', 
+                   [param('ns3::McpsDataIndicationParams', 'params'), param('ns3::Ptr< ns3::Packet >', 'pkt')])
+    ## lr-wpan-net-device.h (module 'lr-wpan'): bool ns3::LrWpanNetDevice::NeedsArp() const [member function]
+    cls.add_method('NeedsArp', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## lr-wpan-net-device.h (module 'lr-wpan'): bool ns3::LrWpanNetDevice::Send(ns3::Ptr<ns3::Packet> packet, ns3::Address const & dest, uint16_t protocolNumber) [member function]
+    cls.add_method('Send', 
+                   'bool', 
+                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('ns3::Address const &', 'dest'), param('uint16_t', 'protocolNumber')], 
+                   is_virtual=True)
+    ## lr-wpan-net-device.h (module 'lr-wpan'): bool ns3::LrWpanNetDevice::SendFrom(ns3::Ptr<ns3::Packet> packet, ns3::Address const & source, ns3::Address const & dest, uint16_t protocolNumber) [member function]
+    cls.add_method('SendFrom', 
+                   'bool', 
+                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('ns3::Address const &', 'source'), param('ns3::Address const &', 'dest'), param('uint16_t', 'protocolNumber')], 
+                   is_virtual=True)
+    ## lr-wpan-net-device.h (module 'lr-wpan'): void ns3::LrWpanNetDevice::SetAddress(ns3::Address address) [member function]
+    cls.add_method('SetAddress', 
+                   'void', 
+                   [param('ns3::Address', 'address')], 
+                   is_virtual=True)
+    ## lr-wpan-net-device.h (module 'lr-wpan'): void ns3::LrWpanNetDevice::SetChannel(ns3::Ptr<ns3::SpectrumChannel> channel) [member function]
+    cls.add_method('SetChannel', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::SpectrumChannel >', 'channel')])
+    ## lr-wpan-net-device.h (module 'lr-wpan'): void ns3::LrWpanNetDevice::SetCsmaCa(ns3::Ptr<ns3::LrWpanCsmaCa> csmaca) [member function]
+    cls.add_method('SetCsmaCa', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::LrWpanCsmaCa >', 'csmaca')])
+    ## lr-wpan-net-device.h (module 'lr-wpan'): void ns3::LrWpanNetDevice::SetIfIndex(uint32_t const index) [member function]
+    cls.add_method('SetIfIndex', 
+                   'void', 
+                   [param('uint32_t const', 'index')], 
+                   is_virtual=True)
+    ## lr-wpan-net-device.h (module 'lr-wpan'): void ns3::LrWpanNetDevice::SetMac(ns3::Ptr<ns3::LrWpanMac> mac) [member function]
+    cls.add_method('SetMac', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::LrWpanMac >', 'mac')])
+    ## lr-wpan-net-device.h (module 'lr-wpan'): bool ns3::LrWpanNetDevice::SetMtu(uint16_t const mtu) [member function]
+    cls.add_method('SetMtu', 
+                   'bool', 
+                   [param('uint16_t const', 'mtu')], 
+                   is_virtual=True)
+    ## lr-wpan-net-device.h (module 'lr-wpan'): void ns3::LrWpanNetDevice::SetNode(ns3::Ptr<ns3::Node> node) [member function]
+    cls.add_method('SetNode', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Node >', 'node')], 
+                   is_virtual=True)
+    ## lr-wpan-net-device.h (module 'lr-wpan'): void ns3::LrWpanNetDevice::SetPhy(ns3::Ptr<ns3::LrWpanPhy> phy) [member function]
+    cls.add_method('SetPhy', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::LrWpanPhy >', 'phy')])
+    ## lr-wpan-net-device.h (module 'lr-wpan'): void ns3::LrWpanNetDevice::SetPromiscReceiveCallback(ns3::Callback<bool,ns3::Ptr<ns3::NetDevice>,ns3::Ptr<const ns3::Packet>,short unsigned int,const ns3::Address&,const ns3::Address&,ns3::NetDevice::PacketType,ns3::empty,ns3::empty,ns3::empty> cb) [member function]
+    cls.add_method('SetPromiscReceiveCallback', 
+                   'void', 
+                   [param('ns3::Callback< bool, ns3::Ptr< ns3::NetDevice >, ns3::Ptr< ns3::Packet const >, short unsigned int, ns3::Address const &, ns3::Address const &, ns3::NetDevice::PacketType, ns3::empty, ns3::empty, ns3::empty >', 'cb')], 
+                   is_virtual=True)
+    ## lr-wpan-net-device.h (module 'lr-wpan'): void ns3::LrWpanNetDevice::SetReceiveCallback(ns3::Callback<bool, ns3::Ptr<ns3::NetDevice>, ns3::Ptr<ns3::Packet const>, unsigned short, ns3::Address const&, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> cb) [member function]
+    cls.add_method('SetReceiveCallback', 
+                   'void', 
+                   [param('ns3::Callback< bool, ns3::Ptr< ns3::NetDevice >, ns3::Ptr< ns3::Packet const >, unsigned short, ns3::Address const &, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'cb')], 
+                   is_virtual=True)
+    ## lr-wpan-net-device.h (module 'lr-wpan'): bool ns3::LrWpanNetDevice::SupportsSendFrom() const [member function]
+    cls.add_method('SupportsSendFrom', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## lr-wpan-net-device.h (module 'lr-wpan'): void ns3::LrWpanNetDevice::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   visibility='private', is_virtual=True)
+    ## lr-wpan-net-device.h (module 'lr-wpan'): void ns3::LrWpanNetDevice::DoInitialize() [member function]
+    cls.add_method('DoInitialize', 
+                   'void', 
+                   [], 
+                   visibility='private', is_virtual=True)
+    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')])
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation::Implementation() [constructor]
+    cls.add_constructor([])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Implementation::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## hash-function.h (module 'core'): uint64_t ns3::Hash::Implementation::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Implementation::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
+    return
+
+def register_Ns3HashFunctionFnv1a_methods(root_module, cls):
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a::Fnv1a(ns3::Hash::Function::Fnv1a const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Fnv1a const &', 'arg0')])
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a::Fnv1a() [constructor]
+    cls.add_constructor([])
+    ## hash-fnv.h (module 'core'): uint32_t ns3::Hash::Function::Fnv1a::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-fnv.h (module 'core'): uint64_t ns3::Hash::Function::Fnv1a::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-fnv.h (module 'core'): void ns3::Hash::Function::Fnv1a::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionHash32_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32::Hash32(ns3::Hash::Function::Hash32 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Hash32 const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32::Hash32(ns3::Hash::Hash32Function_ptr hp) [constructor]
+    cls.add_constructor([param('ns3::Hash::Hash32Function_ptr', 'hp')])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Function::Hash32::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Function::Hash32::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionHash64_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64::Hash64(ns3::Hash::Function::Hash64 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Hash64 const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64::Hash64(ns3::Hash::Hash64Function_ptr hp) [constructor]
+    cls.add_constructor([param('ns3::Hash::Hash64Function_ptr', 'hp')])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Function::Hash64::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): uint64_t ns3::Hash::Function::Hash64::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Function::Hash64::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionMurmur3_methods(root_module, cls):
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3::Murmur3(ns3::Hash::Function::Murmur3 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Murmur3 const &', 'arg0')])
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3::Murmur3() [constructor]
+    cls.add_constructor([])
+    ## hash-murmur3.h (module 'core'): uint32_t ns3::Hash::Function::Murmur3::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-murmur3.h (module 'core'): uint64_t ns3::Hash::Function::Murmur3::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-murmur3.h (module 'core'): void ns3::Hash::Function::Murmur3::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_functions(root_module):
+    module = root_module
+    register_functions_ns3_FatalImpl(module.get_submodule('FatalImpl'), root_module)
+    register_functions_ns3_Hash(module.get_submodule('Hash'), root_module)
+    return
+
+def register_functions_ns3_FatalImpl(module, root_module):
+    return
+
+def register_functions_ns3_Hash(module, root_module):
+    register_functions_ns3_Hash_Function(module.get_submodule('Function'), root_module)
+    return
+
+def register_functions_ns3_Hash_Function(module, root_module):
+    return
+
+def main():
+    out = FileCodeSink(sys.stdout)
+    root_module = module_init()
+    register_types(root_module)
+    register_methods(root_module)
+    register_functions(root_module)
+    root_module.generate(out)
+
+if __name__ == '__main__':
+    main()
+
diff -Naur ns-3.19/src/lr-wpan/bindings/modulegen__gcc_LP64.py ns-3.20/src/lr-wpan/bindings/modulegen__gcc_LP64.py
--- ns-3.19/src/lr-wpan/bindings/modulegen__gcc_LP64.py	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.20/src/lr-wpan/bindings/modulegen__gcc_LP64.py	2014-06-17 10:33:13.892995969 -0700
@@ -0,0 +1,5861 @@
+from pybindgen import Module, FileCodeSink, param, retval, cppclass, typehandlers
+
+
+import pybindgen.settings
+import warnings
+
+class ErrorHandler(pybindgen.settings.ErrorHandler):
+    def handle_error(self, wrapper, exception, traceback_):
+        warnings.warn("exception %r in wrapper %s" % (exception, wrapper))
+        return True
+pybindgen.settings.error_handler = ErrorHandler()
+
+
+import sys
+
+def module_init():
+    root_module = Module('ns.lr_wpan', cpp_namespace='::ns3')
+    return root_module
+
+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::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]
+    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')
+    ## trace-helper.h (module 'network'): ns3::AsciiTraceHelper [class]
+    module.add_class('AsciiTraceHelper', import_from_module='ns.network')
+    ## trace-helper.h (module 'network'): ns3::AsciiTraceHelperForDevice [class]
+    module.add_class('AsciiTraceHelperForDevice', allow_subclassing=True, 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]
+    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')
+    ## event-id.h (module 'core'): ns3::EventId [class]
+    module.add_class('EventId', 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')
+    ## lr-wpan-phy.h (module 'lr-wpan'): ns3::LrWpanEdPower [struct]
+    module.add_class('LrWpanEdPower')
+    ## lr-wpan-phy.h (module 'lr-wpan'): ns3::LrWpanPhyDataAndSymbolRates [struct]
+    module.add_class('LrWpanPhyDataAndSymbolRates')
+    ## lr-wpan-phy.h (module 'lr-wpan'): ns3::LrWpanPhyPibAttributes [struct]
+    module.add_class('LrWpanPhyPibAttributes')
+    ## lr-wpan-phy.h (module 'lr-wpan'): ns3::LrWpanPhyPpduHeaderSymbolNumber [struct]
+    module.add_class('LrWpanPhyPpduHeaderSymbolNumber')
+    ## lr-wpan-spectrum-value-helper.h (module 'lr-wpan'): ns3::LrWpanSpectrumValueHelper [class]
+    module.add_class('LrWpanSpectrumValueHelper')
+    ## mac16-address.h (module 'network'): ns3::Mac16Address [class]
+    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'])
+    ## 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]
+    root_module['ns3::Mac64Address'].implicitly_converts_to(root_module['ns3::Address'])
+    ## lr-wpan-mac.h (module 'lr-wpan'): ns3::McpsDataConfirmParams [struct]
+    module.add_class('McpsDataConfirmParams')
+    ## lr-wpan-mac.h (module 'lr-wpan'): ns3::McpsDataIndicationParams [struct]
+    module.add_class('McpsDataIndicationParams')
+    ## lr-wpan-mac.h (module 'lr-wpan'): ns3::McpsDataRequestParams [struct]
+    module.add_class('McpsDataRequestParams')
+    ## 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]
+    module.add_class('NodeContainer', import_from_module='ns.network')
+    ## 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]
+    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')
+    ## pcap-file.h (module 'network'): ns3::PcapFile [class]
+    module.add_class('PcapFile', import_from_module='ns.network')
+    ## 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')
+    ## 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]
+    module.add_class('SequenceNumber8', import_from_module='ns.network')
+    ## 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'))
+    ## simulator.h (module 'core'): ns3::Simulator [class]
+    module.add_class('Simulator', destructor_visibility='private', import_from_module='ns.core')
+    ## 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]
+    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]
+    module.add_enum('AttributeFlag', ['ATTR_GET', 'ATTR_SET', 'ATTR_CONSTRUCT', 'ATTR_SGC'], outer_class=root_module['ns3::TypeId'], import_from_module='ns.core')
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation [struct]
+    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'])
+    ## 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]
+    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]
+    module.add_class('Header', import_from_module='ns.network', parent=root_module['ns3::Chunk'])
+    ## lr-wpan-helper.h (module 'lr-wpan'): ns3::LrWpanHelper [class]
+    module.add_class('LrWpanHelper', parent=[root_module['ns3::PcapHelperForDevice'], root_module['ns3::AsciiTraceHelperForDevice']])
+    ## lr-wpan-lqi-tag.h (module 'lr-wpan'): ns3::LrWpanLqiTag [class]
+    module.add_class('LrWpanLqiTag', parent=root_module['ns3::Tag'])
+    ## lr-wpan-mac-header.h (module 'lr-wpan'): ns3::LrWpanMacHeader [class]
+    module.add_class('LrWpanMacHeader', parent=root_module['ns3::Header'])
+    ## lr-wpan-mac-header.h (module 'lr-wpan'): ns3::LrWpanMacHeader::LrWpanMacType [enumeration]
+    module.add_enum('LrWpanMacType', ['LRWPAN_MAC_BEACON', 'LRWPAN_MAC_DATA', 'LRWPAN_MAC_ACKNOWLEDGMENT', 'LRWPAN_MAC_COMMAND', 'LRWPAN_MAC_RESERVED'], outer_class=root_module['ns3::LrWpanMacHeader'])
+    ## lr-wpan-mac-header.h (module 'lr-wpan'): ns3::LrWpanMacHeader::AddrModeType [enumeration]
+    module.add_enum('AddrModeType', ['NOADDR', 'RESADDR', 'SHORTADDR', 'EXTADDR'], outer_class=root_module['ns3::LrWpanMacHeader'])
+    ## lr-wpan-mac-header.h (module 'lr-wpan'): ns3::LrWpanMacHeader::KeyIdModeType [enumeration]
+    module.add_enum('KeyIdModeType', ['IMPLICIT', 'NOKEYSOURCE', 'SHORTKEYSOURCE', 'LONGKEYSOURCE'], outer_class=root_module['ns3::LrWpanMacHeader'])
+    ## 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]
+    module.add_class('AggregateIterator', import_from_module='ns.core', outer_class=root_module['ns3::Object'])
+    ## pcap-file-wrapper.h (module 'network'): ns3::PcapFileWrapper [class]
+    module.add_class('PcapFileWrapper', import_from_module='ns.network', parent=root_module['ns3::Object'])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::AttributeAccessor, ns3::empty, ns3::DefaultDeleter<ns3::AttributeAccessor> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::AttributeAccessor', 'ns3::empty', 'ns3::DefaultDeleter<ns3::AttributeAccessor>'], 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::AttributeChecker, ns3::empty, ns3::DefaultDeleter<ns3::AttributeChecker> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::AttributeChecker', 'ns3::empty', 'ns3::DefaultDeleter<ns3::AttributeChecker>'], 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::AttributeValue, ns3::empty, ns3::DefaultDeleter<ns3::AttributeValue> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::AttributeValue', 'ns3::empty', 'ns3::DefaultDeleter<ns3::AttributeValue>'], 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::CallbackImplBase, ns3::empty, ns3::DefaultDeleter<ns3::CallbackImplBase> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::CallbackImplBase', 'ns3::empty', 'ns3::DefaultDeleter<ns3::CallbackImplBase>'], 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::EventImpl, ns3::empty, ns3::DefaultDeleter<ns3::EventImpl> > [class]
+    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::LrWpanInterferenceHelper, ns3::empty, ns3::DefaultDeleter<ns3::LrWpanInterferenceHelper> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, template_parameters=['ns3::LrWpanInterferenceHelper', 'ns3::empty', 'ns3::DefaultDeleter<ns3::LrWpanInterferenceHelper>'], 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::OutputStreamWrapper, ns3::empty, ns3::DefaultDeleter<ns3::OutputStreamWrapper> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::OutputStreamWrapper', 'ns3::empty', 'ns3::DefaultDeleter<ns3::OutputStreamWrapper>'], 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::SpectrumSignalParameters, ns3::empty, ns3::DefaultDeleter<ns3::SpectrumSignalParameters> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::SpectrumSignalParameters', 'ns3::empty', 'ns3::DefaultDeleter<ns3::SpectrumSignalParameters>'], 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'))
+    ## spectrum-phy.h (module 'spectrum'): ns3::SpectrumPhy [class]
+    module.add_class('SpectrumPhy', import_from_module='ns.spectrum', parent=root_module['ns3::Object'])
+    ## spectrum-signal-parameters.h (module 'spectrum'): ns3::SpectrumSignalParameters [struct]
+    module.add_class('SpectrumSignalParameters', import_from_module='ns.spectrum', parent=root_module['ns3::SimpleRefCount< ns3::SpectrumSignalParameters, ns3::empty, ns3::DefaultDeleter<ns3::SpectrumSignalParameters> >'])
+    ## nstime.h (module 'core'): ns3::Time [class]
+    module.add_class('Time', import_from_module='ns.core')
+    ## nstime.h (module 'core'): ns3::Time::Unit [enumeration]
+    module.add_enum('Unit', ['Y', 'D', 'H', 'MIN', 'S', 'MS', 'US', 'NS', 'PS', 'FS', 'LAST'], outer_class=root_module['ns3::Time'], import_from_module='ns.core')
+    ## nstime.h (module 'core'): ns3::Time [class]
+    root_module['ns3::Time'].implicitly_converts_to(root_module['ns3::int64x64_t'])
+    ## trace-source-accessor.h (module 'core'): ns3::TraceSourceAccessor [class]
+    module.add_class('TraceSourceAccessor', import_from_module='ns.core', parent=root_module['ns3::SimpleRefCount< ns3::TraceSourceAccessor, ns3::empty, ns3::DefaultDeleter<ns3::TraceSourceAccessor> >'])
+    ## trailer.h (module 'network'): ns3::Trailer [class]
+    module.add_class('Trailer', import_from_module='ns.network', parent=root_module['ns3::Chunk'])
+    ## attribute.h (module 'core'): ns3::AttributeAccessor [class]
+    module.add_class('AttributeAccessor', import_from_module='ns.core', parent=root_module['ns3::SimpleRefCount< ns3::AttributeAccessor, ns3::empty, ns3::DefaultDeleter<ns3::AttributeAccessor> >'])
+    ## attribute.h (module 'core'): ns3::AttributeChecker [class]
+    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> >'])
+    ## 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'])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeValue [class]
+    module.add_class('EmptyAttributeValue', 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> >'])
+    ## 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'])
+    ## lr-wpan-csmaca.h (module 'lr-wpan'): ns3::LrWpanCsmaCa [class]
+    module.add_class('LrWpanCsmaCa', parent=root_module['ns3::Object'])
+    ## lr-wpan-error-model.h (module 'lr-wpan'): ns3::LrWpanErrorModel [class]
+    module.add_class('LrWpanErrorModel', parent=root_module['ns3::Object'])
+    ## lr-wpan-interference-helper.h (module 'lr-wpan'): ns3::LrWpanInterferenceHelper [class]
+    module.add_class('LrWpanInterferenceHelper', parent=root_module['ns3::SimpleRefCount< ns3::LrWpanInterferenceHelper, ns3::empty, ns3::DefaultDeleter<ns3::LrWpanInterferenceHelper> >'])
+    ## lr-wpan-mac.h (module 'lr-wpan'): ns3::LrWpanMac [class]
+    module.add_class('LrWpanMac', parent=root_module['ns3::Object'])
+    ## lr-wpan-mac-trailer.h (module 'lr-wpan'): ns3::LrWpanMacTrailer [class]
+    module.add_class('LrWpanMacTrailer', parent=root_module['ns3::Trailer'])
+    ## lr-wpan-phy.h (module 'lr-wpan'): ns3::LrWpanPhy [class]
+    module.add_class('LrWpanPhy', parent=root_module['ns3::SpectrumPhy'])
+    ## lr-wpan-spectrum-signal-parameters.h (module 'lr-wpan'): ns3::LrWpanSpectrumSignalParameters [struct]
+    module.add_class('LrWpanSpectrumSignalParameters', parent=root_module['ns3::SpectrumSignalParameters'])
+    ## mac16-address.h (module 'network'): ns3::Mac16AddressChecker [class]
+    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'])
+    ## 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]
+    module.add_class('Mac64AddressValue', 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]
+    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'])
+    ## object-factory.h (module 'core'): ns3::ObjectFactoryChecker [class]
+    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'])
+    ## output-stream-wrapper.h (module 'network'): ns3::OutputStreamWrapper [class]
+    module.add_class('OutputStreamWrapper', import_from_module='ns.network', parent=root_module['ns3::SimpleRefCount< ns3::OutputStreamWrapper, ns3::empty, ns3::DefaultDeleter<ns3::OutputStreamWrapper> >'])
+    ## 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> >'])
+    ## nstime.h (module 'core'): ns3::TimeValue [class]
+    module.add_class('TimeValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
+    ## type-id.h (module 'core'): ns3::TypeIdChecker [class]
+    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'])
+    ## lr-wpan-net-device.h (module 'lr-wpan'): ns3::LrWpanNetDevice [class]
+    module.add_class('LrWpanNetDevice', parent=root_module['ns3::NetDevice'])
+    typehandlers.add_type_alias(u'ns3::Callback< void, ns3::LrWpanPhyEnumeration, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', u'ns3::PlmeCcaConfirmCallback')
+    typehandlers.add_type_alias(u'ns3::Callback< void, ns3::LrWpanPhyEnumeration, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >*', u'ns3::PlmeCcaConfirmCallback*')
+    typehandlers.add_type_alias(u'ns3::Callback< void, ns3::LrWpanPhyEnumeration, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >&', u'ns3::PlmeCcaConfirmCallback&')
+    typehandlers.add_type_alias(u'ns3::Callback< void, ns3::LrWpanPhyEnumeration, unsigned char, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', u'ns3::PlmeEdConfirmCallback')
+    typehandlers.add_type_alias(u'ns3::Callback< void, ns3::LrWpanPhyEnumeration, unsigned char, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >*', u'ns3::PlmeEdConfirmCallback*')
+    typehandlers.add_type_alias(u'ns3::Callback< void, ns3::LrWpanPhyEnumeration, unsigned char, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >&', u'ns3::PlmeEdConfirmCallback&')
+    typehandlers.add_type_alias(u'ns3::Callback< void, unsigned int, ns3::Ptr< ns3::Packet >, unsigned char, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', u'ns3::PdDataIndicationCallback')
+    typehandlers.add_type_alias(u'ns3::Callback< void, unsigned int, ns3::Ptr< ns3::Packet >, unsigned char, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >*', u'ns3::PdDataIndicationCallback*')
+    typehandlers.add_type_alias(u'ns3::Callback< void, unsigned int, ns3::Ptr< ns3::Packet >, unsigned char, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >&', u'ns3::PdDataIndicationCallback&')
+    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'ns3::Callback< void, ns3::LrWpanMacState, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', u'ns3::LrWpanMacStateCallback')
+    typehandlers.add_type_alias(u'ns3::Callback< void, ns3::LrWpanMacState, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >*', u'ns3::LrWpanMacStateCallback*')
+    typehandlers.add_type_alias(u'ns3::Callback< void, ns3::LrWpanMacState, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >&', u'ns3::LrWpanMacStateCallback&')
+    typehandlers.add_type_alias(u'ns3::Callback< void, ns3::LrWpanPhyEnumeration, ns3::LrWpanPibAttributeIdentifier, ns3::LrWpanPhyPibAttributes *, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', u'ns3::PlmeGetAttributeConfirmCallback')
+    typehandlers.add_type_alias(u'ns3::Callback< void, ns3::LrWpanPhyEnumeration, ns3::LrWpanPibAttributeIdentifier, ns3::LrWpanPhyPibAttributes *, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >*', u'ns3::PlmeGetAttributeConfirmCallback*')
+    typehandlers.add_type_alias(u'ns3::Callback< void, ns3::LrWpanPhyEnumeration, ns3::LrWpanPibAttributeIdentifier, ns3::LrWpanPhyPibAttributes *, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >&', u'ns3::PlmeGetAttributeConfirmCallback&')
+    typehandlers.add_type_alias(u'ns3::Callback< void, ns3::LrWpanPhyEnumeration, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', u'ns3::PdDataConfirmCallback')
+    typehandlers.add_type_alias(u'ns3::Callback< void, ns3::LrWpanPhyEnumeration, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >*', u'ns3::PdDataConfirmCallback*')
+    typehandlers.add_type_alias(u'ns3::Callback< void, ns3::LrWpanPhyEnumeration, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >&', u'ns3::PdDataConfirmCallback&')
+    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'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&')
+    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'ns3::Callback< void, ns3::LrWpanPhyEnumeration, ns3::LrWpanPibAttributeIdentifier, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', u'ns3::PlmeSetAttributeConfirmCallback')
+    typehandlers.add_type_alias(u'ns3::Callback< void, ns3::LrWpanPhyEnumeration, ns3::LrWpanPibAttributeIdentifier, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >*', u'ns3::PlmeSetAttributeConfirmCallback*')
+    typehandlers.add_type_alias(u'ns3::Callback< void, ns3::LrWpanPhyEnumeration, ns3::LrWpanPibAttributeIdentifier, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >&', u'ns3::PlmeSetAttributeConfirmCallback&')
+    typehandlers.add_type_alias(u'ns3::Callback< void, ns3::LrWpanPhyEnumeration, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', u'ns3::PlmeSetTRXStateConfirmCallback')
+    typehandlers.add_type_alias(u'ns3::Callback< void, ns3::LrWpanPhyEnumeration, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >*', u'ns3::PlmeSetTRXStateConfirmCallback*')
+    typehandlers.add_type_alias(u'ns3::Callback< void, ns3::LrWpanPhyEnumeration, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >&', u'ns3::PlmeSetTRXStateConfirmCallback&')
+    
+    ## Register a nested module for the namespace FatalImpl
+    
+    nested_module = module.add_cpp_namespace('FatalImpl')
+    register_types_ns3_FatalImpl(nested_module)
+    
+    
+    ## Register a nested module for the namespace Hash
+    
+    nested_module = module.add_cpp_namespace('Hash')
+    register_types_ns3_Hash(nested_module)
+    
+
+def register_types_ns3_FatalImpl(module):
+    root_module = module.get_root()
+    
+
+def register_types_ns3_Hash(module):
+    root_module = module.get_root()
+    
+    ## 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(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
+    
+    nested_module = module.add_cpp_namespace('Function')
+    register_types_ns3_Hash_Function(nested_module)
+    
+
+def register_types_ns3_Hash_Function(module):
+    root_module = module.get_root()
+    
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a [class]
+    module.add_class('Fnv1a', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32 [class]
+    module.add_class('Hash32', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64 [class]
+    module.add_class('Hash64', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
+    ## 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_methods(root_module):
+    register_Ns3Address_methods(root_module, root_module['ns3::Address'])
+    register_Ns3AsciiTraceHelper_methods(root_module, root_module['ns3::AsciiTraceHelper'])
+    register_Ns3AsciiTraceHelperForDevice_methods(root_module, root_module['ns3::AsciiTraceHelperForDevice'])
+    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_Ns3EventId_methods(root_module, root_module['ns3::EventId'])
+    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_Ns3LrWpanEdPower_methods(root_module, root_module['ns3::LrWpanEdPower'])
+    register_Ns3LrWpanPhyDataAndSymbolRates_methods(root_module, root_module['ns3::LrWpanPhyDataAndSymbolRates'])
+    register_Ns3LrWpanPhyPibAttributes_methods(root_module, root_module['ns3::LrWpanPhyPibAttributes'])
+    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_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'])
+    register_Ns3McpsDataRequestParams_methods(root_module, root_module['ns3::McpsDataRequestParams'])
+    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'])
+    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_Ns3PcapFile_methods(root_module, root_module['ns3::PcapFile'])
+    register_Ns3PcapHelper_methods(root_module, root_module['ns3::PcapHelper'])
+    register_Ns3PcapHelperForDevice_methods(root_module, root_module['ns3::PcapHelperForDevice'])
+    register_Ns3SequenceNumber8_methods(root_module, root_module['ns3::SequenceNumber8'])
+    register_Ns3SimpleRefCount__Ns3Object_Ns3ObjectBase_Ns3ObjectDeleter_methods(root_module, root_module['ns3::SimpleRefCount< ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter >'])
+    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'])
+    register_Ns3Empty_methods(root_module, root_module['ns3::empty'])
+    register_Ns3Int64x64_t_methods(root_module, root_module['ns3::int64x64_t'])
+    register_Ns3Chunk_methods(root_module, root_module['ns3::Chunk'])
+    register_Ns3Header_methods(root_module, root_module['ns3::Header'])
+    register_Ns3LrWpanHelper_methods(root_module, root_module['ns3::LrWpanHelper'])
+    register_Ns3LrWpanLqiTag_methods(root_module, root_module['ns3::LrWpanLqiTag'])
+    register_Ns3LrWpanMacHeader_methods(root_module, root_module['ns3::LrWpanMacHeader'])
+    register_Ns3Object_methods(root_module, root_module['ns3::Object'])
+    register_Ns3ObjectAggregateIterator_methods(root_module, root_module['ns3::Object::AggregateIterator'])
+    register_Ns3PcapFileWrapper_methods(root_module, root_module['ns3::PcapFileWrapper'])
+    register_Ns3SimpleRefCount__Ns3AttributeAccessor_Ns3Empty_Ns3DefaultDeleter__lt__ns3AttributeAccessor__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::AttributeAccessor, ns3::empty, ns3::DefaultDeleter<ns3::AttributeAccessor> >'])
+    register_Ns3SimpleRefCount__Ns3AttributeChecker_Ns3Empty_Ns3DefaultDeleter__lt__ns3AttributeChecker__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::AttributeChecker, ns3::empty, ns3::DefaultDeleter<ns3::AttributeChecker> >'])
+    register_Ns3SimpleRefCount__Ns3AttributeValue_Ns3Empty_Ns3DefaultDeleter__lt__ns3AttributeValue__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::AttributeValue, ns3::empty, ns3::DefaultDeleter<ns3::AttributeValue> >'])
+    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__Ns3LrWpanInterferenceHelper_Ns3Empty_Ns3DefaultDeleter__lt__ns3LrWpanInterferenceHelper__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::LrWpanInterferenceHelper, ns3::empty, ns3::DefaultDeleter<ns3::LrWpanInterferenceHelper> >'])
+    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__Ns3OutputStreamWrapper_Ns3Empty_Ns3DefaultDeleter__lt__ns3OutputStreamWrapper__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::OutputStreamWrapper, ns3::empty, ns3::DefaultDeleter<ns3::OutputStreamWrapper> >'])
+    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__Ns3SpectrumSignalParameters_Ns3Empty_Ns3DefaultDeleter__lt__ns3SpectrumSignalParameters__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::SpectrumSignalParameters, ns3::empty, ns3::DefaultDeleter<ns3::SpectrumSignalParameters> >'])
+    register_Ns3SimpleRefCount__Ns3TraceSourceAccessor_Ns3Empty_Ns3DefaultDeleter__lt__ns3TraceSourceAccessor__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::TraceSourceAccessor, ns3::empty, ns3::DefaultDeleter<ns3::TraceSourceAccessor> >'])
+    register_Ns3SpectrumPhy_methods(root_module, root_module['ns3::SpectrumPhy'])
+    register_Ns3SpectrumSignalParameters_methods(root_module, root_module['ns3::SpectrumSignalParameters'])
+    register_Ns3Time_methods(root_module, root_module['ns3::Time'])
+    register_Ns3TraceSourceAccessor_methods(root_module, root_module['ns3::TraceSourceAccessor'])
+    register_Ns3Trailer_methods(root_module, root_module['ns3::Trailer'])
+    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_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_Ns3EmptyAttributeValue_methods(root_module, root_module['ns3::EmptyAttributeValue'])
+    register_Ns3EventImpl_methods(root_module, root_module['ns3::EventImpl'])
+    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_Ns3LrWpanCsmaCa_methods(root_module, root_module['ns3::LrWpanCsmaCa'])
+    register_Ns3LrWpanErrorModel_methods(root_module, root_module['ns3::LrWpanErrorModel'])
+    register_Ns3LrWpanInterferenceHelper_methods(root_module, root_module['ns3::LrWpanInterferenceHelper'])
+    register_Ns3LrWpanMac_methods(root_module, root_module['ns3::LrWpanMac'])
+    register_Ns3LrWpanMacTrailer_methods(root_module, root_module['ns3::LrWpanMacTrailer'])
+    register_Ns3LrWpanPhy_methods(root_module, root_module['ns3::LrWpanPhy'])
+    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_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'])
+    register_Ns3NixVector_methods(root_module, root_module['ns3::NixVector'])
+    register_Ns3Node_methods(root_module, root_module['ns3::Node'])
+    register_Ns3ObjectFactoryChecker_methods(root_module, root_module['ns3::ObjectFactoryChecker'])
+    register_Ns3ObjectFactoryValue_methods(root_module, root_module['ns3::ObjectFactoryValue'])
+    register_Ns3OutputStreamWrapper_methods(root_module, root_module['ns3::OutputStreamWrapper'])
+    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_Ns3LrWpanNetDevice_methods(root_module, root_module['ns3::LrWpanNetDevice'])
+    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'])
+    register_Ns3HashFunctionHash64_methods(root_module, root_module['ns3::Hash::Function::Hash64'])
+    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_Ns3AsciiTraceHelper_methods(root_module, cls):
+    ## trace-helper.h (module 'network'): ns3::AsciiTraceHelper::AsciiTraceHelper(ns3::AsciiTraceHelper const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::AsciiTraceHelper const &', 'arg0')])
+    ## trace-helper.h (module 'network'): ns3::AsciiTraceHelper::AsciiTraceHelper() [constructor]
+    cls.add_constructor([])
+    ## trace-helper.h (module 'network'): ns3::Ptr<ns3::OutputStreamWrapper> ns3::AsciiTraceHelper::CreateFileStream(std::string filename, std::_Ios_Openmode filemode=std::ios_base::out) [member function]
+    cls.add_method('CreateFileStream', 
+                   'ns3::Ptr< ns3::OutputStreamWrapper >', 
+                   [param('std::string', 'filename'), param('std::_Ios_Openmode', 'filemode', default_value='std::ios_base::out')])
+    ## trace-helper.h (module 'network'): static void ns3::AsciiTraceHelper::DefaultDequeueSinkWithContext(ns3::Ptr<ns3::OutputStreamWrapper> file, std::string context, ns3::Ptr<const ns3::Packet> p) [member function]
+    cls.add_method('DefaultDequeueSinkWithContext', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'file'), param('std::string', 'context'), param('ns3::Ptr< ns3::Packet const >', 'p')], 
+                   is_static=True)
+    ## trace-helper.h (module 'network'): static void ns3::AsciiTraceHelper::DefaultDequeueSinkWithoutContext(ns3::Ptr<ns3::OutputStreamWrapper> file, ns3::Ptr<const ns3::Packet> p) [member function]
+    cls.add_method('DefaultDequeueSinkWithoutContext', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'file'), param('ns3::Ptr< ns3::Packet const >', 'p')], 
+                   is_static=True)
+    ## trace-helper.h (module 'network'): static void ns3::AsciiTraceHelper::DefaultDropSinkWithContext(ns3::Ptr<ns3::OutputStreamWrapper> file, std::string context, ns3::Ptr<const ns3::Packet> p) [member function]
+    cls.add_method('DefaultDropSinkWithContext', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'file'), param('std::string', 'context'), param('ns3::Ptr< ns3::Packet const >', 'p')], 
+                   is_static=True)
+    ## trace-helper.h (module 'network'): static void ns3::AsciiTraceHelper::DefaultDropSinkWithoutContext(ns3::Ptr<ns3::OutputStreamWrapper> file, ns3::Ptr<const ns3::Packet> p) [member function]
+    cls.add_method('DefaultDropSinkWithoutContext', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'file'), param('ns3::Ptr< ns3::Packet const >', 'p')], 
+                   is_static=True)
+    ## trace-helper.h (module 'network'): static void ns3::AsciiTraceHelper::DefaultEnqueueSinkWithContext(ns3::Ptr<ns3::OutputStreamWrapper> file, std::string context, ns3::Ptr<const ns3::Packet> p) [member function]
+    cls.add_method('DefaultEnqueueSinkWithContext', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'file'), param('std::string', 'context'), param('ns3::Ptr< ns3::Packet const >', 'p')], 
+                   is_static=True)
+    ## trace-helper.h (module 'network'): static void ns3::AsciiTraceHelper::DefaultEnqueueSinkWithoutContext(ns3::Ptr<ns3::OutputStreamWrapper> file, ns3::Ptr<const ns3::Packet> p) [member function]
+    cls.add_method('DefaultEnqueueSinkWithoutContext', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'file'), param('ns3::Ptr< ns3::Packet const >', 'p')], 
+                   is_static=True)
+    ## trace-helper.h (module 'network'): static void ns3::AsciiTraceHelper::DefaultReceiveSinkWithContext(ns3::Ptr<ns3::OutputStreamWrapper> file, std::string context, ns3::Ptr<const ns3::Packet> p) [member function]
+    cls.add_method('DefaultReceiveSinkWithContext', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'file'), param('std::string', 'context'), param('ns3::Ptr< ns3::Packet const >', 'p')], 
+                   is_static=True)
+    ## trace-helper.h (module 'network'): static void ns3::AsciiTraceHelper::DefaultReceiveSinkWithoutContext(ns3::Ptr<ns3::OutputStreamWrapper> file, ns3::Ptr<const ns3::Packet> p) [member function]
+    cls.add_method('DefaultReceiveSinkWithoutContext', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'file'), param('ns3::Ptr< ns3::Packet const >', 'p')], 
+                   is_static=True)
+    ## trace-helper.h (module 'network'): std::string ns3::AsciiTraceHelper::GetFilenameFromDevice(std::string prefix, ns3::Ptr<ns3::NetDevice> device, bool useObjectNames=true) [member function]
+    cls.add_method('GetFilenameFromDevice', 
+                   'std::string', 
+                   [param('std::string', 'prefix'), param('ns3::Ptr< ns3::NetDevice >', 'device'), param('bool', 'useObjectNames', default_value='true')])
+    ## trace-helper.h (module 'network'): std::string ns3::AsciiTraceHelper::GetFilenameFromInterfacePair(std::string prefix, ns3::Ptr<ns3::Object> object, uint32_t interface, bool useObjectNames=true) [member function]
+    cls.add_method('GetFilenameFromInterfacePair', 
+                   'std::string', 
+                   [param('std::string', 'prefix'), param('ns3::Ptr< ns3::Object >', 'object'), param('uint32_t', 'interface'), param('bool', 'useObjectNames', default_value='true')])
+    return
+
+def register_Ns3AsciiTraceHelperForDevice_methods(root_module, cls):
+    ## trace-helper.h (module 'network'): ns3::AsciiTraceHelperForDevice::AsciiTraceHelperForDevice(ns3::AsciiTraceHelperForDevice const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::AsciiTraceHelperForDevice const &', 'arg0')])
+    ## trace-helper.h (module 'network'): ns3::AsciiTraceHelperForDevice::AsciiTraceHelperForDevice() [constructor]
+    cls.add_constructor([])
+    ## trace-helper.h (module 'network'): void ns3::AsciiTraceHelperForDevice::EnableAscii(std::string prefix, ns3::Ptr<ns3::NetDevice> nd, bool explicitFilename=false) [member function]
+    cls.add_method('EnableAscii', 
+                   'void', 
+                   [param('std::string', 'prefix'), param('ns3::Ptr< ns3::NetDevice >', 'nd'), param('bool', 'explicitFilename', default_value='false')])
+    ## trace-helper.h (module 'network'): void ns3::AsciiTraceHelperForDevice::EnableAscii(ns3::Ptr<ns3::OutputStreamWrapper> stream, ns3::Ptr<ns3::NetDevice> nd) [member function]
+    cls.add_method('EnableAscii', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream'), param('ns3::Ptr< ns3::NetDevice >', 'nd')])
+    ## trace-helper.h (module 'network'): void ns3::AsciiTraceHelperForDevice::EnableAscii(std::string prefix, std::string ndName, bool explicitFilename=false) [member function]
+    cls.add_method('EnableAscii', 
+                   'void', 
+                   [param('std::string', 'prefix'), param('std::string', 'ndName'), param('bool', 'explicitFilename', default_value='false')])
+    ## trace-helper.h (module 'network'): void ns3::AsciiTraceHelperForDevice::EnableAscii(ns3::Ptr<ns3::OutputStreamWrapper> stream, std::string ndName) [member function]
+    cls.add_method('EnableAscii', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream'), param('std::string', 'ndName')])
+    ## trace-helper.h (module 'network'): void ns3::AsciiTraceHelperForDevice::EnableAscii(std::string prefix, ns3::NetDeviceContainer d) [member function]
+    cls.add_method('EnableAscii', 
+                   'void', 
+                   [param('std::string', 'prefix'), param('ns3::NetDeviceContainer', 'd')])
+    ## trace-helper.h (module 'network'): void ns3::AsciiTraceHelperForDevice::EnableAscii(ns3::Ptr<ns3::OutputStreamWrapper> stream, ns3::NetDeviceContainer d) [member function]
+    cls.add_method('EnableAscii', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream'), param('ns3::NetDeviceContainer', 'd')])
+    ## trace-helper.h (module 'network'): void ns3::AsciiTraceHelperForDevice::EnableAscii(std::string prefix, ns3::NodeContainer n) [member function]
+    cls.add_method('EnableAscii', 
+                   'void', 
+                   [param('std::string', 'prefix'), param('ns3::NodeContainer', 'n')])
+    ## trace-helper.h (module 'network'): void ns3::AsciiTraceHelperForDevice::EnableAscii(ns3::Ptr<ns3::OutputStreamWrapper> stream, ns3::NodeContainer n) [member function]
+    cls.add_method('EnableAscii', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream'), param('ns3::NodeContainer', 'n')])
+    ## trace-helper.h (module 'network'): void ns3::AsciiTraceHelperForDevice::EnableAscii(std::string prefix, uint32_t nodeid, uint32_t deviceid, bool explicitFilename) [member function]
+    cls.add_method('EnableAscii', 
+                   'void', 
+                   [param('std::string', 'prefix'), param('uint32_t', 'nodeid'), param('uint32_t', 'deviceid'), param('bool', 'explicitFilename')])
+    ## trace-helper.h (module 'network'): void ns3::AsciiTraceHelperForDevice::EnableAscii(ns3::Ptr<ns3::OutputStreamWrapper> stream, uint32_t nodeid, uint32_t deviceid) [member function]
+    cls.add_method('EnableAscii', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream'), param('uint32_t', 'nodeid'), param('uint32_t', 'deviceid')])
+    ## trace-helper.h (module 'network'): void ns3::AsciiTraceHelperForDevice::EnableAsciiAll(std::string prefix) [member function]
+    cls.add_method('EnableAsciiAll', 
+                   'void', 
+                   [param('std::string', 'prefix')])
+    ## trace-helper.h (module 'network'): void ns3::AsciiTraceHelperForDevice::EnableAsciiAll(ns3::Ptr<ns3::OutputStreamWrapper> stream) [member function]
+    cls.add_method('EnableAsciiAll', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream')])
+    ## trace-helper.h (module 'network'): void ns3::AsciiTraceHelperForDevice::EnableAsciiInternal(ns3::Ptr<ns3::OutputStreamWrapper> stream, std::string prefix, ns3::Ptr<ns3::NetDevice> nd, bool explicitFilename) [member function]
+    cls.add_method('EnableAsciiInternal', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream'), param('std::string', 'prefix'), param('ns3::Ptr< ns3::NetDevice >', 'nd'), param('bool', 'explicitFilename')], 
+                   is_pure_virtual=True, is_virtual=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')])
+    ## attribute-construction-list.h (module 'core'): ns3::AttributeConstructionList::AttributeConstructionList() [constructor]
+    cls.add_constructor([])
+    ## attribute-construction-list.h (module 'core'): void ns3::AttributeConstructionList::Add(std::string name, ns3::Ptr<ns3::AttributeChecker const> checker, ns3::Ptr<ns3::AttributeValue> value) [member function]
+    cls.add_method('Add', 
+                   'void', 
+                   [param('std::string', 'name'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker'), param('ns3::Ptr< ns3::AttributeValue >', 'value')])
+    ## attribute-construction-list.h (module 'core'): std::_List_const_iterator<ns3::AttributeConstructionList::Item> ns3::AttributeConstructionList::Begin() const [member function]
+    cls.add_method('Begin', 
+                   'std::_List_const_iterator< ns3::AttributeConstructionList::Item >', 
+                   [], 
+                   is_const=True)
+    ## attribute-construction-list.h (module 'core'): std::_List_const_iterator<ns3::AttributeConstructionList::Item> ns3::AttributeConstructionList::End() const [member function]
+    cls.add_method('End', 
+                   'std::_List_const_iterator< ns3::AttributeConstructionList::Item >', 
+                   [], 
+                   is_const=True)
+    ## attribute-construction-list.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::AttributeConstructionList::Find(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
+    cls.add_method('Find', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_const=True)
+    return
+
+def register_Ns3AttributeConstructionListItem_methods(root_module, cls):
+    ## attribute-construction-list.h (module 'core'): ns3::AttributeConstructionList::Item::Item() [constructor]
+    cls.add_constructor([])
+    ## attribute-construction-list.h (module 'core'): ns3::AttributeConstructionList::Item::Item(ns3::AttributeConstructionList::Item const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::AttributeConstructionList::Item const &', 'arg0')])
+    ## attribute-construction-list.h (module 'core'): ns3::AttributeConstructionList::Item::checker [variable]
+    cls.add_instance_attribute('checker', 'ns3::Ptr< ns3::AttributeChecker const >', is_const=False)
+    ## attribute-construction-list.h (module 'core'): ns3::AttributeConstructionList::Item::name [variable]
+    cls.add_instance_attribute('name', 'std::string', is_const=False)
+    ## attribute-construction-list.h (module 'core'): ns3::AttributeConstructionList::Item::value [variable]
+    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')])
+    ## callback.h (module 'core'): ns3::CallbackBase::CallbackBase() [constructor]
+    cls.add_constructor([])
+    ## callback.h (module 'core'): ns3::Ptr<ns3::CallbackImplBase> ns3::CallbackBase::GetImpl() const [member function]
+    cls.add_method('GetImpl', 
+                   'ns3::Ptr< ns3::CallbackImplBase >', 
+                   [], 
+                   is_const=True)
+    ## 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):
+    cls.add_binary_comparison_operator('!=')
+    cls.add_binary_comparison_operator('==')
+    ## event-id.h (module 'core'): ns3::EventId::EventId(ns3::EventId const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EventId const &', 'arg0')])
+    ## event-id.h (module 'core'): ns3::EventId::EventId() [constructor]
+    cls.add_constructor([])
+    ## event-id.h (module 'core'): ns3::EventId::EventId(ns3::Ptr<ns3::EventImpl> const & impl, uint64_t ts, uint32_t context, uint32_t uid) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::EventImpl > const &', 'impl'), param('uint64_t', 'ts'), param('uint32_t', 'context'), param('uint32_t', 'uid')])
+    ## event-id.h (module 'core'): void ns3::EventId::Cancel() [member function]
+    cls.add_method('Cancel', 
+                   'void', 
+                   [])
+    ## event-id.h (module 'core'): uint32_t ns3::EventId::GetContext() const [member function]
+    cls.add_method('GetContext', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## event-id.h (module 'core'): uint64_t ns3::EventId::GetTs() const [member function]
+    cls.add_method('GetTs', 
+                   'uint64_t', 
+                   [], 
+                   is_const=True)
+    ## event-id.h (module 'core'): uint32_t ns3::EventId::GetUid() const [member function]
+    cls.add_method('GetUid', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## event-id.h (module 'core'): bool ns3::EventId::IsExpired() const [member function]
+    cls.add_method('IsExpired', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## event-id.h (module 'core'): bool ns3::EventId::IsRunning() const [member function]
+    cls.add_method('IsRunning', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## event-id.h (module 'core'): ns3::EventImpl * ns3::EventId::PeekEventImpl() const [member function]
+    cls.add_method('PeekEventImpl', 
+                   'ns3::EventImpl *', 
+                   [], 
+                   is_const=True)
+    return
+
+def register_Ns3Hasher_methods(root_module, cls):
+    ## hash.h (module 'core'): ns3::Hasher::Hasher(ns3::Hasher const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hasher const &', 'arg0')])
+    ## hash.h (module 'core'): ns3::Hasher::Hasher() [constructor]
+    cls.add_constructor([])
+    ## hash.h (module 'core'): ns3::Hasher::Hasher(ns3::Ptr<ns3::Hash::Implementation> hp) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::Hash::Implementation >', 'hp')])
+    ## hash.h (module 'core'): uint32_t ns3::Hasher::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')])
+    ## hash.h (module 'core'): uint32_t ns3::Hasher::GetHash32(std::string const s) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('std::string const', 's')])
+    ## hash.h (module 'core'): uint64_t ns3::Hasher::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')])
+    ## hash.h (module 'core'): uint64_t ns3::Hasher::GetHash64(std::string const s) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('std::string const', 's')])
+    ## hash.h (module 'core'): ns3::Hasher & ns3::Hasher::clear() [member function]
+    cls.add_method('clear', 
+                   'ns3::Hasher &', 
+                   [])
+    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_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::averagePower [variable]
+    cls.add_instance_attribute('averagePower', 'double', is_const=False)
+    ## lr-wpan-phy.h (module 'lr-wpan'): ns3::LrWpanEdPower::lastUpdate [variable]
+    cls.add_instance_attribute('lastUpdate', 'ns3::Time', is_const=False)
+    ## lr-wpan-phy.h (module 'lr-wpan'): ns3::LrWpanEdPower::measurementLength [variable]
+    cls.add_instance_attribute('measurementLength', 'ns3::Time', is_const=False)
+    return
+
+def register_Ns3LrWpanPhyDataAndSymbolRates_methods(root_module, cls):
+    ## lr-wpan-phy.h (module 'lr-wpan'): ns3::LrWpanPhyDataAndSymbolRates::LrWpanPhyDataAndSymbolRates() [constructor]
+    cls.add_constructor([])
+    ## lr-wpan-phy.h (module 'lr-wpan'): ns3::LrWpanPhyDataAndSymbolRates::LrWpanPhyDataAndSymbolRates(ns3::LrWpanPhyDataAndSymbolRates const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::LrWpanPhyDataAndSymbolRates const &', 'arg0')])
+    ## lr-wpan-phy.h (module 'lr-wpan'): ns3::LrWpanPhyDataAndSymbolRates::bitRate [variable]
+    cls.add_instance_attribute('bitRate', 'double', is_const=False)
+    ## lr-wpan-phy.h (module 'lr-wpan'): ns3::LrWpanPhyDataAndSymbolRates::symbolRate [variable]
+    cls.add_instance_attribute('symbolRate', 'double', is_const=False)
+    return
+
+def register_Ns3LrWpanPhyPibAttributes_methods(root_module, cls):
+    ## lr-wpan-phy.h (module 'lr-wpan'): ns3::LrWpanPhyPibAttributes::LrWpanPhyPibAttributes() [constructor]
+    cls.add_constructor([])
+    ## lr-wpan-phy.h (module 'lr-wpan'): ns3::LrWpanPhyPibAttributes::LrWpanPhyPibAttributes(ns3::LrWpanPhyPibAttributes const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::LrWpanPhyPibAttributes const &', 'arg0')])
+    ## lr-wpan-phy.h (module 'lr-wpan'): ns3::LrWpanPhyPibAttributes::phyCCAMode [variable]
+    cls.add_instance_attribute('phyCCAMode', 'uint8_t', is_const=False)
+    ## lr-wpan-phy.h (module 'lr-wpan'): ns3::LrWpanPhyPibAttributes::phyChannelsSupported [variable]
+    cls.add_instance_attribute('phyChannelsSupported', 'uint32_t [ 32 ]', is_const=False)
+    ## lr-wpan-phy.h (module 'lr-wpan'): ns3::LrWpanPhyPibAttributes::phyCurrentChannel [variable]
+    cls.add_instance_attribute('phyCurrentChannel', 'uint8_t', is_const=False)
+    ## lr-wpan-phy.h (module 'lr-wpan'): ns3::LrWpanPhyPibAttributes::phyCurrentPage [variable]
+    cls.add_instance_attribute('phyCurrentPage', 'uint32_t', is_const=False)
+    ## lr-wpan-phy.h (module 'lr-wpan'): ns3::LrWpanPhyPibAttributes::phyMaxFrameDuration [variable]
+    cls.add_instance_attribute('phyMaxFrameDuration', 'uint32_t', is_const=False)
+    ## lr-wpan-phy.h (module 'lr-wpan'): ns3::LrWpanPhyPibAttributes::phySHRDuration [variable]
+    cls.add_instance_attribute('phySHRDuration', 'uint32_t', is_const=False)
+    ## lr-wpan-phy.h (module 'lr-wpan'): ns3::LrWpanPhyPibAttributes::phySymbolsPerOctet [variable]
+    cls.add_instance_attribute('phySymbolsPerOctet', 'double', is_const=False)
+    ## lr-wpan-phy.h (module 'lr-wpan'): ns3::LrWpanPhyPibAttributes::phyTransmitPower [variable]
+    cls.add_instance_attribute('phyTransmitPower', 'uint8_t', is_const=False)
+    return
+
+def register_Ns3LrWpanPhyPpduHeaderSymbolNumber_methods(root_module, cls):
+    ## lr-wpan-phy.h (module 'lr-wpan'): ns3::LrWpanPhyPpduHeaderSymbolNumber::LrWpanPhyPpduHeaderSymbolNumber() [constructor]
+    cls.add_constructor([])
+    ## lr-wpan-phy.h (module 'lr-wpan'): ns3::LrWpanPhyPpduHeaderSymbolNumber::LrWpanPhyPpduHeaderSymbolNumber(ns3::LrWpanPhyPpduHeaderSymbolNumber const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::LrWpanPhyPpduHeaderSymbolNumber const &', 'arg0')])
+    ## lr-wpan-phy.h (module 'lr-wpan'): ns3::LrWpanPhyPpduHeaderSymbolNumber::phr [variable]
+    cls.add_instance_attribute('phr', 'double', is_const=False)
+    ## lr-wpan-phy.h (module 'lr-wpan'): ns3::LrWpanPhyPpduHeaderSymbolNumber::shrPreamble [variable]
+    cls.add_instance_attribute('shrPreamble', 'double', is_const=False)
+    ## lr-wpan-phy.h (module 'lr-wpan'): ns3::LrWpanPhyPpduHeaderSymbolNumber::shrSfd [variable]
+    cls.add_instance_attribute('shrSfd', 'double', is_const=False)
+    return
+
+def register_Ns3LrWpanSpectrumValueHelper_methods(root_module, cls):
+    ## lr-wpan-spectrum-value-helper.h (module 'lr-wpan'): ns3::LrWpanSpectrumValueHelper::LrWpanSpectrumValueHelper(ns3::LrWpanSpectrumValueHelper const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::LrWpanSpectrumValueHelper const &', 'arg0')])
+    ## lr-wpan-spectrum-value-helper.h (module 'lr-wpan'): ns3::LrWpanSpectrumValueHelper::LrWpanSpectrumValueHelper() [constructor]
+    cls.add_constructor([])
+    ## lr-wpan-spectrum-value-helper.h (module 'lr-wpan'): ns3::Ptr<ns3::SpectrumValue> ns3::LrWpanSpectrumValueHelper::CreateNoisePowerSpectralDensity(uint32_t channel) [member function]
+    cls.add_method('CreateNoisePowerSpectralDensity', 
+                   'ns3::Ptr< ns3::SpectrumValue >', 
+                   [param('uint32_t', 'channel')])
+    ## lr-wpan-spectrum-value-helper.h (module 'lr-wpan'): ns3::Ptr<ns3::SpectrumValue> ns3::LrWpanSpectrumValueHelper::CreateTxPowerSpectralDensity(double txPower, uint32_t channel) [member function]
+    cls.add_method('CreateTxPowerSpectralDensity', 
+                   'ns3::Ptr< ns3::SpectrumValue >', 
+                   [param('double', 'txPower'), param('uint32_t', 'channel')])
+    ## lr-wpan-spectrum-value-helper.h (module 'lr-wpan'): static double ns3::LrWpanSpectrumValueHelper::TotalAvgPower(ns3::Ptr<ns3::SpectrumValue const> psd) [member function]
+    cls.add_method('TotalAvgPower', 
+                   'double', 
+                   [param('ns3::Ptr< ns3::SpectrumValue const >', 'psd')], 
+                   is_static=True)
+    return
+
+def register_Ns3Mac16Address_methods(root_module, cls):
+    cls.add_binary_comparison_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')])
+    ## mac16-address.h (module 'network'): ns3::Mac16Address::Mac16Address() [constructor]
+    cls.add_constructor([])
+    ## mac16-address.h (module 'network'): ns3::Mac16Address::Mac16Address(char const * str) [constructor]
+    cls.add_constructor([param('char const *', 'str')])
+    ## mac16-address.h (module 'network'): static ns3::Mac16Address ns3::Mac16Address::Allocate() [member function]
+    cls.add_method('Allocate', 
+                   'ns3::Mac16Address', 
+                   [], 
+                   is_static=True)
+    ## mac16-address.h (module 'network'): static ns3::Mac16Address ns3::Mac16Address::ConvertFrom(ns3::Address const & address) [member function]
+    cls.add_method('ConvertFrom', 
+                   'ns3::Mac16Address', 
+                   [param('ns3::Address const &', 'address')], 
+                   is_static=True)
+    ## mac16-address.h (module 'network'): void ns3::Mac16Address::CopyFrom(uint8_t const * buffer) [member function]
+    cls.add_method('CopyFrom', 
+                   'void', 
+                   [param('uint8_t const *', 'buffer')])
+    ## mac16-address.h (module 'network'): void ns3::Mac16Address::CopyTo(uint8_t * buffer) const [member function]
+    cls.add_method('CopyTo', 
+                   'void', 
+                   [param('uint8_t *', 'buffer')], 
+                   is_const=True)
+    ## mac16-address.h (module 'network'): static bool ns3::Mac16Address::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('!=')
+    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')])
+    ## mac64-address.h (module 'network'): ns3::Mac64Address::Mac64Address() [constructor]
+    cls.add_constructor([])
+    ## mac64-address.h (module 'network'): ns3::Mac64Address::Mac64Address(char const * str) [constructor]
+    cls.add_constructor([param('char const *', 'str')])
+    ## mac64-address.h (module 'network'): static ns3::Mac64Address ns3::Mac64Address::Allocate() [member function]
+    cls.add_method('Allocate', 
+                   'ns3::Mac64Address', 
+                   [], 
+                   is_static=True)
+    ## mac64-address.h (module 'network'): static ns3::Mac64Address ns3::Mac64Address::ConvertFrom(ns3::Address const & address) [member function]
+    cls.add_method('ConvertFrom', 
+                   'ns3::Mac64Address', 
+                   [param('ns3::Address const &', 'address')], 
+                   is_static=True)
+    ## mac64-address.h (module 'network'): void ns3::Mac64Address::CopyFrom(uint8_t const * buffer) [member function]
+    cls.add_method('CopyFrom', 
+                   'void', 
+                   [param('uint8_t const *', 'buffer')])
+    ## mac64-address.h (module 'network'): void ns3::Mac64Address::CopyTo(uint8_t * buffer) const [member function]
+    cls.add_method('CopyTo', 
+                   'void', 
+                   [param('uint8_t *', 'buffer')], 
+                   is_const=True)
+    ## mac64-address.h (module 'network'): static bool ns3::Mac64Address::IsMatchingType(ns3::Address const & address) [member function]
+    cls.add_method('IsMatchingType', 
+                   'bool', 
+                   [param('ns3::Address const &', 'address')], 
+                   is_static=True)
+    return
+
+def register_Ns3McpsDataConfirmParams_methods(root_module, cls):
+    ## lr-wpan-mac.h (module 'lr-wpan'): ns3::McpsDataConfirmParams::McpsDataConfirmParams() [constructor]
+    cls.add_constructor([])
+    ## lr-wpan-mac.h (module 'lr-wpan'): ns3::McpsDataConfirmParams::McpsDataConfirmParams(ns3::McpsDataConfirmParams const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::McpsDataConfirmParams const &', 'arg0')])
+    ## lr-wpan-mac.h (module 'lr-wpan'): ns3::McpsDataConfirmParams::m_msduHandle [variable]
+    cls.add_instance_attribute('m_msduHandle', 'uint8_t', is_const=False)
+    ## lr-wpan-mac.h (module 'lr-wpan'): ns3::McpsDataConfirmParams::m_status [variable]
+    cls.add_instance_attribute('m_status', 'ns3::LrWpanMcpsDataConfirmStatus', is_const=False)
+    return
+
+def register_Ns3McpsDataIndicationParams_methods(root_module, cls):
+    ## lr-wpan-mac.h (module 'lr-wpan'): ns3::McpsDataIndicationParams::McpsDataIndicationParams() [constructor]
+    cls.add_constructor([])
+    ## lr-wpan-mac.h (module 'lr-wpan'): ns3::McpsDataIndicationParams::McpsDataIndicationParams(ns3::McpsDataIndicationParams const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::McpsDataIndicationParams const &', 'arg0')])
+    ## lr-wpan-mac.h (module 'lr-wpan'): ns3::McpsDataIndicationParams::m_dsn [variable]
+    cls.add_instance_attribute('m_dsn', 'uint8_t', is_const=False)
+    ## lr-wpan-mac.h (module 'lr-wpan'): ns3::McpsDataIndicationParams::m_dstAddr [variable]
+    cls.add_instance_attribute('m_dstAddr', 'ns3::Mac16Address', is_const=False)
+    ## lr-wpan-mac.h (module 'lr-wpan'): ns3::McpsDataIndicationParams::m_dstAddrMode [variable]
+    cls.add_instance_attribute('m_dstAddrMode', 'uint8_t', is_const=False)
+    ## lr-wpan-mac.h (module 'lr-wpan'): ns3::McpsDataIndicationParams::m_dstPanId [variable]
+    cls.add_instance_attribute('m_dstPanId', 'uint16_t', is_const=False)
+    ## lr-wpan-mac.h (module 'lr-wpan'): ns3::McpsDataIndicationParams::m_mpduLinkQuality [variable]
+    cls.add_instance_attribute('m_mpduLinkQuality', 'uint8_t', is_const=False)
+    ## lr-wpan-mac.h (module 'lr-wpan'): ns3::McpsDataIndicationParams::m_srcAddr [variable]
+    cls.add_instance_attribute('m_srcAddr', 'ns3::Mac16Address', is_const=False)
+    ## lr-wpan-mac.h (module 'lr-wpan'): ns3::McpsDataIndicationParams::m_srcAddrMode [variable]
+    cls.add_instance_attribute('m_srcAddrMode', 'uint8_t', is_const=False)
+    ## lr-wpan-mac.h (module 'lr-wpan'): ns3::McpsDataIndicationParams::m_srcPanId [variable]
+    cls.add_instance_attribute('m_srcPanId', 'uint16_t', is_const=False)
+    return
+
+def register_Ns3McpsDataRequestParams_methods(root_module, cls):
+    ## lr-wpan-mac.h (module 'lr-wpan'): ns3::McpsDataRequestParams::McpsDataRequestParams(ns3::McpsDataRequestParams const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::McpsDataRequestParams const &', 'arg0')])
+    ## lr-wpan-mac.h (module 'lr-wpan'): ns3::McpsDataRequestParams::McpsDataRequestParams() [constructor]
+    cls.add_constructor([])
+    ## lr-wpan-mac.h (module 'lr-wpan'): ns3::McpsDataRequestParams::m_dstAddr [variable]
+    cls.add_instance_attribute('m_dstAddr', 'ns3::Mac16Address', is_const=False)
+    ## lr-wpan-mac.h (module 'lr-wpan'): ns3::McpsDataRequestParams::m_dstAddrMode [variable]
+    cls.add_instance_attribute('m_dstAddrMode', 'ns3::LrWpanAddressMode', is_const=False)
+    ## lr-wpan-mac.h (module 'lr-wpan'): ns3::McpsDataRequestParams::m_dstPanId [variable]
+    cls.add_instance_attribute('m_dstPanId', 'uint16_t', is_const=False)
+    ## lr-wpan-mac.h (module 'lr-wpan'): ns3::McpsDataRequestParams::m_msduHandle [variable]
+    cls.add_instance_attribute('m_msduHandle', 'uint8_t', is_const=False)
+    ## lr-wpan-mac.h (module 'lr-wpan'): ns3::McpsDataRequestParams::m_srcAddrMode [variable]
+    cls.add_instance_attribute('m_srcAddrMode', 'ns3::LrWpanAddressMode', is_const=False)
+    ## lr-wpan-mac.h (module 'lr-wpan'): ns3::McpsDataRequestParams::m_txOptions [variable]
+    cls.add_instance_attribute('m_txOptions', 'uint8_t', is_const=False)
+    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')])
+    ## net-device-container.h (module 'network'): ns3::NetDeviceContainer::NetDeviceContainer() [constructor]
+    cls.add_constructor([])
+    ## net-device-container.h (module 'network'): ns3::NetDeviceContainer::NetDeviceContainer(ns3::Ptr<ns3::NetDevice> dev) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::NetDevice >', 'dev')])
+    ## net-device-container.h (module 'network'): ns3::NetDeviceContainer::NetDeviceContainer(std::string devName) [constructor]
+    cls.add_constructor([param('std::string', 'devName')])
+    ## net-device-container.h (module 'network'): ns3::NetDeviceContainer::NetDeviceContainer(ns3::NetDeviceContainer const & a, ns3::NetDeviceContainer const & b) [constructor]
+    cls.add_constructor([param('ns3::NetDeviceContainer const &', 'a'), param('ns3::NetDeviceContainer const &', 'b')])
+    ## net-device-container.h (module 'network'): void ns3::NetDeviceContainer::Add(ns3::NetDeviceContainer other) [member function]
+    cls.add_method('Add', 
+                   'void', 
+                   [param('ns3::NetDeviceContainer', 'other')])
+    ## net-device-container.h (module 'network'): void ns3::NetDeviceContainer::Add(ns3::Ptr<ns3::NetDevice> device) [member function]
+    cls.add_method('Add', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::NetDevice >', 'device')])
+    ## net-device-container.h (module 'network'): void ns3::NetDeviceContainer::Add(std::string deviceName) [member function]
+    cls.add_method('Add', 
+                   'void', 
+                   [param('std::string', 'deviceName')])
+    ## net-device-container.h (module 'network'): __gnu_cxx::__normal_iterator<const ns3::Ptr<ns3::NetDevice>*,std::vector<ns3::Ptr<ns3::NetDevice>, std::allocator<ns3::Ptr<ns3::NetDevice> > > > ns3::NetDeviceContainer::Begin() const [member function]
+    cls.add_method('Begin', 
+                   '__gnu_cxx::__normal_iterator< ns3::Ptr< ns3::NetDevice > const, std::vector< ns3::Ptr< ns3::NetDevice > > >', 
+                   [], 
+                   is_const=True)
+    ## net-device-container.h (module 'network'): __gnu_cxx::__normal_iterator<const ns3::Ptr<ns3::NetDevice>*,std::vector<ns3::Ptr<ns3::NetDevice>, std::allocator<ns3::Ptr<ns3::NetDevice> > > > ns3::NetDeviceContainer::End() const [member function]
+    cls.add_method('End', 
+                   '__gnu_cxx::__normal_iterator< ns3::Ptr< ns3::NetDevice > const, std::vector< ns3::Ptr< ns3::NetDevice > > >', 
+                   [], 
+                   is_const=True)
+    ## net-device-container.h (module 'network'): ns3::Ptr<ns3::NetDevice> ns3::NetDeviceContainer::Get(uint32_t i) const [member function]
+    cls.add_method('Get', 
+                   'ns3::Ptr< ns3::NetDevice >', 
+                   [param('uint32_t', 'i')], 
+                   is_const=True)
+    ## net-device-container.h (module 'network'): uint32_t ns3::NetDeviceContainer::GetN() const [member function]
+    cls.add_method('GetN', 
+                   'uint32_t', 
+                   [], 
+                   is_const=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')])
+    ## node-container.h (module 'network'): ns3::NodeContainer::NodeContainer() [constructor]
+    cls.add_constructor([])
+    ## node-container.h (module 'network'): ns3::NodeContainer::NodeContainer(ns3::Ptr<ns3::Node> node) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::Node >', 'node')])
+    ## node-container.h (module 'network'): ns3::NodeContainer::NodeContainer(std::string nodeName) [constructor]
+    cls.add_constructor([param('std::string', 'nodeName')])
+    ## node-container.h (module 'network'): ns3::NodeContainer::NodeContainer(ns3::NodeContainer const & a, ns3::NodeContainer const & b) [constructor]
+    cls.add_constructor([param('ns3::NodeContainer const &', 'a'), param('ns3::NodeContainer const &', 'b')])
+    ## node-container.h (module 'network'): ns3::NodeContainer::NodeContainer(ns3::NodeContainer const & a, ns3::NodeContainer const & b, ns3::NodeContainer const & c) [constructor]
+    cls.add_constructor([param('ns3::NodeContainer const &', 'a'), param('ns3::NodeContainer const &', 'b'), param('ns3::NodeContainer const &', 'c')])
+    ## node-container.h (module 'network'): ns3::NodeContainer::NodeContainer(ns3::NodeContainer const & a, ns3::NodeContainer const & b, ns3::NodeContainer const & c, ns3::NodeContainer const & d) [constructor]
+    cls.add_constructor([param('ns3::NodeContainer const &', 'a'), param('ns3::NodeContainer const &', 'b'), param('ns3::NodeContainer const &', 'c'), param('ns3::NodeContainer const &', 'd')])
+    ## node-container.h (module 'network'): ns3::NodeContainer::NodeContainer(ns3::NodeContainer const & a, ns3::NodeContainer const & b, ns3::NodeContainer const & c, ns3::NodeContainer const & d, ns3::NodeContainer const & e) [constructor]
+    cls.add_constructor([param('ns3::NodeContainer const &', 'a'), param('ns3::NodeContainer const &', 'b'), param('ns3::NodeContainer const &', 'c'), param('ns3::NodeContainer const &', 'd'), param('ns3::NodeContainer const &', 'e')])
+    ## node-container.h (module 'network'): void ns3::NodeContainer::Add(ns3::NodeContainer other) [member function]
+    cls.add_method('Add', 
+                   'void', 
+                   [param('ns3::NodeContainer', 'other')])
+    ## node-container.h (module 'network'): void ns3::NodeContainer::Add(ns3::Ptr<ns3::Node> node) [member function]
+    cls.add_method('Add', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Node >', 'node')])
+    ## node-container.h (module 'network'): void ns3::NodeContainer::Add(std::string nodeName) [member function]
+    cls.add_method('Add', 
+                   'void', 
+                   [param('std::string', 'nodeName')])
+    ## node-container.h (module 'network'): __gnu_cxx::__normal_iterator<const ns3::Ptr<ns3::Node>*,std::vector<ns3::Ptr<ns3::Node>, std::allocator<ns3::Ptr<ns3::Node> > > > ns3::NodeContainer::Begin() const [member function]
+    cls.add_method('Begin', 
+                   '__gnu_cxx::__normal_iterator< ns3::Ptr< ns3::Node > const, std::vector< ns3::Ptr< ns3::Node > > >', 
+                   [], 
+                   is_const=True)
+    ## node-container.h (module 'network'): void ns3::NodeContainer::Create(uint32_t n) [member function]
+    cls.add_method('Create', 
+                   'void', 
+                   [param('uint32_t', 'n')])
+    ## node-container.h (module 'network'): void ns3::NodeContainer::Create(uint32_t n, uint32_t systemId) [member function]
+    cls.add_method('Create', 
+                   'void', 
+                   [param('uint32_t', 'n'), param('uint32_t', 'systemId')])
+    ## node-container.h (module 'network'): __gnu_cxx::__normal_iterator<const ns3::Ptr<ns3::Node>*,std::vector<ns3::Ptr<ns3::Node>, std::allocator<ns3::Ptr<ns3::Node> > > > ns3::NodeContainer::End() const [member function]
+    cls.add_method('End', 
+                   '__gnu_cxx::__normal_iterator< ns3::Ptr< ns3::Node > const, std::vector< ns3::Ptr< ns3::Node > > >', 
+                   [], 
+                   is_const=True)
+    ## node-container.h (module 'network'): ns3::Ptr<ns3::Node> ns3::NodeContainer::Get(uint32_t i) const [member function]
+    cls.add_method('Get', 
+                   'ns3::Ptr< ns3::Node >', 
+                   [param('uint32_t', 'i')], 
+                   is_const=True)
+    ## node-container.h (module 'network'): static ns3::NodeContainer ns3::NodeContainer::GetGlobal() [member function]
+    cls.add_method('GetGlobal', 
+                   'ns3::NodeContainer', 
+                   [], 
+                   is_static=True)
+    ## node-container.h (module 'network'): uint32_t ns3::NodeContainer::GetN() const [member function]
+    cls.add_method('GetN', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    return
+
+def register_Ns3ObjectBase_methods(root_module, cls):
+    ## object-base.h (module 'core'): ns3::ObjectBase::ObjectBase() [constructor]
+    cls.add_constructor([])
+    ## object-base.h (module 'core'): ns3::ObjectBase::ObjectBase(ns3::ObjectBase const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::ObjectBase const &', 'arg0')])
+    ## object-base.h (module 'core'): void ns3::ObjectBase::GetAttribute(std::string name, ns3::AttributeValue & value) const [member function]
+    cls.add_method('GetAttribute', 
+                   '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]
+    cls.add_method('GetAttributeFailSafe', 
+                   'bool', 
+                   [param('std::string', 'name'), param('ns3::AttributeValue &', 'attribute')], 
+                   is_const=True)
+    ## object-base.h (module 'core'): ns3::TypeId ns3::ObjectBase::GetInstanceTypeId() const [member function]
+    cls.add_method('GetInstanceTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## object-base.h (module 'core'): static ns3::TypeId ns3::ObjectBase::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## object-base.h (module 'core'): void ns3::ObjectBase::SetAttribute(std::string name, ns3::AttributeValue const & value) [member function]
+    cls.add_method('SetAttribute', 
+                   'void', 
+                   [param('std::string', 'name'), param('ns3::AttributeValue const &', 'value')])
+    ## object-base.h (module 'core'): bool ns3::ObjectBase::SetAttributeFailSafe(std::string name, ns3::AttributeValue const & value) [member function]
+    cls.add_method('SetAttributeFailSafe', 
+                   'bool', 
+                   [param('std::string', 'name'), param('ns3::AttributeValue const &', 'value')])
+    ## object-base.h (module 'core'): bool ns3::ObjectBase::TraceConnect(std::string name, std::string context, ns3::CallbackBase const & cb) [member function]
+    cls.add_method('TraceConnect', 
+                   'bool', 
+                   [param('std::string', 'name'), param('std::string', 'context'), param('ns3::CallbackBase const &', 'cb')])
+    ## object-base.h (module 'core'): bool ns3::ObjectBase::TraceConnectWithoutContext(std::string name, ns3::CallbackBase const & cb) [member function]
+    cls.add_method('TraceConnectWithoutContext', 
+                   'bool', 
+                   [param('std::string', 'name'), param('ns3::CallbackBase const &', 'cb')])
+    ## object-base.h (module 'core'): bool ns3::ObjectBase::TraceDisconnect(std::string name, std::string context, ns3::CallbackBase const & cb) [member function]
+    cls.add_method('TraceDisconnect', 
+                   'bool', 
+                   [param('std::string', 'name'), param('std::string', 'context'), param('ns3::CallbackBase const &', 'cb')])
+    ## object-base.h (module 'core'): bool ns3::ObjectBase::TraceDisconnectWithoutContext(std::string name, ns3::CallbackBase const & cb) [member function]
+    cls.add_method('TraceDisconnectWithoutContext', 
+                   'bool', 
+                   [param('std::string', 'name'), param('ns3::CallbackBase const &', 'cb')])
+    ## object-base.h (module 'core'): void ns3::ObjectBase::ConstructSelf(ns3::AttributeConstructionList const & attributes) [member function]
+    cls.add_method('ConstructSelf', 
+                   'void', 
+                   [param('ns3::AttributeConstructionList const &', 'attributes')], 
+                   visibility='protected')
+    ## object-base.h (module 'core'): void ns3::ObjectBase::NotifyConstructionCompleted() [member function]
+    cls.add_method('NotifyConstructionCompleted', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    return
+
+def register_Ns3ObjectDeleter_methods(root_module, cls):
+    ## object.h (module 'core'): ns3::ObjectDeleter::ObjectDeleter() [constructor]
+    cls.add_constructor([])
+    ## object.h (module 'core'): ns3::ObjectDeleter::ObjectDeleter(ns3::ObjectDeleter const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::ObjectDeleter const &', 'arg0')])
+    ## object.h (module 'core'): static void ns3::ObjectDeleter::Delete(ns3::Object * object) [member function]
+    cls.add_method('Delete', 
+                   'void', 
+                   [param('ns3::Object *', 'object')], 
+                   is_static=True)
+    return
+
+def register_Ns3ObjectFactory_methods(root_module, cls):
+    cls.add_output_stream_operator()
+    ## object-factory.h (module 'core'): ns3::ObjectFactory::ObjectFactory(ns3::ObjectFactory const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::ObjectFactory const &', 'arg0')])
+    ## object-factory.h (module 'core'): ns3::ObjectFactory::ObjectFactory() [constructor]
+    cls.add_constructor([])
+    ## object-factory.h (module 'core'): ns3::ObjectFactory::ObjectFactory(std::string typeId) [constructor]
+    cls.add_constructor([param('std::string', 'typeId')])
+    ## object-factory.h (module 'core'): ns3::Ptr<ns3::Object> ns3::ObjectFactory::Create() const [member function]
+    cls.add_method('Create', 
+                   'ns3::Ptr< ns3::Object >', 
+                   [], 
+                   is_const=True)
+    ## object-factory.h (module 'core'): ns3::TypeId ns3::ObjectFactory::GetTypeId() const [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_const=True)
+    ## object-factory.h (module 'core'): void ns3::ObjectFactory::Set(std::string name, ns3::AttributeValue const & value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('std::string', 'name'), param('ns3::AttributeValue const &', 'value')])
+    ## object-factory.h (module 'core'): void ns3::ObjectFactory::SetTypeId(ns3::TypeId tid) [member function]
+    cls.add_method('SetTypeId', 
+                   'void', 
+                   [param('ns3::TypeId', 'tid')])
+    ## object-factory.h (module 'core'): void ns3::ObjectFactory::SetTypeId(char const * tid) [member function]
+    cls.add_method('SetTypeId', 
+                   'void', 
+                   [param('char const *', 'tid')])
+    ## object-factory.h (module 'core'): void ns3::ObjectFactory::SetTypeId(std::string tid) [member function]
+    cls.add_method('SetTypeId', 
+                   'void', 
+                   [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_Ns3PcapFile_methods(root_module, cls):
+    ## pcap-file.h (module 'network'): ns3::PcapFile::PcapFile() [constructor]
+    cls.add_constructor([])
+    ## pcap-file.h (module 'network'): void ns3::PcapFile::Clear() [member function]
+    cls.add_method('Clear', 
+                   'void', 
+                   [])
+    ## pcap-file.h (module 'network'): void ns3::PcapFile::Close() [member function]
+    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]
+    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')], 
+                   is_static=True)
+    ## pcap-file.h (module 'network'): bool ns3::PcapFile::Eof() const [member function]
+    cls.add_method('Eof', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## pcap-file.h (module 'network'): bool ns3::PcapFile::Fail() const [member function]
+    cls.add_method('Fail', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## pcap-file.h (module 'network'): uint32_t ns3::PcapFile::GetDataLinkType() [member function]
+    cls.add_method('GetDataLinkType', 
+                   'uint32_t', 
+                   [])
+    ## pcap-file.h (module 'network'): uint32_t ns3::PcapFile::GetMagic() [member function]
+    cls.add_method('GetMagic', 
+                   'uint32_t', 
+                   [])
+    ## pcap-file.h (module 'network'): uint32_t ns3::PcapFile::GetSigFigs() [member function]
+    cls.add_method('GetSigFigs', 
+                   'uint32_t', 
+                   [])
+    ## pcap-file.h (module 'network'): uint32_t ns3::PcapFile::GetSnapLen() [member function]
+    cls.add_method('GetSnapLen', 
+                   'uint32_t', 
+                   [])
+    ## pcap-file.h (module 'network'): bool ns3::PcapFile::GetSwapMode() [member function]
+    cls.add_method('GetSwapMode', 
+                   'bool', 
+                   [])
+    ## pcap-file.h (module 'network'): int32_t ns3::PcapFile::GetTimeZoneOffset() [member function]
+    cls.add_method('GetTimeZoneOffset', 
+                   'int32_t', 
+                   [])
+    ## pcap-file.h (module 'network'): uint16_t ns3::PcapFile::GetVersionMajor() [member function]
+    cls.add_method('GetVersionMajor', 
+                   'uint16_t', 
+                   [])
+    ## pcap-file.h (module 'network'): uint16_t ns3::PcapFile::GetVersionMinor() [member function]
+    cls.add_method('GetVersionMinor', 
+                   'uint16_t', 
+                   [])
+    ## pcap-file.h (module 'network'): void ns3::PcapFile::Init(uint32_t dataLinkType, uint32_t snapLen=ns3::PcapFile::SNAPLEN_DEFAULT, int32_t timeZoneCorrection=ns3::PcapFile::ZONE_DEFAULT, bool swapMode=false) [member function]
+    cls.add_method('Init', 
+                   'void', 
+                   [param('uint32_t', 'dataLinkType'), param('uint32_t', 'snapLen', default_value='ns3::PcapFile::SNAPLEN_DEFAULT'), param('int32_t', 'timeZoneCorrection', default_value='ns3::PcapFile::ZONE_DEFAULT'), param('bool', 'swapMode', default_value='false')])
+    ## pcap-file.h (module 'network'): void ns3::PcapFile::Open(std::string const & filename, std::_Ios_Openmode mode) [member function]
+    cls.add_method('Open', 
+                   'void', 
+                   [param('std::string const &', 'filename'), param('std::_Ios_Openmode', 'mode')])
+    ## pcap-file.h (module 'network'): void ns3::PcapFile::Read(uint8_t * const data, uint32_t maxBytes, uint32_t & tsSec, uint32_t & tsUsec, uint32_t & inclLen, uint32_t & origLen, uint32_t & readLen) [member function]
+    cls.add_method('Read', 
+                   'void', 
+                   [param('uint8_t * const', 'data'), param('uint32_t', 'maxBytes'), param('uint32_t &', 'tsSec'), param('uint32_t &', 'tsUsec'), param('uint32_t &', 'inclLen'), param('uint32_t &', 'origLen'), param('uint32_t &', 'readLen')])
+    ## pcap-file.h (module 'network'): void ns3::PcapFile::Write(uint32_t tsSec, uint32_t tsUsec, uint8_t const * const data, uint32_t totalLen) [member function]
+    cls.add_method('Write', 
+                   'void', 
+                   [param('uint32_t', 'tsSec'), param('uint32_t', 'tsUsec'), param('uint8_t const * const', 'data'), param('uint32_t', 'totalLen')])
+    ## pcap-file.h (module 'network'): void ns3::PcapFile::Write(uint32_t tsSec, uint32_t tsUsec, ns3::Ptr<const ns3::Packet> p) [member function]
+    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]
+    cls.add_method('Write', 
+                   'void', 
+                   [param('uint32_t', 'tsSec'), param('uint32_t', 'tsUsec'), param('ns3::Header &', '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]
+    cls.add_static_attribute('ZONE_DEFAULT', 'int32_t const', is_const=True)
+    return
+
+def register_Ns3PcapHelper_methods(root_module, cls):
+    ## trace-helper.h (module 'network'): ns3::PcapHelper::PcapHelper(ns3::PcapHelper const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::PcapHelper const &', 'arg0')])
+    ## trace-helper.h (module 'network'): ns3::PcapHelper::PcapHelper() [constructor]
+    cls.add_constructor([])
+    ## trace-helper.h (module 'network'): ns3::Ptr<ns3::PcapFileWrapper> ns3::PcapHelper::CreateFile(std::string filename, std::_Ios_Openmode filemode, uint32_t dataLinkType, uint32_t snapLen=65535, int32_t tzCorrection=0) [member function]
+    cls.add_method('CreateFile', 
+                   'ns3::Ptr< ns3::PcapFileWrapper >', 
+                   [param('std::string', 'filename'), param('std::_Ios_Openmode', 'filemode'), param('uint32_t', 'dataLinkType'), param('uint32_t', 'snapLen', default_value='65535'), param('int32_t', 'tzCorrection', default_value='0')])
+    ## trace-helper.h (module 'network'): std::string ns3::PcapHelper::GetFilenameFromDevice(std::string prefix, ns3::Ptr<ns3::NetDevice> device, bool useObjectNames=true) [member function]
+    cls.add_method('GetFilenameFromDevice', 
+                   'std::string', 
+                   [param('std::string', 'prefix'), param('ns3::Ptr< ns3::NetDevice >', 'device'), param('bool', 'useObjectNames', default_value='true')])
+    ## trace-helper.h (module 'network'): std::string ns3::PcapHelper::GetFilenameFromInterfacePair(std::string prefix, ns3::Ptr<ns3::Object> object, uint32_t interface, bool useObjectNames=true) [member function]
+    cls.add_method('GetFilenameFromInterfacePair', 
+                   'std::string', 
+                   [param('std::string', 'prefix'), param('ns3::Ptr< ns3::Object >', 'object'), param('uint32_t', 'interface'), param('bool', 'useObjectNames', default_value='true')])
+    return
+
+def register_Ns3PcapHelperForDevice_methods(root_module, cls):
+    ## trace-helper.h (module 'network'): ns3::PcapHelperForDevice::PcapHelperForDevice(ns3::PcapHelperForDevice const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::PcapHelperForDevice const &', 'arg0')])
+    ## trace-helper.h (module 'network'): ns3::PcapHelperForDevice::PcapHelperForDevice() [constructor]
+    cls.add_constructor([])
+    ## trace-helper.h (module 'network'): void ns3::PcapHelperForDevice::EnablePcap(std::string prefix, ns3::Ptr<ns3::NetDevice> nd, bool promiscuous=false, bool explicitFilename=false) [member function]
+    cls.add_method('EnablePcap', 
+                   'void', 
+                   [param('std::string', 'prefix'), param('ns3::Ptr< ns3::NetDevice >', 'nd'), param('bool', 'promiscuous', default_value='false'), param('bool', 'explicitFilename', default_value='false')])
+    ## trace-helper.h (module 'network'): void ns3::PcapHelperForDevice::EnablePcap(std::string prefix, std::string ndName, bool promiscuous=false, bool explicitFilename=false) [member function]
+    cls.add_method('EnablePcap', 
+                   'void', 
+                   [param('std::string', 'prefix'), param('std::string', 'ndName'), param('bool', 'promiscuous', default_value='false'), param('bool', 'explicitFilename', default_value='false')])
+    ## trace-helper.h (module 'network'): void ns3::PcapHelperForDevice::EnablePcap(std::string prefix, ns3::NetDeviceContainer d, bool promiscuous=false) [member function]
+    cls.add_method('EnablePcap', 
+                   'void', 
+                   [param('std::string', 'prefix'), param('ns3::NetDeviceContainer', 'd'), param('bool', 'promiscuous', default_value='false')])
+    ## trace-helper.h (module 'network'): void ns3::PcapHelperForDevice::EnablePcap(std::string prefix, ns3::NodeContainer n, bool promiscuous=false) [member function]
+    cls.add_method('EnablePcap', 
+                   'void', 
+                   [param('std::string', 'prefix'), param('ns3::NodeContainer', 'n'), param('bool', 'promiscuous', default_value='false')])
+    ## trace-helper.h (module 'network'): void ns3::PcapHelperForDevice::EnablePcap(std::string prefix, uint32_t nodeid, uint32_t deviceid, bool promiscuous=false) [member function]
+    cls.add_method('EnablePcap', 
+                   'void', 
+                   [param('std::string', 'prefix'), param('uint32_t', 'nodeid'), param('uint32_t', 'deviceid'), param('bool', 'promiscuous', default_value='false')])
+    ## trace-helper.h (module 'network'): void ns3::PcapHelperForDevice::EnablePcapAll(std::string prefix, bool promiscuous=false) [member function]
+    cls.add_method('EnablePcapAll', 
+                   'void', 
+                   [param('std::string', 'prefix'), param('bool', 'promiscuous', default_value='false')])
+    ## trace-helper.h (module 'network'): void ns3::PcapHelperForDevice::EnablePcapInternal(std::string prefix, ns3::Ptr<ns3::NetDevice> nd, bool promiscuous, bool explicitFilename) [member function]
+    cls.add_method('EnablePcapInternal', 
+                   'void', 
+                   [param('std::string', 'prefix'), param('ns3::Ptr< ns3::NetDevice >', 'nd'), param('bool', 'promiscuous'), param('bool', 'explicitFilename')], 
+                   is_pure_virtual=True, is_virtual=True)
+    return
+
+def register_Ns3SequenceNumber8_methods(root_module, cls):
+    cls.add_binary_comparison_operator('!=')
+    cls.add_binary_numeric_operator('+', root_module['ns3::SequenceNumber8'], root_module['ns3::SequenceNumber8'], param('ns3::SequenceNumber< unsigned char, signed char > const &', u'right'))
+    cls.add_binary_numeric_operator('+', root_module['ns3::SequenceNumber8'], root_module['ns3::SequenceNumber8'], param('signed char', u'right'))
+    cls.add_inplace_numeric_operator('+=', param('signed char', u'right'))
+    cls.add_binary_numeric_operator('-', root_module['ns3::SequenceNumber8'], root_module['ns3::SequenceNumber8'], param('signed char', u'right'))
+    cls.add_inplace_numeric_operator('-=', param('signed char', u'right'))
+    cls.add_binary_comparison_operator('<')
+    cls.add_binary_comparison_operator('<=')
+    cls.add_binary_comparison_operator('==')
+    cls.add_binary_comparison_operator('>')
+    cls.add_binary_comparison_operator('>=')
+    ## sequence-number.h (module 'network'): ns3::SequenceNumber<unsigned char, signed char>::SequenceNumber() [constructor]
+    cls.add_constructor([])
+    ## sequence-number.h (module 'network'): ns3::SequenceNumber<unsigned char, signed char>::SequenceNumber(unsigned char value) [constructor]
+    cls.add_constructor([param('unsigned char', 'value')])
+    ## sequence-number.h (module 'network'): ns3::SequenceNumber<unsigned char, signed char>::SequenceNumber(ns3::SequenceNumber<unsigned char, signed char> const & value) [copy constructor]
+    cls.add_constructor([param('ns3::SequenceNumber< unsigned char, signed char > const &', 'value')])
+    ## sequence-number.h (module 'network'): unsigned char ns3::SequenceNumber<unsigned char, signed char>::GetValue() const [member function]
+    cls.add_method('GetValue', 
+                   'unsigned char', 
+                   [], 
+                   is_const=True)
+    return
+
+def register_Ns3SimpleRefCount__Ns3Object_Ns3ObjectBase_Ns3ObjectDeleter_methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter>::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter>::SimpleRefCount(ns3::SimpleRefCount<ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter> const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter>::Cleanup() [member function]
+    cls.add_method('Cleanup', 
+                   'void', 
+                   [], 
+                   is_static=True)
+    return
+
+def register_Ns3Simulator_methods(root_module, cls):
+    ## simulator.h (module 'core'): ns3::Simulator::Simulator(ns3::Simulator const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Simulator const &', 'arg0')])
+    ## simulator.h (module 'core'): static void ns3::Simulator::Cancel(ns3::EventId const & id) [member function]
+    cls.add_method('Cancel', 
+                   'void', 
+                   [param('ns3::EventId const &', 'id')], 
+                   is_static=True)
+    ## simulator.h (module 'core'): static void ns3::Simulator::Destroy() [member function]
+    cls.add_method('Destroy', 
+                   'void', 
+                   [], 
+                   is_static=True)
+    ## simulator.h (module 'core'): static uint32_t ns3::Simulator::GetContext() [member function]
+    cls.add_method('GetContext', 
+                   'uint32_t', 
+                   [], 
+                   is_static=True)
+    ## simulator.h (module 'core'): static ns3::Time ns3::Simulator::GetDelayLeft(ns3::EventId const & id) [member function]
+    cls.add_method('GetDelayLeft', 
+                   'ns3::Time', 
+                   [param('ns3::EventId const &', 'id')], 
+                   is_static=True)
+    ## simulator.h (module 'core'): static ns3::Ptr<ns3::SimulatorImpl> ns3::Simulator::GetImplementation() [member function]
+    cls.add_method('GetImplementation', 
+                   'ns3::Ptr< ns3::SimulatorImpl >', 
+                   [], 
+                   is_static=True)
+    ## simulator.h (module 'core'): static ns3::Time ns3::Simulator::GetMaximumSimulationTime() [member function]
+    cls.add_method('GetMaximumSimulationTime', 
+                   'ns3::Time', 
+                   [], 
+                   is_static=True)
+    ## simulator.h (module 'core'): static uint32_t ns3::Simulator::GetSystemId() [member function]
+    cls.add_method('GetSystemId', 
+                   'uint32_t', 
+                   [], 
+                   is_static=True)
+    ## simulator.h (module 'core'): static bool ns3::Simulator::IsExpired(ns3::EventId const & id) [member function]
+    cls.add_method('IsExpired', 
+                   'bool', 
+                   [param('ns3::EventId const &', 'id')], 
+                   is_static=True)
+    ## simulator.h (module 'core'): static bool ns3::Simulator::IsFinished() [member function]
+    cls.add_method('IsFinished', 
+                   'bool', 
+                   [], 
+                   is_static=True)
+    ## simulator.h (module 'core'): static ns3::Time ns3::Simulator::Now() [member function]
+    cls.add_method('Now', 
+                   'ns3::Time', 
+                   [], 
+                   is_static=True)
+    ## simulator.h (module 'core'): static void ns3::Simulator::Remove(ns3::EventId const & id) [member function]
+    cls.add_method('Remove', 
+                   'void', 
+                   [param('ns3::EventId const &', 'id')], 
+                   is_static=True)
+    ## simulator.h (module 'core'): static void ns3::Simulator::SetImplementation(ns3::Ptr<ns3::SimulatorImpl> impl) [member function]
+    cls.add_method('SetImplementation', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::SimulatorImpl >', 'impl')], 
+                   is_static=True)
+    ## simulator.h (module 'core'): static void ns3::Simulator::SetScheduler(ns3::ObjectFactory schedulerFactory) [member function]
+    cls.add_method('SetScheduler', 
+                   'void', 
+                   [param('ns3::ObjectFactory', 'schedulerFactory')], 
+                   is_static=True)
+    ## simulator.h (module 'core'): static void ns3::Simulator::Stop() [member function]
+    cls.add_method('Stop', 
+                   'void', 
+                   [], 
+                   is_static=True)
+    ## simulator.h (module 'core'): static void ns3::Simulator::Stop(ns3::Time const & time) [member function]
+    cls.add_method('Stop', 
+                   'void', 
+                   [param('ns3::Time const &', 'time')], 
+                   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', 
+                   'void', 
+                   [param('ns3::TagBuffer', 'o')])
+    ## tag-buffer.h (module 'network'): void ns3::TagBuffer::Read(uint8_t * buffer, uint32_t size) [member function]
+    cls.add_method('Read', 
+                   'void', 
+                   [param('uint8_t *', 'buffer'), param('uint32_t', 'size')])
+    ## tag-buffer.h (module 'network'): double ns3::TagBuffer::ReadDouble() [member function]
+    cls.add_method('ReadDouble', 
+                   'double', 
+                   [])
+    ## tag-buffer.h (module 'network'): uint16_t ns3::TagBuffer::ReadU16() [member function]
+    cls.add_method('ReadU16', 
+                   'uint16_t', 
+                   [])
+    ## tag-buffer.h (module 'network'): uint32_t ns3::TagBuffer::ReadU32() [member function]
+    cls.add_method('ReadU32', 
+                   'uint32_t', 
+                   [])
+    ## tag-buffer.h (module 'network'): uint64_t ns3::TagBuffer::ReadU64() [member function]
+    cls.add_method('ReadU64', 
+                   'uint64_t', 
+                   [])
+    ## tag-buffer.h (module 'network'): uint8_t ns3::TagBuffer::ReadU8() [member function]
+    cls.add_method('ReadU8', 
+                   'uint8_t', 
+                   [])
+    ## tag-buffer.h (module 'network'): void ns3::TagBuffer::TrimAtEnd(uint32_t trim) [member function]
+    cls.add_method('TrimAtEnd', 
+                   'void', 
+                   [param('uint32_t', 'trim')])
+    ## tag-buffer.h (module 'network'): void ns3::TagBuffer::Write(uint8_t const * buffer, uint32_t size) [member function]
+    cls.add_method('Write', 
+                   'void', 
+                   [param('uint8_t const *', 'buffer'), param('uint32_t', 'size')])
+    ## tag-buffer.h (module 'network'): void ns3::TagBuffer::WriteDouble(double v) [member function]
+    cls.add_method('WriteDouble', 
+                   'void', 
+                   [param('double', 'v')])
+    ## tag-buffer.h (module 'network'): void ns3::TagBuffer::WriteU16(uint16_t data) [member function]
+    cls.add_method('WriteU16', 
+                   'void', 
+                   [param('uint16_t', 'data')])
+    ## tag-buffer.h (module 'network'): void ns3::TagBuffer::WriteU32(uint32_t data) [member function]
+    cls.add_method('WriteU32', 
+                   'void', 
+                   [param('uint32_t', 'data')])
+    ## tag-buffer.h (module 'network'): void ns3::TagBuffer::WriteU64(uint64_t v) [member function]
+    cls.add_method('WriteU64', 
+                   'void', 
+                   [param('uint64_t', 'v')])
+    ## tag-buffer.h (module 'network'): void ns3::TagBuffer::WriteU8(uint8_t v) [member function]
+    cls.add_method('WriteU8', 
+                   'void', 
+                   [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('!=')
+    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')])
+    ## type-id.h (module 'core'): ns3::TypeId::TypeId() [constructor]
+    cls.add_constructor([])
+    ## type-id.h (module 'core'): ns3::TypeId::TypeId(ns3::TypeId const & o) [copy constructor]
+    cls.add_constructor([param('ns3::TypeId const &', 'o')])
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::AddAttribute(std::string name, std::string help, ns3::AttributeValue const & initialValue, ns3::Ptr<ns3::AttributeAccessor const> accessor, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
+    cls.add_method('AddAttribute', 
+                   'ns3::TypeId', 
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::AttributeValue const &', 'initialValue'), param('ns3::Ptr< ns3::AttributeAccessor const >', 'accessor'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')])
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::AddAttribute(std::string name, std::string help, uint32_t flags, ns3::AttributeValue const & initialValue, ns3::Ptr<ns3::AttributeAccessor const> accessor, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
+    cls.add_method('AddAttribute', 
+                   'ns3::TypeId', 
+                   [param('std::string', 'name'), param('std::string', 'help'), param('uint32_t', 'flags'), param('ns3::AttributeValue const &', 'initialValue'), param('ns3::Ptr< ns3::AttributeAccessor const >', 'accessor'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')])
+    ## 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')])
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation ns3::TypeId::GetAttribute(uint32_t i) const [member function]
+    cls.add_method('GetAttribute', 
+                   'ns3::TypeId::AttributeInformation', 
+                   [param('uint32_t', 'i')], 
+                   is_const=True)
+    ## type-id.h (module 'core'): std::string ns3::TypeId::GetAttributeFullName(uint32_t i) const [member function]
+    cls.add_method('GetAttributeFullName', 
+                   'std::string', 
+                   [param('uint32_t', 'i')], 
+                   is_const=True)
+    ## type-id.h (module 'core'): uint32_t ns3::TypeId::GetAttributeN() const [member function]
+    cls.add_method('GetAttributeN', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## type-id.h (module 'core'): ns3::Callback<ns3::ObjectBase*,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> ns3::TypeId::GetConstructor() const [member function]
+    cls.add_method('GetConstructor', 
+                   'ns3::Callback< ns3::ObjectBase *, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 
+                   [], 
+                   is_const=True)
+    ## type-id.h (module 'core'): std::string ns3::TypeId::GetGroupName() const [member function]
+    cls.add_method('GetGroupName', 
+                   'std::string', 
+                   [], 
+                   is_const=True)
+    ## type-id.h (module 'core'): uint32_t ns3::TypeId::GetHash() const [member function]
+    cls.add_method('GetHash', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## type-id.h (module 'core'): std::string ns3::TypeId::GetName() const [member function]
+    cls.add_method('GetName', 
+                   'std::string', 
+                   [], 
+                   is_const=True)
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::GetParent() const [member function]
+    cls.add_method('GetParent', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_const=True)
+    ## type-id.h (module 'core'): static ns3::TypeId ns3::TypeId::GetRegistered(uint32_t i) [member function]
+    cls.add_method('GetRegistered', 
+                   'ns3::TypeId', 
+                   [param('uint32_t', 'i')], 
+                   is_static=True)
+    ## type-id.h (module 'core'): static uint32_t ns3::TypeId::GetRegisteredN() [member function]
+    cls.add_method('GetRegisteredN', 
+                   'uint32_t', 
+                   [], 
+                   is_static=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', 
+                   [param('uint32_t', 'i')], 
+                   is_const=True)
+    ## type-id.h (module 'core'): uint32_t ns3::TypeId::GetTraceSourceN() const [member function]
+    cls.add_method('GetTraceSourceN', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## type-id.h (module 'core'): uint16_t ns3::TypeId::GetUid() const [member function]
+    cls.add_method('GetUid', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## type-id.h (module 'core'): bool ns3::TypeId::HasConstructor() const [member function]
+    cls.add_method('HasConstructor', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## type-id.h (module 'core'): bool ns3::TypeId::HasParent() const [member function]
+    cls.add_method('HasParent', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::HideFromDocumentation() [member function]
+    cls.add_method('HideFromDocumentation', 
+                   'ns3::TypeId', 
+                   [])
+    ## type-id.h (module 'core'): bool ns3::TypeId::IsChildOf(ns3::TypeId other) const [member function]
+    cls.add_method('IsChildOf', 
+                   'bool', 
+                   [param('ns3::TypeId', 'other')], 
+                   is_const=True)
+    ## type-id.h (module 'core'): bool ns3::TypeId::LookupAttributeByName(std::string name, ns3::TypeId::AttributeInformation * info) const [member function]
+    cls.add_method('LookupAttributeByName', 
+                   'bool', 
+                   [param('std::string', 'name'), param('ns3::TypeId::AttributeInformation *', 'info', transfer_ownership=False)], 
+                   is_const=True)
+    ## type-id.h (module 'core'): static ns3::TypeId ns3::TypeId::LookupByHash(uint32_t hash) [member function]
+    cls.add_method('LookupByHash', 
+                   'ns3::TypeId', 
+                   [param('uint32_t', 'hash')], 
+                   is_static=True)
+    ## type-id.h (module 'core'): static bool ns3::TypeId::LookupByHashFailSafe(uint32_t hash, ns3::TypeId * tid) [member function]
+    cls.add_method('LookupByHashFailSafe', 
+                   'bool', 
+                   [param('uint32_t', 'hash'), param('ns3::TypeId *', 'tid')], 
+                   is_static=True)
+    ## type-id.h (module 'core'): static ns3::TypeId ns3::TypeId::LookupByName(std::string name) [member function]
+    cls.add_method('LookupByName', 
+                   'ns3::TypeId', 
+                   [param('std::string', 'name')], 
+                   is_static=True)
+    ## type-id.h (module 'core'): ns3::Ptr<ns3::TraceSourceAccessor const> ns3::TypeId::LookupTraceSourceByName(std::string name) const [member function]
+    cls.add_method('LookupTraceSourceByName', 
+                   'ns3::Ptr< ns3::TraceSourceAccessor const >', 
+                   [param('std::string', 'name')], 
+                   is_const=True)
+    ## type-id.h (module 'core'): bool ns3::TypeId::MustHideFromDocumentation() const [member function]
+    cls.add_method('MustHideFromDocumentation', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## type-id.h (module 'core'): bool ns3::TypeId::SetAttributeInitialValue(uint32_t i, ns3::Ptr<ns3::AttributeValue const> initialValue) [member function]
+    cls.add_method('SetAttributeInitialValue', 
+                   'bool', 
+                   [param('uint32_t', 'i'), param('ns3::Ptr< ns3::AttributeValue const >', 'initialValue')])
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::SetGroupName(std::string groupName) [member function]
+    cls.add_method('SetGroupName', 
+                   'ns3::TypeId', 
+                   [param('std::string', 'groupName')])
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::SetParent(ns3::TypeId tid) [member function]
+    cls.add_method('SetParent', 
+                   'ns3::TypeId', 
+                   [param('ns3::TypeId', 'tid')])
+    ## type-id.h (module 'core'): void ns3::TypeId::SetUid(uint16_t tid) [member function]
+    cls.add_method('SetUid', 
+                   'void', 
+                   [param('uint16_t', 'tid')])
+    return
+
+def register_Ns3TypeIdAttributeInformation_methods(root_module, cls):
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::AttributeInformation() [constructor]
+    cls.add_constructor([])
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::AttributeInformation(ns3::TypeId::AttributeInformation const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::TypeId::AttributeInformation const &', 'arg0')])
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::accessor [variable]
+    cls.add_instance_attribute('accessor', 'ns3::Ptr< ns3::AttributeAccessor const >', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::checker [variable]
+    cls.add_instance_attribute('checker', 'ns3::Ptr< ns3::AttributeChecker const >', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::flags [variable]
+    cls.add_instance_attribute('flags', 'uint32_t', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::help [variable]
+    cls.add_instance_attribute('help', 'std::string', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::initialValue [variable]
+    cls.add_instance_attribute('initialValue', 'ns3::Ptr< ns3::AttributeValue const >', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::name [variable]
+    cls.add_instance_attribute('name', 'std::string', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation::originalInitialValue [variable]
+    cls.add_instance_attribute('originalInitialValue', 'ns3::Ptr< ns3::AttributeValue const >', is_const=False)
+    return
+
+def register_Ns3TypeIdTraceSourceInformation_methods(root_module, cls):
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::TraceSourceInformation() [constructor]
+    cls.add_constructor([])
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::TraceSourceInformation(ns3::TypeId::TraceSourceInformation const & arg0) [copy constructor]
+    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::help [variable]
+    cls.add_instance_attribute('help', 'std::string', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::name [variable]
+    cls.add_instance_attribute('name', 'std::string', is_const=False)
+    return
+
+def register_Ns3Empty_methods(root_module, cls):
+    ## empty.h (module 'core'): ns3::empty::empty() [constructor]
+    cls.add_constructor([])
+    ## empty.h (module 'core'): ns3::empty::empty(ns3::empty const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::empty const &', 'arg0')])
+    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('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 &', 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 &', 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('==')
+    cls.add_binary_comparison_operator('>=')
+    ## int64x64-double.h (module 'core'): ns3::int64x64_t::int64x64_t() [constructor]
+    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]
+    cls.add_constructor([param('long int', 'v')])
+    ## int64x64-double.h (module 'core'): ns3::int64x64_t::int64x64_t(long long int v) [constructor]
+    cls.add_constructor([param('long long int', 'v')])
+    ## int64x64-double.h (module 'core'): ns3::int64x64_t::int64x64_t(unsigned int v) [constructor]
+    cls.add_constructor([param('unsigned int', 'v')])
+    ## int64x64-double.h (module 'core'): ns3::int64x64_t::int64x64_t(long unsigned int v) [constructor]
+    cls.add_constructor([param('long unsigned int', 'v')])
+    ## int64x64-double.h (module 'core'): ns3::int64x64_t::int64x64_t(long long unsigned int v) [constructor]
+    cls.add_constructor([param('long long unsigned int', 'v')])
+    ## int64x64-double.h (module 'core'): ns3::int64x64_t::int64x64_t(int64_t hi, uint64_t lo) [constructor]
+    cls.add_constructor([param('int64_t', 'hi'), param('uint64_t', 'lo')])
+    ## int64x64-double.h (module 'core'): ns3::int64x64_t::int64x64_t(ns3::int64x64_t const & o) [copy constructor]
+    cls.add_constructor([param('ns3::int64x64_t const &', 'o')])
+    ## int64x64-double.h (module 'core'): double ns3::int64x64_t::GetDouble() const [member function]
+    cls.add_method('GetDouble', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## int64x64-double.h (module 'core'): int64_t ns3::int64x64_t::GetHigh() const [member function]
+    cls.add_method('GetHigh', 
+                   'int64_t', 
+                   [], 
+                   is_const=True)
+    ## int64x64-double.h (module 'core'): uint64_t ns3::int64x64_t::GetLow() const [member function]
+    cls.add_method('GetLow', 
+                   'uint64_t', 
+                   [], 
+                   is_const=True)
+    ## int64x64-double.h (module 'core'): static ns3::int64x64_t ns3::int64x64_t::Invert(uint64_t v) [member function]
+    cls.add_method('Invert', 
+                   'ns3::int64x64_t', 
+                   [param('uint64_t', 'v')], 
+                   is_static=True)
+    ## int64x64-double.h (module 'core'): void ns3::int64x64_t::MulByInvert(ns3::int64x64_t const & o) [member function]
+    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):
+    ## 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_Ns3LrWpanHelper_methods(root_module, cls):
+    ## lr-wpan-helper.h (module 'lr-wpan'): ns3::LrWpanHelper::LrWpanHelper() [constructor]
+    cls.add_constructor([])
+    ## lr-wpan-helper.h (module 'lr-wpan'): void ns3::LrWpanHelper::AddMobility(ns3::Ptr<ns3::LrWpanPhy> phy, ns3::Ptr<ns3::MobilityModel> m) [member function]
+    cls.add_method('AddMobility', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::LrWpanPhy >', 'phy'), param('ns3::Ptr< ns3::MobilityModel >', 'm')])
+    ## lr-wpan-helper.h (module 'lr-wpan'): ns3::NetDeviceContainer ns3::LrWpanHelper::Install(ns3::NodeContainer c) [member function]
+    cls.add_method('Install', 
+                   'ns3::NetDeviceContainer', 
+                   [param('ns3::NodeContainer', 'c')])
+    ## lr-wpan-helper.h (module 'lr-wpan'): void ns3::LrWpanHelper::AssociateToPan(ns3::NetDeviceContainer c, uint16_t panId) [member function]
+    cls.add_method('AssociateToPan', 
+                   'void', 
+                   [param('ns3::NetDeviceContainer', 'c'), param('uint16_t', 'panId')])
+    ## lr-wpan-helper.h (module 'lr-wpan'): void ns3::LrWpanHelper::EnableLogComponents() [member function]
+    cls.add_method('EnableLogComponents', 
+                   'void', 
+                   [])
+    ## lr-wpan-helper.h (module 'lr-wpan'): static std::string ns3::LrWpanHelper::LrWpanPhyEnumerationPrinter(ns3::LrWpanPhyEnumeration arg0) [member function]
+    cls.add_method('LrWpanPhyEnumerationPrinter', 
+                   'std::string', 
+                   [param('ns3::LrWpanPhyEnumeration', 'arg0')], 
+                   is_static=True)
+    ## lr-wpan-helper.h (module 'lr-wpan'): static std::string ns3::LrWpanHelper::LrWpanMacStatePrinter(ns3::LrWpanMacState e) [member function]
+    cls.add_method('LrWpanMacStatePrinter', 
+                   'std::string', 
+                   [param('ns3::LrWpanMacState', 'e')], 
+                   is_static=True)
+    ## lr-wpan-helper.h (module 'lr-wpan'): int64_t ns3::LrWpanHelper::AssignStreams(ns3::NetDeviceContainer c, int64_t stream) [member function]
+    cls.add_method('AssignStreams', 
+                   'int64_t', 
+                   [param('ns3::NetDeviceContainer', 'c'), param('int64_t', 'stream')])
+    ## lr-wpan-helper.h (module 'lr-wpan'): void ns3::LrWpanHelper::EnablePcapInternal(std::string prefix, ns3::Ptr<ns3::NetDevice> nd, bool promiscuous, bool explicitFilename) [member function]
+    cls.add_method('EnablePcapInternal', 
+                   'void', 
+                   [param('std::string', 'prefix'), param('ns3::Ptr< ns3::NetDevice >', 'nd'), param('bool', 'promiscuous'), param('bool', 'explicitFilename')], 
+                   visibility='private', is_virtual=True)
+    ## lr-wpan-helper.h (module 'lr-wpan'): void ns3::LrWpanHelper::EnableAsciiInternal(ns3::Ptr<ns3::OutputStreamWrapper> stream, std::string prefix, ns3::Ptr<ns3::NetDevice> nd, bool explicitFilename) [member function]
+    cls.add_method('EnableAsciiInternal', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream'), param('std::string', 'prefix'), param('ns3::Ptr< ns3::NetDevice >', 'nd'), param('bool', 'explicitFilename')], 
+                   visibility='private', is_virtual=True)
+    return
+
+def register_Ns3LrWpanLqiTag_methods(root_module, cls):
+    ## lr-wpan-lqi-tag.h (module 'lr-wpan'): ns3::LrWpanLqiTag::LrWpanLqiTag(ns3::LrWpanLqiTag const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::LrWpanLqiTag const &', 'arg0')])
+    ## lr-wpan-lqi-tag.h (module 'lr-wpan'): ns3::LrWpanLqiTag::LrWpanLqiTag() [constructor]
+    cls.add_constructor([])
+    ## lr-wpan-lqi-tag.h (module 'lr-wpan'): ns3::LrWpanLqiTag::LrWpanLqiTag(uint8_t lqi) [constructor]
+    cls.add_constructor([param('uint8_t', 'lqi')])
+    ## lr-wpan-lqi-tag.h (module 'lr-wpan'): void ns3::LrWpanLqiTag::Deserialize(ns3::TagBuffer i) [member function]
+    cls.add_method('Deserialize', 
+                   'void', 
+                   [param('ns3::TagBuffer', 'i')], 
+                   is_virtual=True)
+    ## lr-wpan-lqi-tag.h (module 'lr-wpan'): uint8_t ns3::LrWpanLqiTag::Get() const [member function]
+    cls.add_method('Get', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## lr-wpan-lqi-tag.h (module 'lr-wpan'): ns3::TypeId ns3::LrWpanLqiTag::GetInstanceTypeId() const [member function]
+    cls.add_method('GetInstanceTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## lr-wpan-lqi-tag.h (module 'lr-wpan'): uint32_t ns3::LrWpanLqiTag::GetSerializedSize() const [member function]
+    cls.add_method('GetSerializedSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## lr-wpan-lqi-tag.h (module 'lr-wpan'): static ns3::TypeId ns3::LrWpanLqiTag::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## lr-wpan-lqi-tag.h (module 'lr-wpan'): void ns3::LrWpanLqiTag::Print(std::ostream & os) const [member function]
+    cls.add_method('Print', 
+                   'void', 
+                   [param('std::ostream &', 'os')], 
+                   is_const=True, is_virtual=True)
+    ## lr-wpan-lqi-tag.h (module 'lr-wpan'): void ns3::LrWpanLqiTag::Serialize(ns3::TagBuffer i) const [member function]
+    cls.add_method('Serialize', 
+                   'void', 
+                   [param('ns3::TagBuffer', 'i')], 
+                   is_const=True, is_virtual=True)
+    ## lr-wpan-lqi-tag.h (module 'lr-wpan'): void ns3::LrWpanLqiTag::Set(uint8_t lqi) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('uint8_t', 'lqi')])
+    return
+
+def register_Ns3LrWpanMacHeader_methods(root_module, cls):
+    ## lr-wpan-mac-header.h (module 'lr-wpan'): ns3::LrWpanMacHeader::LrWpanMacHeader(ns3::LrWpanMacHeader const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::LrWpanMacHeader const &', 'arg0')])
+    ## lr-wpan-mac-header.h (module 'lr-wpan'): ns3::LrWpanMacHeader::LrWpanMacHeader() [constructor]
+    cls.add_constructor([])
+    ## lr-wpan-mac-header.h (module 'lr-wpan'): ns3::LrWpanMacHeader::LrWpanMacHeader(ns3::LrWpanMacHeader::LrWpanMacType wpanMacType, uint8_t seqNum) [constructor]
+    cls.add_constructor([param('ns3::LrWpanMacHeader::LrWpanMacType', 'wpanMacType'), param('uint8_t', 'seqNum')])
+    ## lr-wpan-mac-header.h (module 'lr-wpan'): uint32_t ns3::LrWpanMacHeader::Deserialize(ns3::Buffer::Iterator start) [member function]
+    cls.add_method('Deserialize', 
+                   'uint32_t', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_virtual=True)
+    ## lr-wpan-mac-header.h (module 'lr-wpan'): uint8_t ns3::LrWpanMacHeader::GetDstAddrMode() const [member function]
+    cls.add_method('GetDstAddrMode', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## lr-wpan-mac-header.h (module 'lr-wpan'): uint16_t ns3::LrWpanMacHeader::GetDstPanId() const [member function]
+    cls.add_method('GetDstPanId', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## lr-wpan-mac-header.h (module 'lr-wpan'): ns3::Mac64Address ns3::LrWpanMacHeader::GetExtDstAddr() const [member function]
+    cls.add_method('GetExtDstAddr', 
+                   'ns3::Mac64Address', 
+                   [], 
+                   is_const=True)
+    ## lr-wpan-mac-header.h (module 'lr-wpan'): ns3::Mac64Address ns3::LrWpanMacHeader::GetExtSrcAddr() const [member function]
+    cls.add_method('GetExtSrcAddr', 
+                   'ns3::Mac64Address', 
+                   [], 
+                   is_const=True)
+    ## lr-wpan-mac-header.h (module 'lr-wpan'): uint16_t ns3::LrWpanMacHeader::GetFrameControl() const [member function]
+    cls.add_method('GetFrameControl', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## lr-wpan-mac-header.h (module 'lr-wpan'): uint8_t ns3::LrWpanMacHeader::GetFrameVer() const [member function]
+    cls.add_method('GetFrameVer', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## lr-wpan-mac-header.h (module 'lr-wpan'): uint32_t ns3::LrWpanMacHeader::GetFrmCounter() const [member function]
+    cls.add_method('GetFrmCounter', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## lr-wpan-mac-header.h (module 'lr-wpan'): uint8_t ns3::LrWpanMacHeader::GetFrmCtrlRes() const [member function]
+    cls.add_method('GetFrmCtrlRes', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## lr-wpan-mac-header.h (module 'lr-wpan'): ns3::TypeId ns3::LrWpanMacHeader::GetInstanceTypeId() const [member function]
+    cls.add_method('GetInstanceTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## lr-wpan-mac-header.h (module 'lr-wpan'): uint8_t ns3::LrWpanMacHeader::GetKeyIdIndex() const [member function]
+    cls.add_method('GetKeyIdIndex', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## lr-wpan-mac-header.h (module 'lr-wpan'): uint8_t ns3::LrWpanMacHeader::GetKeyIdMode() const [member function]
+    cls.add_method('GetKeyIdMode', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## lr-wpan-mac-header.h (module 'lr-wpan'): uint32_t ns3::LrWpanMacHeader::GetKeyIdSrc32() const [member function]
+    cls.add_method('GetKeyIdSrc32', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## lr-wpan-mac-header.h (module 'lr-wpan'): uint64_t ns3::LrWpanMacHeader::GetKeyIdSrc64() const [member function]
+    cls.add_method('GetKeyIdSrc64', 
+                   'uint64_t', 
+                   [], 
+                   is_const=True)
+    ## lr-wpan-mac-header.h (module 'lr-wpan'): std::string ns3::LrWpanMacHeader::GetName() const [member function]
+    cls.add_method('GetName', 
+                   'std::string', 
+                   [], 
+                   is_const=True)
+    ## lr-wpan-mac-header.h (module 'lr-wpan'): uint8_t ns3::LrWpanMacHeader::GetSecControl() const [member function]
+    cls.add_method('GetSecControl', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## lr-wpan-mac-header.h (module 'lr-wpan'): uint8_t ns3::LrWpanMacHeader::GetSecLevel() const [member function]
+    cls.add_method('GetSecLevel', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## lr-wpan-mac-header.h (module 'lr-wpan'): uint8_t ns3::LrWpanMacHeader::GetSeqNum() const [member function]
+    cls.add_method('GetSeqNum', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## lr-wpan-mac-header.h (module 'lr-wpan'): uint32_t ns3::LrWpanMacHeader::GetSerializedSize() const [member function]
+    cls.add_method('GetSerializedSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## lr-wpan-mac-header.h (module 'lr-wpan'): ns3::Mac16Address ns3::LrWpanMacHeader::GetShortDstAddr() const [member function]
+    cls.add_method('GetShortDstAddr', 
+                   'ns3::Mac16Address', 
+                   [], 
+                   is_const=True)
+    ## lr-wpan-mac-header.h (module 'lr-wpan'): ns3::Mac16Address ns3::LrWpanMacHeader::GetShortSrcAddr() const [member function]
+    cls.add_method('GetShortSrcAddr', 
+                   'ns3::Mac16Address', 
+                   [], 
+                   is_const=True)
+    ## lr-wpan-mac-header.h (module 'lr-wpan'): uint8_t ns3::LrWpanMacHeader::GetSrcAddrMode() const [member function]
+    cls.add_method('GetSrcAddrMode', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## lr-wpan-mac-header.h (module 'lr-wpan'): uint16_t ns3::LrWpanMacHeader::GetSrcPanId() const [member function]
+    cls.add_method('GetSrcPanId', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## lr-wpan-mac-header.h (module 'lr-wpan'): ns3::LrWpanMacHeader::LrWpanMacType ns3::LrWpanMacHeader::GetType() const [member function]
+    cls.add_method('GetType', 
+                   'ns3::LrWpanMacHeader::LrWpanMacType', 
+                   [], 
+                   is_const=True)
+    ## lr-wpan-mac-header.h (module 'lr-wpan'): static ns3::TypeId ns3::LrWpanMacHeader::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## lr-wpan-mac-header.h (module 'lr-wpan'): uint8_t ns3::LrWpanMacHeader::GetsecctrlReserved() const [member function]
+    cls.add_method('GetsecctrlReserved', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## lr-wpan-mac-header.h (module 'lr-wpan'): bool ns3::LrWpanMacHeader::IsAckReq() const [member function]
+    cls.add_method('IsAckReq', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## lr-wpan-mac-header.h (module 'lr-wpan'): bool ns3::LrWpanMacHeader::IsAcknowledgment() const [member function]
+    cls.add_method('IsAcknowledgment', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## lr-wpan-mac-header.h (module 'lr-wpan'): bool ns3::LrWpanMacHeader::IsBeacon() const [member function]
+    cls.add_method('IsBeacon', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## lr-wpan-mac-header.h (module 'lr-wpan'): bool ns3::LrWpanMacHeader::IsCommand() const [member function]
+    cls.add_method('IsCommand', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## lr-wpan-mac-header.h (module 'lr-wpan'): bool ns3::LrWpanMacHeader::IsData() const [member function]
+    cls.add_method('IsData', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## lr-wpan-mac-header.h (module 'lr-wpan'): bool ns3::LrWpanMacHeader::IsFrmPend() const [member function]
+    cls.add_method('IsFrmPend', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## lr-wpan-mac-header.h (module 'lr-wpan'): bool ns3::LrWpanMacHeader::IsNoAckReq() const [member function]
+    cls.add_method('IsNoAckReq', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## lr-wpan-mac-header.h (module 'lr-wpan'): bool ns3::LrWpanMacHeader::IsNoFrmPend() const [member function]
+    cls.add_method('IsNoFrmPend', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## lr-wpan-mac-header.h (module 'lr-wpan'): bool ns3::LrWpanMacHeader::IsNoPanIdComp() const [member function]
+    cls.add_method('IsNoPanIdComp', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## lr-wpan-mac-header.h (module 'lr-wpan'): bool ns3::LrWpanMacHeader::IsPanIdComp() const [member function]
+    cls.add_method('IsPanIdComp', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## lr-wpan-mac-header.h (module 'lr-wpan'): bool ns3::LrWpanMacHeader::IsSecDisable() const [member function]
+    cls.add_method('IsSecDisable', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## lr-wpan-mac-header.h (module 'lr-wpan'): bool ns3::LrWpanMacHeader::IsSecEnable() const [member function]
+    cls.add_method('IsSecEnable', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## lr-wpan-mac-header.h (module 'lr-wpan'): void ns3::LrWpanMacHeader::Print(std::ostream & os) const [member function]
+    cls.add_method('Print', 
+                   'void', 
+                   [param('std::ostream &', 'os')], 
+                   is_const=True, is_virtual=True)
+    ## lr-wpan-mac-header.h (module 'lr-wpan'): void ns3::LrWpanMacHeader::PrintFrameControl(std::ostream & os) const [member function]
+    cls.add_method('PrintFrameControl', 
+                   'void', 
+                   [param('std::ostream &', 'os')], 
+                   is_const=True)
+    ## lr-wpan-mac-header.h (module 'lr-wpan'): void ns3::LrWpanMacHeader::Serialize(ns3::Buffer::Iterator start) const [member function]
+    cls.add_method('Serialize', 
+                   'void', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_const=True, is_virtual=True)
+    ## lr-wpan-mac-header.h (module 'lr-wpan'): void ns3::LrWpanMacHeader::SetAckReq() [member function]
+    cls.add_method('SetAckReq', 
+                   'void', 
+                   [])
+    ## lr-wpan-mac-header.h (module 'lr-wpan'): void ns3::LrWpanMacHeader::SetDstAddrFields(uint16_t panId, ns3::Mac16Address addr) [member function]
+    cls.add_method('SetDstAddrFields', 
+                   'void', 
+                   [param('uint16_t', 'panId'), param('ns3::Mac16Address', 'addr')])
+    ## lr-wpan-mac-header.h (module 'lr-wpan'): void ns3::LrWpanMacHeader::SetDstAddrFields(uint16_t panId, ns3::Mac64Address addr) [member function]
+    cls.add_method('SetDstAddrFields', 
+                   'void', 
+                   [param('uint16_t', 'panId'), param('ns3::Mac64Address', 'addr')])
+    ## lr-wpan-mac-header.h (module 'lr-wpan'): void ns3::LrWpanMacHeader::SetDstAddrMode(uint8_t addrMode) [member function]
+    cls.add_method('SetDstAddrMode', 
+                   'void', 
+                   [param('uint8_t', 'addrMode')])
+    ## lr-wpan-mac-header.h (module 'lr-wpan'): void ns3::LrWpanMacHeader::SetFrameControl(uint16_t frameControl) [member function]
+    cls.add_method('SetFrameControl', 
+                   'void', 
+                   [param('uint16_t', 'frameControl')])
+    ## lr-wpan-mac-header.h (module 'lr-wpan'): void ns3::LrWpanMacHeader::SetFrameVer(uint8_t ver) [member function]
+    cls.add_method('SetFrameVer', 
+                   'void', 
+                   [param('uint8_t', 'ver')])
+    ## lr-wpan-mac-header.h (module 'lr-wpan'): void ns3::LrWpanMacHeader::SetFrmCounter(uint32_t frmCntr) [member function]
+    cls.add_method('SetFrmCounter', 
+                   'void', 
+                   [param('uint32_t', 'frmCntr')])
+    ## lr-wpan-mac-header.h (module 'lr-wpan'): void ns3::LrWpanMacHeader::SetFrmCtrlRes(uint8_t res) [member function]
+    cls.add_method('SetFrmCtrlRes', 
+                   'void', 
+                   [param('uint8_t', 'res')])
+    ## lr-wpan-mac-header.h (module 'lr-wpan'): void ns3::LrWpanMacHeader::SetFrmPend() [member function]
+    cls.add_method('SetFrmPend', 
+                   'void', 
+                   [])
+    ## lr-wpan-mac-header.h (module 'lr-wpan'): void ns3::LrWpanMacHeader::SetKeyId(uint8_t keyIndex) [member function]
+    cls.add_method('SetKeyId', 
+                   'void', 
+                   [param('uint8_t', 'keyIndex')])
+    ## lr-wpan-mac-header.h (module 'lr-wpan'): void ns3::LrWpanMacHeader::SetKeyId(uint32_t keySrc, uint8_t keyIndex) [member function]
+    cls.add_method('SetKeyId', 
+                   'void', 
+                   [param('uint32_t', 'keySrc'), param('uint8_t', 'keyIndex')])
+    ## lr-wpan-mac-header.h (module 'lr-wpan'): void ns3::LrWpanMacHeader::SetKeyId(uint64_t keySrc, uint8_t keyIndex) [member function]
+    cls.add_method('SetKeyId', 
+                   'void', 
+                   [param('uint64_t', 'keySrc'), param('uint8_t', 'keyIndex')])
+    ## lr-wpan-mac-header.h (module 'lr-wpan'): void ns3::LrWpanMacHeader::SetKeyIdMode(uint8_t keyIdMode) [member function]
+    cls.add_method('SetKeyIdMode', 
+                   'void', 
+                   [param('uint8_t', 'keyIdMode')])
+    ## lr-wpan-mac-header.h (module 'lr-wpan'): void ns3::LrWpanMacHeader::SetNoAckReq() [member function]
+    cls.add_method('SetNoAckReq', 
+                   'void', 
+                   [])
+    ## lr-wpan-mac-header.h (module 'lr-wpan'): void ns3::LrWpanMacHeader::SetNoFrmPend() [member function]
+    cls.add_method('SetNoFrmPend', 
+                   'void', 
+                   [])
+    ## lr-wpan-mac-header.h (module 'lr-wpan'): void ns3::LrWpanMacHeader::SetNoPanIdComp() [member function]
+    cls.add_method('SetNoPanIdComp', 
+                   'void', 
+                   [])
+    ## lr-wpan-mac-header.h (module 'lr-wpan'): void ns3::LrWpanMacHeader::SetPanIdComp() [member function]
+    cls.add_method('SetPanIdComp', 
+                   'void', 
+                   [])
+    ## lr-wpan-mac-header.h (module 'lr-wpan'): void ns3::LrWpanMacHeader::SetSecControl(uint8_t secLevel) [member function]
+    cls.add_method('SetSecControl', 
+                   'void', 
+                   [param('uint8_t', 'secLevel')])
+    ## lr-wpan-mac-header.h (module 'lr-wpan'): void ns3::LrWpanMacHeader::SetSecDisable() [member function]
+    cls.add_method('SetSecDisable', 
+                   'void', 
+                   [])
+    ## lr-wpan-mac-header.h (module 'lr-wpan'): void ns3::LrWpanMacHeader::SetSecEnable() [member function]
+    cls.add_method('SetSecEnable', 
+                   'void', 
+                   [])
+    ## lr-wpan-mac-header.h (module 'lr-wpan'): void ns3::LrWpanMacHeader::SetSecLevel(uint8_t secLevel) [member function]
+    cls.add_method('SetSecLevel', 
+                   'void', 
+                   [param('uint8_t', 'secLevel')])
+    ## lr-wpan-mac-header.h (module 'lr-wpan'): void ns3::LrWpanMacHeader::SetSeqNum(uint8_t seqNum) [member function]
+    cls.add_method('SetSeqNum', 
+                   'void', 
+                   [param('uint8_t', 'seqNum')])
+    ## lr-wpan-mac-header.h (module 'lr-wpan'): void ns3::LrWpanMacHeader::SetSrcAddrFields(uint16_t panId, ns3::Mac16Address addr) [member function]
+    cls.add_method('SetSrcAddrFields', 
+                   'void', 
+                   [param('uint16_t', 'panId'), param('ns3::Mac16Address', 'addr')])
+    ## lr-wpan-mac-header.h (module 'lr-wpan'): void ns3::LrWpanMacHeader::SetSrcAddrFields(uint16_t panId, ns3::Mac64Address addr) [member function]
+    cls.add_method('SetSrcAddrFields', 
+                   'void', 
+                   [param('uint16_t', 'panId'), param('ns3::Mac64Address', 'addr')])
+    ## lr-wpan-mac-header.h (module 'lr-wpan'): void ns3::LrWpanMacHeader::SetSrcAddrMode(uint8_t addrMode) [member function]
+    cls.add_method('SetSrcAddrMode', 
+                   'void', 
+                   [param('uint8_t', 'addrMode')])
+    ## lr-wpan-mac-header.h (module 'lr-wpan'): void ns3::LrWpanMacHeader::SetType(ns3::LrWpanMacHeader::LrWpanMacType wpanMacType) [member function]
+    cls.add_method('SetType', 
+                   'void', 
+                   [param('ns3::LrWpanMacHeader::LrWpanMacType', 'wpanMacType')])
+    ## lr-wpan-mac-header.h (module 'lr-wpan'): void ns3::LrWpanMacHeader::SetsecctrlReserved(uint8_t res) [member function]
+    cls.add_method('SetsecctrlReserved', 
+                   'void', 
+                   [param('uint8_t', 'res')])
+    return
+
+def register_Ns3Object_methods(root_module, cls):
+    ## object.h (module 'core'): ns3::Object::Object() [constructor]
+    cls.add_constructor([])
+    ## object.h (module 'core'): void ns3::Object::AggregateObject(ns3::Ptr<ns3::Object> other) [member function]
+    cls.add_method('AggregateObject', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Object >', 'other')])
+    ## object.h (module 'core'): void ns3::Object::Dispose() [member function]
+    cls.add_method('Dispose', 
+                   'void', 
+                   [])
+    ## object.h (module 'core'): ns3::Object::AggregateIterator ns3::Object::GetAggregateIterator() const [member function]
+    cls.add_method('GetAggregateIterator', 
+                   'ns3::Object::AggregateIterator', 
+                   [], 
+                   is_const=True)
+    ## object.h (module 'core'): ns3::TypeId ns3::Object::GetInstanceTypeId() const [member function]
+    cls.add_method('GetInstanceTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## object.h (module 'core'): static ns3::TypeId ns3::Object::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## object.h (module 'core'): void ns3::Object::Initialize() [member function]
+    cls.add_method('Initialize', 
+                   'void', 
+                   [])
+    ## object.h (module 'core'): ns3::Object::Object(ns3::Object const & o) [copy constructor]
+    cls.add_constructor([param('ns3::Object const &', 'o')], 
+                        visibility='protected')
+    ## object.h (module 'core'): void ns3::Object::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    ## object.h (module 'core'): void ns3::Object::DoInitialize() [member function]
+    cls.add_method('DoInitialize', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    ## object.h (module 'core'): void ns3::Object::NotifyNewAggregate() [member function]
+    cls.add_method('NotifyNewAggregate', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    return
+
+def register_Ns3ObjectAggregateIterator_methods(root_module, cls):
+    ## object.h (module 'core'): ns3::Object::AggregateIterator::AggregateIterator(ns3::Object::AggregateIterator const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Object::AggregateIterator const &', 'arg0')])
+    ## object.h (module 'core'): ns3::Object::AggregateIterator::AggregateIterator() [constructor]
+    cls.add_constructor([])
+    ## object.h (module 'core'): bool ns3::Object::AggregateIterator::HasNext() const [member function]
+    cls.add_method('HasNext', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## object.h (module 'core'): ns3::Ptr<ns3::Object const> ns3::Object::AggregateIterator::Next() [member function]
+    cls.add_method('Next', 
+                   'ns3::Ptr< ns3::Object const >', 
+                   [])
+    return
+
+def register_Ns3PcapFileWrapper_methods(root_module, cls):
+    ## pcap-file-wrapper.h (module 'network'): static ns3::TypeId ns3::PcapFileWrapper::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## pcap-file-wrapper.h (module 'network'): ns3::PcapFileWrapper::PcapFileWrapper() [constructor]
+    cls.add_constructor([])
+    ## pcap-file-wrapper.h (module 'network'): bool ns3::PcapFileWrapper::Fail() const [member function]
+    cls.add_method('Fail', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## pcap-file-wrapper.h (module 'network'): bool ns3::PcapFileWrapper::Eof() const [member function]
+    cls.add_method('Eof', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## pcap-file-wrapper.h (module 'network'): void ns3::PcapFileWrapper::Clear() [member function]
+    cls.add_method('Clear', 
+                   'void', 
+                   [])
+    ## pcap-file-wrapper.h (module 'network'): void ns3::PcapFileWrapper::Open(std::string const & filename, std::_Ios_Openmode mode) [member function]
+    cls.add_method('Open', 
+                   'void', 
+                   [param('std::string const &', 'filename'), param('std::_Ios_Openmode', 'mode')])
+    ## pcap-file-wrapper.h (module 'network'): void ns3::PcapFileWrapper::Close() [member function]
+    cls.add_method('Close', 
+                   'void', 
+                   [])
+    ## pcap-file-wrapper.h (module 'network'): void ns3::PcapFileWrapper::Init(uint32_t dataLinkType, uint32_t snapLen=std::numeric_limits<unsigned int>::max(), int32_t tzCorrection=ns3::PcapFile::ZONE_DEFAULT) [member function]
+    cls.add_method('Init', 
+                   'void', 
+                   [param('uint32_t', 'dataLinkType'), param('uint32_t', 'snapLen', default_value='std::numeric_limits<unsigned int>::max()'), param('int32_t', 'tzCorrection', default_value='ns3::PcapFile::ZONE_DEFAULT')])
+    ## pcap-file-wrapper.h (module 'network'): void ns3::PcapFileWrapper::Write(ns3::Time t, ns3::Ptr<const ns3::Packet> p) [member function]
+    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]
+    cls.add_method('Write', 
+                   'void', 
+                   [param('ns3::Time', 't'), param('ns3::Header &', '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', 
+                   [param('ns3::Time', 't'), param('uint8_t const *', 'buffer'), param('uint32_t', 'length')])
+    ## pcap-file-wrapper.h (module 'network'): uint32_t ns3::PcapFileWrapper::GetMagic() [member function]
+    cls.add_method('GetMagic', 
+                   'uint32_t', 
+                   [])
+    ## pcap-file-wrapper.h (module 'network'): uint16_t ns3::PcapFileWrapper::GetVersionMajor() [member function]
+    cls.add_method('GetVersionMajor', 
+                   'uint16_t', 
+                   [])
+    ## pcap-file-wrapper.h (module 'network'): uint16_t ns3::PcapFileWrapper::GetVersionMinor() [member function]
+    cls.add_method('GetVersionMinor', 
+                   'uint16_t', 
+                   [])
+    ## pcap-file-wrapper.h (module 'network'): int32_t ns3::PcapFileWrapper::GetTimeZoneOffset() [member function]
+    cls.add_method('GetTimeZoneOffset', 
+                   'int32_t', 
+                   [])
+    ## pcap-file-wrapper.h (module 'network'): uint32_t ns3::PcapFileWrapper::GetSigFigs() [member function]
+    cls.add_method('GetSigFigs', 
+                   'uint32_t', 
+                   [])
+    ## pcap-file-wrapper.h (module 'network'): uint32_t ns3::PcapFileWrapper::GetSnapLen() [member function]
+    cls.add_method('GetSnapLen', 
+                   'uint32_t', 
+                   [])
+    ## pcap-file-wrapper.h (module 'network'): uint32_t ns3::PcapFileWrapper::GetDataLinkType() [member function]
+    cls.add_method('GetDataLinkType', 
+                   'uint32_t', 
+                   [])
+    return
+
+def register_Ns3SimpleRefCount__Ns3AttributeAccessor_Ns3Empty_Ns3DefaultDeleter__lt__ns3AttributeAccessor__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::AttributeAccessor, ns3::empty, ns3::DefaultDeleter<ns3::AttributeAccessor> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::AttributeAccessor, ns3::empty, ns3::DefaultDeleter<ns3::AttributeAccessor> >::SimpleRefCount(ns3::SimpleRefCount<ns3::AttributeAccessor, ns3::empty, ns3::DefaultDeleter<ns3::AttributeAccessor> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::AttributeAccessor, ns3::empty, ns3::DefaultDeleter< ns3::AttributeAccessor > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::AttributeAccessor, ns3::empty, ns3::DefaultDeleter<ns3::AttributeAccessor> >::Cleanup() [member function]
+    cls.add_method('Cleanup', 
+                   'void', 
+                   [], 
+                   is_static=True)
+    return
+
+def register_Ns3SimpleRefCount__Ns3AttributeChecker_Ns3Empty_Ns3DefaultDeleter__lt__ns3AttributeChecker__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::AttributeChecker, ns3::empty, ns3::DefaultDeleter<ns3::AttributeChecker> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::AttributeChecker, ns3::empty, ns3::DefaultDeleter<ns3::AttributeChecker> >::SimpleRefCount(ns3::SimpleRefCount<ns3::AttributeChecker, ns3::empty, ns3::DefaultDeleter<ns3::AttributeChecker> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::AttributeChecker, ns3::empty, ns3::DefaultDeleter< ns3::AttributeChecker > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::AttributeChecker, ns3::empty, ns3::DefaultDeleter<ns3::AttributeChecker> >::Cleanup() [member function]
+    cls.add_method('Cleanup', 
+                   'void', 
+                   [], 
+                   is_static=True)
+    return
+
+def register_Ns3SimpleRefCount__Ns3AttributeValue_Ns3Empty_Ns3DefaultDeleter__lt__ns3AttributeValue__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::AttributeValue, ns3::empty, ns3::DefaultDeleter<ns3::AttributeValue> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::AttributeValue, ns3::empty, ns3::DefaultDeleter<ns3::AttributeValue> >::SimpleRefCount(ns3::SimpleRefCount<ns3::AttributeValue, ns3::empty, ns3::DefaultDeleter<ns3::AttributeValue> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::AttributeValue, ns3::empty, ns3::DefaultDeleter< ns3::AttributeValue > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::AttributeValue, ns3::empty, ns3::DefaultDeleter<ns3::AttributeValue> >::Cleanup() [member function]
+    cls.add_method('Cleanup', 
+                   'void', 
+                   [], 
+                   is_static=True)
+    return
+
+def register_Ns3SimpleRefCount__Ns3CallbackImplBase_Ns3Empty_Ns3DefaultDeleter__lt__ns3CallbackImplBase__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::CallbackImplBase, ns3::empty, ns3::DefaultDeleter<ns3::CallbackImplBase> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::CallbackImplBase, ns3::empty, ns3::DefaultDeleter<ns3::CallbackImplBase> >::SimpleRefCount(ns3::SimpleRefCount<ns3::CallbackImplBase, ns3::empty, ns3::DefaultDeleter<ns3::CallbackImplBase> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::CallbackImplBase, ns3::empty, ns3::DefaultDeleter< ns3::CallbackImplBase > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::CallbackImplBase, ns3::empty, ns3::DefaultDeleter<ns3::CallbackImplBase> >::Cleanup() [member function]
+    cls.add_method('Cleanup', 
+                   'void', 
+                   [], 
+                   is_static=True)
+    return
+
+def register_Ns3SimpleRefCount__Ns3EventImpl_Ns3Empty_Ns3DefaultDeleter__lt__ns3EventImpl__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::EventImpl, ns3::empty, ns3::DefaultDeleter<ns3::EventImpl> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::EventImpl, ns3::empty, ns3::DefaultDeleter<ns3::EventImpl> >::SimpleRefCount(ns3::SimpleRefCount<ns3::EventImpl, ns3::empty, ns3::DefaultDeleter<ns3::EventImpl> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::EventImpl, ns3::empty, ns3::DefaultDeleter< ns3::EventImpl > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::EventImpl, ns3::empty, ns3::DefaultDeleter<ns3::EventImpl> >::Cleanup() [member function]
+    cls.add_method('Cleanup', 
+                   'void', 
+                   [], 
+                   is_static=True)
+    return
+
+def register_Ns3SimpleRefCount__Ns3HashImplementation_Ns3Empty_Ns3DefaultDeleter__lt__ns3HashImplementation__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::SimpleRefCount(ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter< ns3::Hash::Implementation > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >::Cleanup() [member function]
+    cls.add_method('Cleanup', 
+                   'void', 
+                   [], 
+                   is_static=True)
+    return
+
+def register_Ns3SimpleRefCount__Ns3LrWpanInterferenceHelper_Ns3Empty_Ns3DefaultDeleter__lt__ns3LrWpanInterferenceHelper__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::LrWpanInterferenceHelper, ns3::empty, ns3::DefaultDeleter<ns3::LrWpanInterferenceHelper> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::LrWpanInterferenceHelper, ns3::empty, ns3::DefaultDeleter<ns3::LrWpanInterferenceHelper> >::SimpleRefCount(ns3::SimpleRefCount<ns3::LrWpanInterferenceHelper, ns3::empty, ns3::DefaultDeleter<ns3::LrWpanInterferenceHelper> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::LrWpanInterferenceHelper, ns3::empty, ns3::DefaultDeleter< ns3::LrWpanInterferenceHelper > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::LrWpanInterferenceHelper, ns3::empty, ns3::DefaultDeleter<ns3::LrWpanInterferenceHelper> >::Cleanup() [member function]
+    cls.add_method('Cleanup', 
+                   'void', 
+                   [], 
+                   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__Ns3OutputStreamWrapper_Ns3Empty_Ns3DefaultDeleter__lt__ns3OutputStreamWrapper__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::OutputStreamWrapper, ns3::empty, ns3::DefaultDeleter<ns3::OutputStreamWrapper> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::OutputStreamWrapper, ns3::empty, ns3::DefaultDeleter<ns3::OutputStreamWrapper> >::SimpleRefCount(ns3::SimpleRefCount<ns3::OutputStreamWrapper, ns3::empty, ns3::DefaultDeleter<ns3::OutputStreamWrapper> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::OutputStreamWrapper, ns3::empty, ns3::DefaultDeleter< ns3::OutputStreamWrapper > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::OutputStreamWrapper, ns3::empty, ns3::DefaultDeleter<ns3::OutputStreamWrapper> >::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__Ns3SpectrumSignalParameters_Ns3Empty_Ns3DefaultDeleter__lt__ns3SpectrumSignalParameters__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::SpectrumSignalParameters, ns3::empty, ns3::DefaultDeleter<ns3::SpectrumSignalParameters> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::SpectrumSignalParameters, ns3::empty, ns3::DefaultDeleter<ns3::SpectrumSignalParameters> >::SimpleRefCount(ns3::SimpleRefCount<ns3::SpectrumSignalParameters, ns3::empty, ns3::DefaultDeleter<ns3::SpectrumSignalParameters> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::SpectrumSignalParameters, ns3::empty, ns3::DefaultDeleter< ns3::SpectrumSignalParameters > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::SpectrumSignalParameters, ns3::empty, ns3::DefaultDeleter<ns3::SpectrumSignalParameters> >::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([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::TraceSourceAccessor, ns3::empty, ns3::DefaultDeleter<ns3::TraceSourceAccessor> >::SimpleRefCount(ns3::SimpleRefCount<ns3::TraceSourceAccessor, ns3::empty, ns3::DefaultDeleter<ns3::TraceSourceAccessor> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::TraceSourceAccessor, ns3::empty, ns3::DefaultDeleter< ns3::TraceSourceAccessor > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::TraceSourceAccessor, ns3::empty, ns3::DefaultDeleter<ns3::TraceSourceAccessor> >::Cleanup() [member function]
+    cls.add_method('Cleanup', 
+                   'void', 
+                   [], 
+                   is_static=True)
+    return
+
+def register_Ns3SpectrumPhy_methods(root_module, cls):
+    ## spectrum-phy.h (module 'spectrum'): ns3::SpectrumPhy::SpectrumPhy() [constructor]
+    cls.add_constructor([])
+    ## spectrum-phy.h (module 'spectrum'): static ns3::TypeId ns3::SpectrumPhy::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## spectrum-phy.h (module 'spectrum'): void ns3::SpectrumPhy::SetDevice(ns3::Ptr<ns3::NetDevice> d) [member function]
+    cls.add_method('SetDevice', 
+                   '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]
+    cls.add_method('GetDevice', 
+                   'ns3::Ptr< ns3::NetDevice >', 
+                   [], 
+                   is_pure_virtual=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', 
+                   [param('ns3::Ptr< ns3::MobilityModel >', 'm')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## spectrum-phy.h (module 'spectrum'): ns3::Ptr<ns3::MobilityModel> ns3::SpectrumPhy::GetMobility() [member function]
+    cls.add_method('GetMobility', 
+                   'ns3::Ptr< ns3::MobilityModel >', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## spectrum-phy.h (module 'spectrum'): void ns3::SpectrumPhy::SetChannel(ns3::Ptr<ns3::SpectrumChannel> c) [member function]
+    cls.add_method('SetChannel', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::SpectrumChannel >', 'c')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## spectrum-phy.h (module 'spectrum'): ns3::Ptr<ns3::SpectrumModel const> ns3::SpectrumPhy::GetRxSpectrumModel() const [member function]
+    cls.add_method('GetRxSpectrumModel', 
+                   'ns3::Ptr< ns3::SpectrumModel const >', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## spectrum-phy.h (module 'spectrum'): ns3::Ptr<ns3::AntennaModel> ns3::SpectrumPhy::GetRxAntenna() [member function]
+    cls.add_method('GetRxAntenna', 
+                   'ns3::Ptr< ns3::AntennaModel >', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## spectrum-phy.h (module 'spectrum'): void ns3::SpectrumPhy::StartRx(ns3::Ptr<ns3::SpectrumSignalParameters> params) [member function]
+    cls.add_method('StartRx', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::SpectrumSignalParameters >', 'params')], 
+                   is_pure_virtual=True, is_virtual=True)
+    return
+
+def register_Ns3SpectrumSignalParameters_methods(root_module, cls):
+    ## spectrum-signal-parameters.h (module 'spectrum'): ns3::SpectrumSignalParameters::SpectrumSignalParameters() [constructor]
+    cls.add_constructor([])
+    ## spectrum-signal-parameters.h (module 'spectrum'): ns3::SpectrumSignalParameters::SpectrumSignalParameters(ns3::SpectrumSignalParameters const & p) [copy constructor]
+    cls.add_constructor([param('ns3::SpectrumSignalParameters const &', 'p')])
+    ## spectrum-signal-parameters.h (module 'spectrum'): ns3::Ptr<ns3::SpectrumSignalParameters> ns3::SpectrumSignalParameters::Copy() [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::SpectrumSignalParameters >', 
+                   [], 
+                   is_virtual=True)
+    ## spectrum-signal-parameters.h (module 'spectrum'): ns3::SpectrumSignalParameters::duration [variable]
+    cls.add_instance_attribute('duration', 'ns3::Time', is_const=False)
+    ## spectrum-signal-parameters.h (module 'spectrum'): ns3::SpectrumSignalParameters::psd [variable]
+    cls.add_instance_attribute('psd', 'ns3::Ptr< ns3::SpectrumValue >', is_const=False)
+    ## spectrum-signal-parameters.h (module 'spectrum'): ns3::SpectrumSignalParameters::txAntenna [variable]
+    cls.add_instance_attribute('txAntenna', 'ns3::Ptr< ns3::AntennaModel >', is_const=False)
+    ## spectrum-signal-parameters.h (module 'spectrum'): ns3::SpectrumSignalParameters::txPhy [variable]
+    cls.add_instance_attribute('txPhy', 'ns3::Ptr< ns3::SpectrumPhy >', is_const=False)
+    return
+
+def register_Ns3Time_methods(root_module, cls):
+    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 &', 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('==')
+    cls.add_binary_comparison_operator('>=')
+    ## nstime.h (module 'core'): ns3::Time::Time() [constructor]
+    cls.add_constructor([])
+    ## nstime.h (module 'core'): ns3::Time::Time(ns3::Time const & o) [copy constructor]
+    cls.add_constructor([param('ns3::Time const &', 'o')])
+    ## nstime.h (module 'core'): ns3::Time::Time(double v) [constructor]
+    cls.add_constructor([param('double', 'v')])
+    ## nstime.h (module 'core'): ns3::Time::Time(int v) [constructor]
+    cls.add_constructor([param('int', 'v')])
+    ## nstime.h (module 'core'): ns3::Time::Time(long int v) [constructor]
+    cls.add_constructor([param('long int', 'v')])
+    ## nstime.h (module 'core'): ns3::Time::Time(long long int v) [constructor]
+    cls.add_constructor([param('long long int', 'v')])
+    ## nstime.h (module 'core'): ns3::Time::Time(unsigned int v) [constructor]
+    cls.add_constructor([param('unsigned int', 'v')])
+    ## nstime.h (module 'core'): ns3::Time::Time(long unsigned int v) [constructor]
+    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(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]
+    cls.add_method('From', 
+                   'ns3::Time', 
+                   [param('ns3::int64x64_t const &', 'from'), param('ns3::Time::Unit', 'timeUnit')], 
+                   is_static=True)
+    ## 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 &', 'value')], 
+                   is_static=True)
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::FromDouble(double value, ns3::Time::Unit timeUnit) [member function]
+    cls.add_method('FromDouble', 
+                   'ns3::Time', 
+                   [param('double', 'value'), param('ns3::Time::Unit', 'timeUnit')], 
+                   is_static=True)
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::FromInteger(uint64_t value, ns3::Time::Unit timeUnit) [member function]
+    cls.add_method('FromInteger', 
+                   'ns3::Time', 
+                   [param('uint64_t', 'value'), param('ns3::Time::Unit', 'timeUnit')], 
+                   is_static=True)
+    ## nstime.h (module 'core'): double ns3::Time::GetDays() const [member function]
+    cls.add_method('GetDays', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## nstime.h (module 'core'): double ns3::Time::GetDouble() const [member function]
+    cls.add_method('GetDouble', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## nstime.h (module 'core'): int64_t ns3::Time::GetFemtoSeconds() const [member function]
+    cls.add_method('GetFemtoSeconds', 
+                   'int64_t', 
+                   [], 
+                   is_const=True)
+    ## nstime.h (module 'core'): double ns3::Time::GetHours() const [member function]
+    cls.add_method('GetHours', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## nstime.h (module 'core'): int64_t ns3::Time::GetInteger() const [member function]
+    cls.add_method('GetInteger', 
+                   'int64_t', 
+                   [], 
+                   is_const=True)
+    ## nstime.h (module 'core'): int64_t ns3::Time::GetMicroSeconds() const [member function]
+    cls.add_method('GetMicroSeconds', 
+                   'int64_t', 
+                   [], 
+                   is_const=True)
+    ## nstime.h (module 'core'): int64_t ns3::Time::GetMilliSeconds() const [member function]
+    cls.add_method('GetMilliSeconds', 
+                   'int64_t', 
+                   [], 
+                   is_const=True)
+    ## nstime.h (module 'core'): double ns3::Time::GetMinutes() const [member function]
+    cls.add_method('GetMinutes', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## nstime.h (module 'core'): int64_t ns3::Time::GetNanoSeconds() const [member function]
+    cls.add_method('GetNanoSeconds', 
+                   'int64_t', 
+                   [], 
+                   is_const=True)
+    ## nstime.h (module 'core'): int64_t ns3::Time::GetPicoSeconds() const [member function]
+    cls.add_method('GetPicoSeconds', 
+                   'int64_t', 
+                   [], 
+                   is_const=True)
+    ## nstime.h (module 'core'): static ns3::Time::Unit ns3::Time::GetResolution() [member function]
+    cls.add_method('GetResolution', 
+                   'ns3::Time::Unit', 
+                   [], 
+                   is_static=True)
+    ## nstime.h (module 'core'): double ns3::Time::GetSeconds() const [member function]
+    cls.add_method('GetSeconds', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## nstime.h (module 'core'): int64_t ns3::Time::GetTimeStep() const [member function]
+    cls.add_method('GetTimeStep', 
+                   'int64_t', 
+                   [], 
+                   is_const=True)
+    ## nstime.h (module 'core'): double ns3::Time::GetYears() const [member function]
+    cls.add_method('GetYears', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## nstime.h (module 'core'): bool ns3::Time::IsNegative() const [member function]
+    cls.add_method('IsNegative', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## nstime.h (module 'core'): bool ns3::Time::IsPositive() const [member function]
+    cls.add_method('IsPositive', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## nstime.h (module 'core'): bool ns3::Time::IsStrictlyNegative() const [member function]
+    cls.add_method('IsStrictlyNegative', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## nstime.h (module 'core'): bool ns3::Time::IsStrictlyPositive() const [member function]
+    cls.add_method('IsStrictlyPositive', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## nstime.h (module 'core'): bool ns3::Time::IsZero() const [member function]
+    cls.add_method('IsZero', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::Max() [member function]
+    cls.add_method('Max', 
+                   'ns3::Time', 
+                   [], 
+                   is_static=True)
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::Min() [member function]
+    cls.add_method('Min', 
+                   'ns3::Time', 
+                   [], 
+                   is_static=True)
+    ## nstime.h (module 'core'): static void ns3::Time::SetResolution(ns3::Time::Unit resolution) [member function]
+    cls.add_method('SetResolution', 
+                   'void', 
+                   [param('ns3::Time::Unit', 'resolution')], 
+                   is_static=True)
+    ## nstime.h (module 'core'): static bool ns3::Time::StaticInit() [member function]
+    cls.add_method('StaticInit', 
+                   'bool', 
+                   [], 
+                   is_static=True)
+    ## nstime.h (module 'core'): ns3::int64x64_t ns3::Time::To(ns3::Time::Unit timeUnit) const [member function]
+    cls.add_method('To', 
+                   'ns3::int64x64_t', 
+                   [param('ns3::Time::Unit', 'timeUnit')], 
+                   is_const=True)
+    ## nstime.h (module 'core'): double ns3::Time::ToDouble(ns3::Time::Unit timeUnit) const [member function]
+    cls.add_method('ToDouble', 
+                   'double', 
+                   [param('ns3::Time::Unit', 'timeUnit')], 
+                   is_const=True)
+    ## nstime.h (module 'core'): int64_t ns3::Time::ToInteger(ns3::Time::Unit timeUnit) const [member function]
+    cls.add_method('ToInteger', 
+                   'int64_t', 
+                   [param('ns3::Time::Unit', 'timeUnit')], 
+                   is_const=True)
+    return
+
+def register_Ns3TraceSourceAccessor_methods(root_module, cls):
+    ## trace-source-accessor.h (module 'core'): ns3::TraceSourceAccessor::TraceSourceAccessor(ns3::TraceSourceAccessor const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::TraceSourceAccessor const &', 'arg0')])
+    ## trace-source-accessor.h (module 'core'): ns3::TraceSourceAccessor::TraceSourceAccessor() [constructor]
+    cls.add_constructor([])
+    ## trace-source-accessor.h (module 'core'): bool ns3::TraceSourceAccessor::Connect(ns3::ObjectBase * obj, std::string context, ns3::CallbackBase const & cb) const [member function]
+    cls.add_method('Connect', 
+                   'bool', 
+                   [param('ns3::ObjectBase *', 'obj', transfer_ownership=False), param('std::string', 'context'), param('ns3::CallbackBase const &', 'cb')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## trace-source-accessor.h (module 'core'): bool ns3::TraceSourceAccessor::ConnectWithoutContext(ns3::ObjectBase * obj, ns3::CallbackBase const & cb) const [member function]
+    cls.add_method('ConnectWithoutContext', 
+                   'bool', 
+                   [param('ns3::ObjectBase *', 'obj', transfer_ownership=False), param('ns3::CallbackBase const &', 'cb')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## trace-source-accessor.h (module 'core'): bool ns3::TraceSourceAccessor::Disconnect(ns3::ObjectBase * obj, std::string context, ns3::CallbackBase const & cb) const [member function]
+    cls.add_method('Disconnect', 
+                   'bool', 
+                   [param('ns3::ObjectBase *', 'obj', transfer_ownership=False), param('std::string', 'context'), param('ns3::CallbackBase const &', 'cb')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## trace-source-accessor.h (module 'core'): bool ns3::TraceSourceAccessor::DisconnectWithoutContext(ns3::ObjectBase * obj, ns3::CallbackBase const & cb) const [member function]
+    cls.add_method('DisconnectWithoutContext', 
+                   'bool', 
+                   [param('ns3::ObjectBase *', 'obj', transfer_ownership=False), param('ns3::CallbackBase const &', 'cb')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    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_Ns3AttributeAccessor_methods(root_module, cls):
+    ## attribute.h (module 'core'): ns3::AttributeAccessor::AttributeAccessor(ns3::AttributeAccessor const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::AttributeAccessor const &', 'arg0')])
+    ## attribute.h (module 'core'): ns3::AttributeAccessor::AttributeAccessor() [constructor]
+    cls.add_constructor([])
+    ## attribute.h (module 'core'): bool ns3::AttributeAccessor::Get(ns3::ObjectBase const * object, ns3::AttributeValue & attribute) const [member function]
+    cls.add_method('Get', 
+                   'bool', 
+                   [param('ns3::ObjectBase const *', 'object'), param('ns3::AttributeValue &', 'attribute')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::AttributeAccessor::HasGetter() const [member function]
+    cls.add_method('HasGetter', 
+                   'bool', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::AttributeAccessor::HasSetter() const [member function]
+    cls.add_method('HasSetter', 
+                   'bool', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::AttributeAccessor::Set(ns3::ObjectBase * object, ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Set', 
+                   'bool', 
+                   [param('ns3::ObjectBase *', 'object', transfer_ownership=False), param('ns3::AttributeValue const &', 'value')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    return
+
+def register_Ns3AttributeChecker_methods(root_module, cls):
+    ## attribute.h (module 'core'): ns3::AttributeChecker::AttributeChecker(ns3::AttributeChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::AttributeChecker const &', 'arg0')])
+    ## attribute.h (module 'core'): ns3::AttributeChecker::AttributeChecker() [constructor]
+    cls.add_constructor([])
+    ## attribute.h (module 'core'): bool ns3::AttributeChecker::Check(ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Check', 
+                   'bool', 
+                   [param('ns3::AttributeValue const &', 'value')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::AttributeChecker::Copy(ns3::AttributeValue const & source, ns3::AttributeValue & destination) const [member function]
+    cls.add_method('Copy', 
+                   'bool', 
+                   [param('ns3::AttributeValue const &', 'source'), param('ns3::AttributeValue &', 'destination')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::AttributeChecker::Create() const [member function]
+    cls.add_method('Create', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::AttributeChecker::CreateValidValue(ns3::AttributeValue const & value) const [member function]
+    cls.add_method('CreateValidValue', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True)
+    ## attribute.h (module 'core'): std::string ns3::AttributeChecker::GetUnderlyingTypeInformation() const [member function]
+    cls.add_method('GetUnderlyingTypeInformation', 
+                   'std::string', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): std::string ns3::AttributeChecker::GetValueTypeName() const [member function]
+    cls.add_method('GetValueTypeName', 
+                   'std::string', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::AttributeChecker::HasUnderlyingTypeInformation() const [member function]
+    cls.add_method('HasUnderlyingTypeInformation', 
+                   'bool', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    return
+
+def register_Ns3AttributeValue_methods(root_module, cls):
+    ## attribute.h (module 'core'): ns3::AttributeValue::AttributeValue(ns3::AttributeValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::AttributeValue const &', 'arg0')])
+    ## attribute.h (module 'core'): ns3::AttributeValue::AttributeValue() [constructor]
+    cls.add_constructor([])
+    ## attribute.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::AttributeValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::AttributeValue::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_pure_virtual=True, is_virtual=True)
+    ## attribute.h (module 'core'): std::string ns3::AttributeValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
+    cls.add_method('SerializeToString', 
+                   'std::string', 
+                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    return
+
+def register_Ns3CallbackChecker_methods(root_module, cls):
+    ## callback.h (module 'core'): ns3::CallbackChecker::CallbackChecker() [constructor]
+    cls.add_constructor([])
+    ## callback.h (module 'core'): ns3::CallbackChecker::CallbackChecker(ns3::CallbackChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::CallbackChecker const &', 'arg0')])
+    return
+
+def register_Ns3CallbackImplBase_methods(root_module, cls):
+    ## callback.h (module 'core'): ns3::CallbackImplBase::CallbackImplBase() [constructor]
+    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'): 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)
+    return
+
+def register_Ns3CallbackValue_methods(root_module, cls):
+    ## callback.h (module 'core'): ns3::CallbackValue::CallbackValue(ns3::CallbackValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::CallbackValue const &', 'arg0')])
+    ## callback.h (module 'core'): ns3::CallbackValue::CallbackValue() [constructor]
+    cls.add_constructor([])
+    ## callback.h (module 'core'): ns3::CallbackValue::CallbackValue(ns3::CallbackBase const & base) [constructor]
+    cls.add_constructor([param('ns3::CallbackBase const &', 'base')])
+    ## callback.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::CallbackValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## callback.h (module 'core'): bool ns3::CallbackValue::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)
+    ## callback.h (module 'core'): std::string ns3::CallbackValue::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)
+    ## callback.h (module 'core'): void ns3::CallbackValue::Set(ns3::CallbackBase base) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('ns3::CallbackBase', 'base')])
+    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')])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeValue::EmptyAttributeValue() [constructor]
+    cls.add_constructor([])
+    ## attribute.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::EmptyAttributeValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, visibility='private', is_virtual=True)
+    ## attribute.h (module 'core'): bool ns3::EmptyAttributeValue::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')], 
+                   visibility='private', is_virtual=True)
+    ## attribute.h (module 'core'): std::string ns3::EmptyAttributeValue::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, visibility='private', is_virtual=True)
+    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')])
+    ## event-impl.h (module 'core'): ns3::EventImpl::EventImpl() [constructor]
+    cls.add_constructor([])
+    ## event-impl.h (module 'core'): void ns3::EventImpl::Cancel() [member function]
+    cls.add_method('Cancel', 
+                   'void', 
+                   [])
+    ## event-impl.h (module 'core'): void ns3::EventImpl::Invoke() [member function]
+    cls.add_method('Invoke', 
+                   'void', 
+                   [])
+    ## event-impl.h (module 'core'): bool ns3::EventImpl::IsCancelled() [member function]
+    cls.add_method('IsCancelled', 
+                   'bool', 
+                   [])
+    ## event-impl.h (module 'core'): void ns3::EventImpl::Notify() [member function]
+    cls.add_method('Notify', 
+                   'void', 
+                   [], 
+                   is_pure_virtual=True, visibility='protected', 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_Ns3LrWpanCsmaCa_methods(root_module, cls):
+    ## lr-wpan-csmaca.h (module 'lr-wpan'): static ns3::TypeId ns3::LrWpanCsmaCa::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## lr-wpan-csmaca.h (module 'lr-wpan'): ns3::LrWpanCsmaCa::LrWpanCsmaCa() [constructor]
+    cls.add_constructor([])
+    ## lr-wpan-csmaca.h (module 'lr-wpan'): void ns3::LrWpanCsmaCa::SetMac(ns3::Ptr<ns3::LrWpanMac> mac) [member function]
+    cls.add_method('SetMac', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::LrWpanMac >', 'mac')])
+    ## lr-wpan-csmaca.h (module 'lr-wpan'): ns3::Ptr<ns3::LrWpanMac> ns3::LrWpanCsmaCa::GetMac() const [member function]
+    cls.add_method('GetMac', 
+                   'ns3::Ptr< ns3::LrWpanMac >', 
+                   [], 
+                   is_const=True)
+    ## lr-wpan-csmaca.h (module 'lr-wpan'): void ns3::LrWpanCsmaCa::SetSlottedCsmaCa() [member function]
+    cls.add_method('SetSlottedCsmaCa', 
+                   'void', 
+                   [])
+    ## lr-wpan-csmaca.h (module 'lr-wpan'): void ns3::LrWpanCsmaCa::SetUnSlottedCsmaCa() [member function]
+    cls.add_method('SetUnSlottedCsmaCa', 
+                   'void', 
+                   [])
+    ## lr-wpan-csmaca.h (module 'lr-wpan'): bool ns3::LrWpanCsmaCa::IsSlottedCsmaCa() const [member function]
+    cls.add_method('IsSlottedCsmaCa', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## lr-wpan-csmaca.h (module 'lr-wpan'): bool ns3::LrWpanCsmaCa::IsUnSlottedCsmaCa() const [member function]
+    cls.add_method('IsUnSlottedCsmaCa', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## lr-wpan-csmaca.h (module 'lr-wpan'): void ns3::LrWpanCsmaCa::SetMacMinBE(uint8_t macMinBE) [member function]
+    cls.add_method('SetMacMinBE', 
+                   'void', 
+                   [param('uint8_t', 'macMinBE')])
+    ## lr-wpan-csmaca.h (module 'lr-wpan'): uint8_t ns3::LrWpanCsmaCa::GetMacMinBE() const [member function]
+    cls.add_method('GetMacMinBE', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## lr-wpan-csmaca.h (module 'lr-wpan'): void ns3::LrWpanCsmaCa::SetMacMaxBE(uint8_t macMaxBE) [member function]
+    cls.add_method('SetMacMaxBE', 
+                   'void', 
+                   [param('uint8_t', 'macMaxBE')])
+    ## lr-wpan-csmaca.h (module 'lr-wpan'): uint8_t ns3::LrWpanCsmaCa::GetMacMaxBE() const [member function]
+    cls.add_method('GetMacMaxBE', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## lr-wpan-csmaca.h (module 'lr-wpan'): void ns3::LrWpanCsmaCa::SetMacMaxCSMABackoffs(uint8_t macMaxCSMABackoffs) [member function]
+    cls.add_method('SetMacMaxCSMABackoffs', 
+                   'void', 
+                   [param('uint8_t', 'macMaxCSMABackoffs')])
+    ## lr-wpan-csmaca.h (module 'lr-wpan'): uint8_t ns3::LrWpanCsmaCa::GetMacMaxCSMABackoffs() const [member function]
+    cls.add_method('GetMacMaxCSMABackoffs', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## lr-wpan-csmaca.h (module 'lr-wpan'): void ns3::LrWpanCsmaCa::SetUnitBackoffPeriod(uint64_t unitBackoffPeriod) [member function]
+    cls.add_method('SetUnitBackoffPeriod', 
+                   'void', 
+                   [param('uint64_t', 'unitBackoffPeriod')])
+    ## lr-wpan-csmaca.h (module 'lr-wpan'): uint64_t ns3::LrWpanCsmaCa::GetUnitBackoffPeriod() const [member function]
+    cls.add_method('GetUnitBackoffPeriod', 
+                   'uint64_t', 
+                   [], 
+                   is_const=True)
+    ## lr-wpan-csmaca.h (module 'lr-wpan'): ns3::Time ns3::LrWpanCsmaCa::GetTimeToNextSlot() const [member function]
+    cls.add_method('GetTimeToNextSlot', 
+                   'ns3::Time', 
+                   [], 
+                   is_const=True)
+    ## lr-wpan-csmaca.h (module 'lr-wpan'): void ns3::LrWpanCsmaCa::Start() [member function]
+    cls.add_method('Start', 
+                   'void', 
+                   [])
+    ## lr-wpan-csmaca.h (module 'lr-wpan'): void ns3::LrWpanCsmaCa::Cancel() [member function]
+    cls.add_method('Cancel', 
+                   'void', 
+                   [])
+    ## lr-wpan-csmaca.h (module 'lr-wpan'): void ns3::LrWpanCsmaCa::RandomBackoffDelay() [member function]
+    cls.add_method('RandomBackoffDelay', 
+                   'void', 
+                   [])
+    ## lr-wpan-csmaca.h (module 'lr-wpan'): void ns3::LrWpanCsmaCa::CanProceed() [member function]
+    cls.add_method('CanProceed', 
+                   'void', 
+                   [])
+    ## lr-wpan-csmaca.h (module 'lr-wpan'): void ns3::LrWpanCsmaCa::RequestCCA() [member function]
+    cls.add_method('RequestCCA', 
+                   'void', 
+                   [])
+    ## lr-wpan-csmaca.h (module 'lr-wpan'): void ns3::LrWpanCsmaCa::PlmeCcaConfirm(ns3::LrWpanPhyEnumeration status) [member function]
+    cls.add_method('PlmeCcaConfirm', 
+                   'void', 
+                   [param('ns3::LrWpanPhyEnumeration', 'status')])
+    ## lr-wpan-csmaca.h (module 'lr-wpan'): void ns3::LrWpanCsmaCa::SetLrWpanMacStateCallback(ns3::LrWpanMacStateCallback macState) [member function]
+    cls.add_method('SetLrWpanMacStateCallback', 
+                   'void', 
+                   [param('ns3::LrWpanMacStateCallback', 'macState')])
+    ## lr-wpan-csmaca.h (module 'lr-wpan'): int64_t ns3::LrWpanCsmaCa::AssignStreams(int64_t stream) [member function]
+    cls.add_method('AssignStreams', 
+                   'int64_t', 
+                   [param('int64_t', 'stream')])
+    ## lr-wpan-csmaca.h (module 'lr-wpan'): uint8_t ns3::LrWpanCsmaCa::GetNB() [member function]
+    cls.add_method('GetNB', 
+                   'uint8_t', 
+                   [])
+    ## lr-wpan-csmaca.h (module 'lr-wpan'): void ns3::LrWpanCsmaCa::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   visibility='private', is_virtual=True)
+    return
+
+def register_Ns3LrWpanErrorModel_methods(root_module, cls):
+    ## lr-wpan-error-model.h (module 'lr-wpan'): ns3::LrWpanErrorModel::LrWpanErrorModel(ns3::LrWpanErrorModel const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::LrWpanErrorModel const &', 'arg0')])
+    ## lr-wpan-error-model.h (module 'lr-wpan'): ns3::LrWpanErrorModel::LrWpanErrorModel() [constructor]
+    cls.add_constructor([])
+    ## lr-wpan-error-model.h (module 'lr-wpan'): double ns3::LrWpanErrorModel::GetChunkSuccessRate(double snr, uint32_t nbits) const [member function]
+    cls.add_method('GetChunkSuccessRate', 
+                   'double', 
+                   [param('double', 'snr'), param('uint32_t', 'nbits')], 
+                   is_const=True)
+    ## lr-wpan-error-model.h (module 'lr-wpan'): static ns3::TypeId ns3::LrWpanErrorModel::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    return
+
+def register_Ns3LrWpanInterferenceHelper_methods(root_module, cls):
+    ## lr-wpan-interference-helper.h (module 'lr-wpan'): ns3::LrWpanInterferenceHelper::LrWpanInterferenceHelper(ns3::Ptr<ns3::SpectrumModel const> spectrumModel) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::SpectrumModel const >', 'spectrumModel')])
+    ## lr-wpan-interference-helper.h (module 'lr-wpan'): bool ns3::LrWpanInterferenceHelper::AddSignal(ns3::Ptr<ns3::SpectrumValue const> signal) [member function]
+    cls.add_method('AddSignal', 
+                   'bool', 
+                   [param('ns3::Ptr< ns3::SpectrumValue const >', 'signal')])
+    ## lr-wpan-interference-helper.h (module 'lr-wpan'): bool ns3::LrWpanInterferenceHelper::RemoveSignal(ns3::Ptr<ns3::SpectrumValue const> signal) [member function]
+    cls.add_method('RemoveSignal', 
+                   'bool', 
+                   [param('ns3::Ptr< ns3::SpectrumValue const >', 'signal')])
+    ## lr-wpan-interference-helper.h (module 'lr-wpan'): void ns3::LrWpanInterferenceHelper::ClearSignals() [member function]
+    cls.add_method('ClearSignals', 
+                   'void', 
+                   [])
+    ## lr-wpan-interference-helper.h (module 'lr-wpan'): ns3::Ptr<ns3::SpectrumValue> ns3::LrWpanInterferenceHelper::GetSignalPsd() const [member function]
+    cls.add_method('GetSignalPsd', 
+                   'ns3::Ptr< ns3::SpectrumValue >', 
+                   [], 
+                   is_const=True)
+    ## lr-wpan-interference-helper.h (module 'lr-wpan'): ns3::Ptr<ns3::SpectrumModel const> ns3::LrWpanInterferenceHelper::GetSpectrumModel() const [member function]
+    cls.add_method('GetSpectrumModel', 
+                   'ns3::Ptr< ns3::SpectrumModel const >', 
+                   [], 
+                   is_const=True)
+    return
+
+def register_Ns3LrWpanMac_methods(root_module, cls):
+    ## lr-wpan-mac.h (module 'lr-wpan'): ns3::LrWpanMac::LrWpanMac(ns3::LrWpanMac const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::LrWpanMac const &', 'arg0')])
+    ## lr-wpan-mac.h (module 'lr-wpan'): ns3::LrWpanMac::LrWpanMac() [constructor]
+    cls.add_constructor([])
+    ## lr-wpan-mac.h (module 'lr-wpan'): ns3::LrWpanAssociationStatus ns3::LrWpanMac::GetAssociationStatus() const [member function]
+    cls.add_method('GetAssociationStatus', 
+                   'ns3::LrWpanAssociationStatus', 
+                   [], 
+                   is_const=True)
+    ## lr-wpan-mac.h (module 'lr-wpan'): ns3::Mac64Address ns3::LrWpanMac::GetExtendedAddress() const [member function]
+    cls.add_method('GetExtendedAddress', 
+                   'ns3::Mac64Address', 
+                   [], 
+                   is_const=True)
+    ## lr-wpan-mac.h (module 'lr-wpan'): uint64_t ns3::LrWpanMac::GetMacAckWaitDuration() const [member function]
+    cls.add_method('GetMacAckWaitDuration', 
+                   'uint64_t', 
+                   [], 
+                   is_const=True)
+    ## lr-wpan-mac.h (module 'lr-wpan'): uint8_t ns3::LrWpanMac::GetMacMaxFrameRetries() const [member function]
+    cls.add_method('GetMacMaxFrameRetries', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## lr-wpan-mac.h (module 'lr-wpan'): uint16_t ns3::LrWpanMac::GetPanId() const [member function]
+    cls.add_method('GetPanId', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## lr-wpan-mac.h (module 'lr-wpan'): ns3::Ptr<ns3::LrWpanPhy> ns3::LrWpanMac::GetPhy() [member function]
+    cls.add_method('GetPhy', 
+                   'ns3::Ptr< ns3::LrWpanPhy >', 
+                   [])
+    ## lr-wpan-mac.h (module 'lr-wpan'): bool ns3::LrWpanMac::GetRxOnWhenIdle() [member function]
+    cls.add_method('GetRxOnWhenIdle', 
+                   'bool', 
+                   [])
+    ## lr-wpan-mac.h (module 'lr-wpan'): ns3::Mac16Address ns3::LrWpanMac::GetShortAddress() const [member function]
+    cls.add_method('GetShortAddress', 
+                   'ns3::Mac16Address', 
+                   [], 
+                   is_const=True)
+    ## lr-wpan-mac.h (module 'lr-wpan'): static ns3::TypeId ns3::LrWpanMac::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## lr-wpan-mac.h (module 'lr-wpan'): void ns3::LrWpanMac::McpsDataRequest(ns3::McpsDataRequestParams params, ns3::Ptr<ns3::Packet> p) [member function]
+    cls.add_method('McpsDataRequest', 
+                   'void', 
+                   [param('ns3::McpsDataRequestParams', 'params'), param('ns3::Ptr< ns3::Packet >', 'p')])
+    ## lr-wpan-mac.h (module 'lr-wpan'): void ns3::LrWpanMac::PdDataConfirm(ns3::LrWpanPhyEnumeration status) [member function]
+    cls.add_method('PdDataConfirm', 
+                   'void', 
+                   [param('ns3::LrWpanPhyEnumeration', 'status')])
+    ## lr-wpan-mac.h (module 'lr-wpan'): void ns3::LrWpanMac::PdDataIndication(uint32_t psduLength, ns3::Ptr<ns3::Packet> p, uint8_t lqi) [member function]
+    cls.add_method('PdDataIndication', 
+                   'void', 
+                   [param('uint32_t', 'psduLength'), param('ns3::Ptr< ns3::Packet >', 'p'), param('uint8_t', 'lqi')])
+    ## lr-wpan-mac.h (module 'lr-wpan'): void ns3::LrWpanMac::PlmeCcaConfirm(ns3::LrWpanPhyEnumeration status) [member function]
+    cls.add_method('PlmeCcaConfirm', 
+                   'void', 
+                   [param('ns3::LrWpanPhyEnumeration', 'status')])
+    ## lr-wpan-mac.h (module 'lr-wpan'): void ns3::LrWpanMac::PlmeEdConfirm(ns3::LrWpanPhyEnumeration status, uint8_t energyLevel) [member function]
+    cls.add_method('PlmeEdConfirm', 
+                   'void', 
+                   [param('ns3::LrWpanPhyEnumeration', 'status'), param('uint8_t', 'energyLevel')])
+    ## lr-wpan-mac.h (module 'lr-wpan'): void ns3::LrWpanMac::PlmeGetAttributeConfirm(ns3::LrWpanPhyEnumeration status, ns3::LrWpanPibAttributeIdentifier id, ns3::LrWpanPhyPibAttributes * attribute) [member function]
+    cls.add_method('PlmeGetAttributeConfirm', 
+                   'void', 
+                   [param('ns3::LrWpanPhyEnumeration', 'status'), param('ns3::LrWpanPibAttributeIdentifier', 'id'), param('ns3::LrWpanPhyPibAttributes *', 'attribute')])
+    ## lr-wpan-mac.h (module 'lr-wpan'): void ns3::LrWpanMac::PlmeSetAttributeConfirm(ns3::LrWpanPhyEnumeration status, ns3::LrWpanPibAttributeIdentifier id) [member function]
+    cls.add_method('PlmeSetAttributeConfirm', 
+                   'void', 
+                   [param('ns3::LrWpanPhyEnumeration', 'status'), param('ns3::LrWpanPibAttributeIdentifier', 'id')])
+    ## lr-wpan-mac.h (module 'lr-wpan'): void ns3::LrWpanMac::PlmeSetTRXStateConfirm(ns3::LrWpanPhyEnumeration status) [member function]
+    cls.add_method('PlmeSetTRXStateConfirm', 
+                   'void', 
+                   [param('ns3::LrWpanPhyEnumeration', 'status')])
+    ## lr-wpan-mac.h (module 'lr-wpan'): void ns3::LrWpanMac::SetAssociationStatus(ns3::LrWpanAssociationStatus status) [member function]
+    cls.add_method('SetAssociationStatus', 
+                   'void', 
+                   [param('ns3::LrWpanAssociationStatus', 'status')])
+    ## lr-wpan-mac.h (module 'lr-wpan'): void ns3::LrWpanMac::SetCsmaCa(ns3::Ptr<ns3::LrWpanCsmaCa> csmaCa) [member function]
+    cls.add_method('SetCsmaCa', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::LrWpanCsmaCa >', 'csmaCa')])
+    ## lr-wpan-mac.h (module 'lr-wpan'): void ns3::LrWpanMac::SetExtendedAddress(ns3::Mac64Address address) [member function]
+    cls.add_method('SetExtendedAddress', 
+                   'void', 
+                   [param('ns3::Mac64Address', 'address')])
+    ## lr-wpan-mac.h (module 'lr-wpan'): void ns3::LrWpanMac::SetLrWpanMacState(ns3::LrWpanMacState macState) [member function]
+    cls.add_method('SetLrWpanMacState', 
+                   'void', 
+                   [param('ns3::LrWpanMacState', 'macState')])
+    ## lr-wpan-mac.h (module 'lr-wpan'): void ns3::LrWpanMac::SetMacMaxFrameRetries(uint8_t retries) [member function]
+    cls.add_method('SetMacMaxFrameRetries', 
+                   'void', 
+                   [param('uint8_t', 'retries')])
+    ## lr-wpan-mac.h (module 'lr-wpan'): void ns3::LrWpanMac::SetMcpsDataConfirmCallback(ns3::McpsDataConfirmCallback c) [member function]
+    cls.add_method('SetMcpsDataConfirmCallback', 
+                   'void', 
+                   [param('ns3::McpsDataConfirmCallback', 'c')])
+    ## lr-wpan-mac.h (module 'lr-wpan'): void ns3::LrWpanMac::SetMcpsDataIndicationCallback(ns3::McpsDataIndicationCallback c) [member function]
+    cls.add_method('SetMcpsDataIndicationCallback', 
+                   'void', 
+                   [param('ns3::McpsDataIndicationCallback', 'c')])
+    ## lr-wpan-mac.h (module 'lr-wpan'): void ns3::LrWpanMac::SetPanId(uint16_t panId) [member function]
+    cls.add_method('SetPanId', 
+                   'void', 
+                   [param('uint16_t', 'panId')])
+    ## lr-wpan-mac.h (module 'lr-wpan'): void ns3::LrWpanMac::SetPhy(ns3::Ptr<ns3::LrWpanPhy> phy) [member function]
+    cls.add_method('SetPhy', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::LrWpanPhy >', 'phy')])
+    ## lr-wpan-mac.h (module 'lr-wpan'): void ns3::LrWpanMac::SetRxOnWhenIdle(bool rxOnWhenIdle) [member function]
+    cls.add_method('SetRxOnWhenIdle', 
+                   'void', 
+                   [param('bool', 'rxOnWhenIdle')])
+    ## lr-wpan-mac.h (module 'lr-wpan'): void ns3::LrWpanMac::SetShortAddress(ns3::Mac16Address address) [member function]
+    cls.add_method('SetShortAddress', 
+                   'void', 
+                   [param('ns3::Mac16Address', 'address')])
+    ## lr-wpan-mac.h (module 'lr-wpan'): ns3::LrWpanMac::aMinMPDUOverhead [variable]
+    cls.add_static_attribute('aMinMPDUOverhead', 'uint32_t const', is_const=True)
+    ## lr-wpan-mac.h (module 'lr-wpan'): ns3::LrWpanMac::m_aBaseSlotDuration [variable]
+    cls.add_instance_attribute('m_aBaseSlotDuration', 'uint64_t', is_const=False)
+    ## lr-wpan-mac.h (module 'lr-wpan'): ns3::LrWpanMac::m_aBaseSuperframeDuration [variable]
+    cls.add_instance_attribute('m_aBaseSuperframeDuration', 'uint64_t', is_const=False)
+    ## lr-wpan-mac.h (module 'lr-wpan'): ns3::LrWpanMac::m_aNumSuperframeSlots [variable]
+    cls.add_instance_attribute('m_aNumSuperframeSlots', 'uint64_t', is_const=False)
+    ## lr-wpan-mac.h (module 'lr-wpan'): ns3::LrWpanMac::m_macBeaconOrder [variable]
+    cls.add_instance_attribute('m_macBeaconOrder', 'uint64_t', is_const=False)
+    ## lr-wpan-mac.h (module 'lr-wpan'): ns3::LrWpanMac::m_macBeaconTxTime [variable]
+    cls.add_instance_attribute('m_macBeaconTxTime', 'uint64_t', is_const=False)
+    ## lr-wpan-mac.h (module 'lr-wpan'): ns3::LrWpanMac::m_macDsn [variable]
+    cls.add_instance_attribute('m_macDsn', 'ns3::SequenceNumber8', is_const=False)
+    ## lr-wpan-mac.h (module 'lr-wpan'): ns3::LrWpanMac::m_macMaxFrameRetries [variable]
+    cls.add_instance_attribute('m_macMaxFrameRetries', 'uint8_t', is_const=False)
+    ## lr-wpan-mac.h (module 'lr-wpan'): ns3::LrWpanMac::m_macPanId [variable]
+    cls.add_instance_attribute('m_macPanId', 'uint16_t', is_const=False)
+    ## lr-wpan-mac.h (module 'lr-wpan'): ns3::LrWpanMac::m_macPromiscuousMode [variable]
+    cls.add_instance_attribute('m_macPromiscuousMode', 'bool', is_const=False)
+    ## lr-wpan-mac.h (module 'lr-wpan'): ns3::LrWpanMac::m_macRxOnWhenIdle [variable]
+    cls.add_instance_attribute('m_macRxOnWhenIdle', 'bool', is_const=False)
+    ## lr-wpan-mac.h (module 'lr-wpan'): ns3::LrWpanMac::m_macSuperframeOrder [variable]
+    cls.add_instance_attribute('m_macSuperframeOrder', 'uint64_t', is_const=False)
+    ## lr-wpan-mac.h (module 'lr-wpan'): ns3::LrWpanMac::m_macSyncSymbolOffset [variable]
+    cls.add_instance_attribute('m_macSyncSymbolOffset', 'uint64_t', is_const=False)
+    ## lr-wpan-mac.h (module 'lr-wpan'): void ns3::LrWpanMac::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    ## lr-wpan-mac.h (module 'lr-wpan'): void ns3::LrWpanMac::DoInitialize() [member function]
+    cls.add_method('DoInitialize', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    return
+
+def register_Ns3LrWpanMacTrailer_methods(root_module, cls):
+    ## lr-wpan-mac-trailer.h (module 'lr-wpan'): ns3::LrWpanMacTrailer::LrWpanMacTrailer(ns3::LrWpanMacTrailer const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::LrWpanMacTrailer const &', 'arg0')])
+    ## lr-wpan-mac-trailer.h (module 'lr-wpan'): ns3::LrWpanMacTrailer::LrWpanMacTrailer() [constructor]
+    cls.add_constructor([])
+    ## lr-wpan-mac-trailer.h (module 'lr-wpan'): bool ns3::LrWpanMacTrailer::CheckFcs(ns3::Ptr<const ns3::Packet> p) [member function]
+    cls.add_method('CheckFcs', 
+                   'bool', 
+                   [param('ns3::Ptr< ns3::Packet const >', 'p')])
+    ## lr-wpan-mac-trailer.h (module 'lr-wpan'): uint32_t ns3::LrWpanMacTrailer::Deserialize(ns3::Buffer::Iterator start) [member function]
+    cls.add_method('Deserialize', 
+                   'uint32_t', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_virtual=True)
+    ## lr-wpan-mac-trailer.h (module 'lr-wpan'): void ns3::LrWpanMacTrailer::EnableFcs(bool enable) [member function]
+    cls.add_method('EnableFcs', 
+                   'void', 
+                   [param('bool', 'enable')])
+    ## lr-wpan-mac-trailer.h (module 'lr-wpan'): uint16_t ns3::LrWpanMacTrailer::GetFcs() const [member function]
+    cls.add_method('GetFcs', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## lr-wpan-mac-trailer.h (module 'lr-wpan'): ns3::TypeId ns3::LrWpanMacTrailer::GetInstanceTypeId() const [member function]
+    cls.add_method('GetInstanceTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## lr-wpan-mac-trailer.h (module 'lr-wpan'): uint32_t ns3::LrWpanMacTrailer::GetSerializedSize() const [member function]
+    cls.add_method('GetSerializedSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## lr-wpan-mac-trailer.h (module 'lr-wpan'): static ns3::TypeId ns3::LrWpanMacTrailer::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## lr-wpan-mac-trailer.h (module 'lr-wpan'): bool ns3::LrWpanMacTrailer::IsFcsEnabled() [member function]
+    cls.add_method('IsFcsEnabled', 
+                   'bool', 
+                   [])
+    ## lr-wpan-mac-trailer.h (module 'lr-wpan'): void ns3::LrWpanMacTrailer::Print(std::ostream & os) const [member function]
+    cls.add_method('Print', 
+                   'void', 
+                   [param('std::ostream &', 'os')], 
+                   is_const=True, is_virtual=True)
+    ## lr-wpan-mac-trailer.h (module 'lr-wpan'): void ns3::LrWpanMacTrailer::Serialize(ns3::Buffer::Iterator start) const [member function]
+    cls.add_method('Serialize', 
+                   'void', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_const=True, is_virtual=True)
+    ## lr-wpan-mac-trailer.h (module 'lr-wpan'): void ns3::LrWpanMacTrailer::SetFcs(ns3::Ptr<const ns3::Packet> p) [member function]
+    cls.add_method('SetFcs', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Packet const >', 'p')])
+    ## lr-wpan-mac-trailer.h (module 'lr-wpan'): ns3::LrWpanMacTrailer::LR_WPAN_MAC_FCS_LENGTH [variable]
+    cls.add_static_attribute('LR_WPAN_MAC_FCS_LENGTH', 'uint16_t const', is_const=True)
+    return
+
+def register_Ns3LrWpanPhy_methods(root_module, cls):
+    ## lr-wpan-phy.h (module 'lr-wpan'): ns3::LrWpanPhy::aMaxPhyPacketSize [variable]
+    cls.add_static_attribute('aMaxPhyPacketSize', 'uint32_t const', is_const=True)
+    ## lr-wpan-phy.h (module 'lr-wpan'): ns3::LrWpanPhy::aTurnaroundTime [variable]
+    cls.add_static_attribute('aTurnaroundTime', 'uint32_t const', is_const=True)
+    ## lr-wpan-phy.h (module 'lr-wpan'): static ns3::TypeId ns3::LrWpanPhy::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## lr-wpan-phy.h (module 'lr-wpan'): ns3::LrWpanPhy::LrWpanPhy() [constructor]
+    cls.add_constructor([])
+    ## lr-wpan-phy.h (module 'lr-wpan'): void ns3::LrWpanPhy::SetMobility(ns3::Ptr<ns3::MobilityModel> m) [member function]
+    cls.add_method('SetMobility', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::MobilityModel >', 'm')], 
+                   is_virtual=True)
+    ## lr-wpan-phy.h (module 'lr-wpan'): ns3::Ptr<ns3::MobilityModel> ns3::LrWpanPhy::GetMobility() [member function]
+    cls.add_method('GetMobility', 
+                   'ns3::Ptr< ns3::MobilityModel >', 
+                   [], 
+                   is_virtual=True)
+    ## lr-wpan-phy.h (module 'lr-wpan'): void ns3::LrWpanPhy::SetChannel(ns3::Ptr<ns3::SpectrumChannel> c) [member function]
+    cls.add_method('SetChannel', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::SpectrumChannel >', 'c')], 
+                   is_virtual=True)
+    ## lr-wpan-phy.h (module 'lr-wpan'): ns3::Ptr<ns3::SpectrumChannel> ns3::LrWpanPhy::GetChannel() [member function]
+    cls.add_method('GetChannel', 
+                   'ns3::Ptr< ns3::SpectrumChannel >', 
+                   [])
+    ## lr-wpan-phy.h (module 'lr-wpan'): void ns3::LrWpanPhy::SetDevice(ns3::Ptr<ns3::NetDevice> d) [member function]
+    cls.add_method('SetDevice', 
+                   '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]
+    cls.add_method('GetDevice', 
+                   'ns3::Ptr< ns3::NetDevice >', 
+                   [], 
+                   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', 
+                   [param('ns3::Ptr< ns3::AntennaModel >', 'a')])
+    ## lr-wpan-phy.h (module 'lr-wpan'): ns3::Ptr<ns3::AntennaModel> ns3::LrWpanPhy::GetRxAntenna() [member function]
+    cls.add_method('GetRxAntenna', 
+                   'ns3::Ptr< ns3::AntennaModel >', 
+                   [], 
+                   is_virtual=True)
+    ## lr-wpan-phy.h (module 'lr-wpan'): ns3::Ptr<ns3::SpectrumModel const> ns3::LrWpanPhy::GetRxSpectrumModel() const [member function]
+    cls.add_method('GetRxSpectrumModel', 
+                   'ns3::Ptr< ns3::SpectrumModel const >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## lr-wpan-phy.h (module 'lr-wpan'): void ns3::LrWpanPhy::SetTxPowerSpectralDensity(ns3::Ptr<ns3::SpectrumValue> txPsd) [member function]
+    cls.add_method('SetTxPowerSpectralDensity', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::SpectrumValue >', 'txPsd')])
+    ## lr-wpan-phy.h (module 'lr-wpan'): void ns3::LrWpanPhy::SetNoisePowerSpectralDensity(ns3::Ptr<ns3::SpectrumValue const> noisePsd) [member function]
+    cls.add_method('SetNoisePowerSpectralDensity', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::SpectrumValue const >', 'noisePsd')])
+    ## lr-wpan-phy.h (module 'lr-wpan'): ns3::Ptr<ns3::SpectrumValue const> ns3::LrWpanPhy::GetNoisePowerSpectralDensity() [member function]
+    cls.add_method('GetNoisePowerSpectralDensity', 
+                   'ns3::Ptr< ns3::SpectrumValue const >', 
+                   [])
+    ## lr-wpan-phy.h (module 'lr-wpan'): void ns3::LrWpanPhy::StartRx(ns3::Ptr<ns3::SpectrumSignalParameters> params) [member function]
+    cls.add_method('StartRx', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::SpectrumSignalParameters >', 'params')], 
+                   is_virtual=True)
+    ## lr-wpan-phy.h (module 'lr-wpan'): void ns3::LrWpanPhy::PdDataRequest(uint32_t const psduLength, ns3::Ptr<ns3::Packet> p) [member function]
+    cls.add_method('PdDataRequest', 
+                   'void', 
+                   [param('uint32_t const', 'psduLength'), param('ns3::Ptr< ns3::Packet >', 'p')])
+    ## lr-wpan-phy.h (module 'lr-wpan'): void ns3::LrWpanPhy::PlmeCcaRequest() [member function]
+    cls.add_method('PlmeCcaRequest', 
+                   'void', 
+                   [])
+    ## lr-wpan-phy.h (module 'lr-wpan'): void ns3::LrWpanPhy::PlmeEdRequest() [member function]
+    cls.add_method('PlmeEdRequest', 
+                   'void', 
+                   [])
+    ## lr-wpan-phy.h (module 'lr-wpan'): void ns3::LrWpanPhy::PlmeGetAttributeRequest(ns3::LrWpanPibAttributeIdentifier id) [member function]
+    cls.add_method('PlmeGetAttributeRequest', 
+                   'void', 
+                   [param('ns3::LrWpanPibAttributeIdentifier', 'id')])
+    ## lr-wpan-phy.h (module 'lr-wpan'): void ns3::LrWpanPhy::PlmeSetTRXStateRequest(ns3::LrWpanPhyEnumeration state) [member function]
+    cls.add_method('PlmeSetTRXStateRequest', 
+                   'void', 
+                   [param('ns3::LrWpanPhyEnumeration', 'state')])
+    ## lr-wpan-phy.h (module 'lr-wpan'): void ns3::LrWpanPhy::PlmeSetAttributeRequest(ns3::LrWpanPibAttributeIdentifier id, ns3::LrWpanPhyPibAttributes * attribute) [member function]
+    cls.add_method('PlmeSetAttributeRequest', 
+                   'void', 
+                   [param('ns3::LrWpanPibAttributeIdentifier', 'id'), param('ns3::LrWpanPhyPibAttributes *', 'attribute')])
+    ## lr-wpan-phy.h (module 'lr-wpan'): void ns3::LrWpanPhy::SetPdDataIndicationCallback(ns3::PdDataIndicationCallback c) [member function]
+    cls.add_method('SetPdDataIndicationCallback', 
+                   'void', 
+                   [param('ns3::PdDataIndicationCallback', 'c')])
+    ## lr-wpan-phy.h (module 'lr-wpan'): void ns3::LrWpanPhy::SetPdDataConfirmCallback(ns3::PdDataConfirmCallback c) [member function]
+    cls.add_method('SetPdDataConfirmCallback', 
+                   'void', 
+                   [param('ns3::PdDataConfirmCallback', 'c')])
+    ## lr-wpan-phy.h (module 'lr-wpan'): void ns3::LrWpanPhy::SetPlmeCcaConfirmCallback(ns3::PlmeCcaConfirmCallback c) [member function]
+    cls.add_method('SetPlmeCcaConfirmCallback', 
+                   'void', 
+                   [param('ns3::PlmeCcaConfirmCallback', 'c')])
+    ## lr-wpan-phy.h (module 'lr-wpan'): void ns3::LrWpanPhy::SetPlmeEdConfirmCallback(ns3::PlmeEdConfirmCallback c) [member function]
+    cls.add_method('SetPlmeEdConfirmCallback', 
+                   'void', 
+                   [param('ns3::PlmeEdConfirmCallback', 'c')])
+    ## lr-wpan-phy.h (module 'lr-wpan'): void ns3::LrWpanPhy::SetPlmeGetAttributeConfirmCallback(ns3::PlmeGetAttributeConfirmCallback c) [member function]
+    cls.add_method('SetPlmeGetAttributeConfirmCallback', 
+                   'void', 
+                   [param('ns3::PlmeGetAttributeConfirmCallback', 'c')])
+    ## lr-wpan-phy.h (module 'lr-wpan'): void ns3::LrWpanPhy::SetPlmeSetTRXStateConfirmCallback(ns3::PlmeSetTRXStateConfirmCallback c) [member function]
+    cls.add_method('SetPlmeSetTRXStateConfirmCallback', 
+                   'void', 
+                   [param('ns3::PlmeSetTRXStateConfirmCallback', 'c')])
+    ## lr-wpan-phy.h (module 'lr-wpan'): void ns3::LrWpanPhy::SetPlmeSetAttributeConfirmCallback(ns3::PlmeSetAttributeConfirmCallback c) [member function]
+    cls.add_method('SetPlmeSetAttributeConfirmCallback', 
+                   'void', 
+                   [param('ns3::PlmeSetAttributeConfirmCallback', 'c')])
+    ## lr-wpan-phy.h (module 'lr-wpan'): double ns3::LrWpanPhy::GetDataOrSymbolRate(bool isData) [member function]
+    cls.add_method('GetDataOrSymbolRate', 
+                   'double', 
+                   [param('bool', 'isData')])
+    ## lr-wpan-phy.h (module 'lr-wpan'): void ns3::LrWpanPhy::SetErrorModel(ns3::Ptr<ns3::LrWpanErrorModel> e) [member function]
+    cls.add_method('SetErrorModel', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::LrWpanErrorModel >', 'e')])
+    ## lr-wpan-phy.h (module 'lr-wpan'): ns3::Ptr<ns3::LrWpanErrorModel> ns3::LrWpanPhy::GetErrorModel() const [member function]
+    cls.add_method('GetErrorModel', 
+                   'ns3::Ptr< ns3::LrWpanErrorModel >', 
+                   [], 
+                   is_const=True)
+    ## lr-wpan-phy.h (module 'lr-wpan'): uint64_t ns3::LrWpanPhy::GetPhySHRDuration() const [member function]
+    cls.add_method('GetPhySHRDuration', 
+                   'uint64_t', 
+                   [], 
+                   is_const=True)
+    ## lr-wpan-phy.h (module 'lr-wpan'): double ns3::LrWpanPhy::GetPhySymbolsPerOctet() const [member function]
+    cls.add_method('GetPhySymbolsPerOctet', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## lr-wpan-phy.h (module 'lr-wpan'): int64_t ns3::LrWpanPhy::AssignStreams(int64_t stream) [member function]
+    cls.add_method('AssignStreams', 
+                   'int64_t', 
+                   [param('int64_t', 'stream')])
+    ## lr-wpan-phy.h (module 'lr-wpan'): void ns3::LrWpanPhy::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   visibility='private', is_virtual=True)
+    return
+
+def register_Ns3LrWpanSpectrumSignalParameters_methods(root_module, cls):
+    ## lr-wpan-spectrum-signal-parameters.h (module 'lr-wpan'): ns3::LrWpanSpectrumSignalParameters::LrWpanSpectrumSignalParameters() [constructor]
+    cls.add_constructor([])
+    ## lr-wpan-spectrum-signal-parameters.h (module 'lr-wpan'): ns3::LrWpanSpectrumSignalParameters::LrWpanSpectrumSignalParameters(ns3::LrWpanSpectrumSignalParameters const & p) [copy constructor]
+    cls.add_constructor([param('ns3::LrWpanSpectrumSignalParameters const &', 'p')])
+    ## lr-wpan-spectrum-signal-parameters.h (module 'lr-wpan'): ns3::Ptr<ns3::SpectrumSignalParameters> ns3::LrWpanSpectrumSignalParameters::Copy() [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::SpectrumSignalParameters >', 
+                   [], 
+                   is_virtual=True)
+    ## lr-wpan-spectrum-signal-parameters.h (module 'lr-wpan'): ns3::LrWpanSpectrumSignalParameters::packetBurst [variable]
+    cls.add_instance_attribute('packetBurst', 'ns3::Ptr< ns3::PacketBurst >', is_const=False)
+    return
+
+def register_Ns3Mac16AddressChecker_methods(root_module, cls):
+    ## mac16-address.h (module 'network'): ns3::Mac16AddressChecker::Mac16AddressChecker() [constructor]
+    cls.add_constructor([])
+    ## mac16-address.h (module 'network'): ns3::Mac16AddressChecker::Mac16AddressChecker(ns3::Mac16AddressChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Mac16AddressChecker const &', 'arg0')])
+    return
+
+def register_Ns3Mac16AddressValue_methods(root_module, cls):
+    ## mac16-address.h (module 'network'): ns3::Mac16AddressValue::Mac16AddressValue() [constructor]
+    cls.add_constructor([])
+    ## mac16-address.h (module 'network'): ns3::Mac16AddressValue::Mac16AddressValue(ns3::Mac16AddressValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Mac16AddressValue const &', 'arg0')])
+    ## mac16-address.h (module 'network'): ns3::Mac16AddressValue::Mac16AddressValue(ns3::Mac16Address const & value) [constructor]
+    cls.add_constructor([param('ns3::Mac16Address const &', 'value')])
+    ## mac16-address.h (module 'network'): ns3::Ptr<ns3::AttributeValue> ns3::Mac16AddressValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## mac16-address.h (module 'network'): bool ns3::Mac16AddressValue::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)
+    ## mac16-address.h (module 'network'): ns3::Mac16Address ns3::Mac16AddressValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'ns3::Mac16Address', 
+                   [], 
+                   is_const=True)
+    ## mac16-address.h (module 'network'): std::string ns3::Mac16AddressValue::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)
+    ## mac16-address.h (module 'network'): void ns3::Mac16AddressValue::Set(ns3::Mac16Address const & value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('ns3::Mac16Address const &', 'value')])
+    return
+
+def register_Ns3Mac64AddressChecker_methods(root_module, cls):
+    ## mac64-address.h (module 'network'): ns3::Mac64AddressChecker::Mac64AddressChecker() [constructor]
+    cls.add_constructor([])
+    ## mac64-address.h (module 'network'): ns3::Mac64AddressChecker::Mac64AddressChecker(ns3::Mac64AddressChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Mac64AddressChecker const &', 'arg0')])
+    return
+
+def register_Ns3Mac64AddressValue_methods(root_module, cls):
+    ## mac64-address.h (module 'network'): ns3::Mac64AddressValue::Mac64AddressValue() [constructor]
+    cls.add_constructor([])
+    ## mac64-address.h (module 'network'): ns3::Mac64AddressValue::Mac64AddressValue(ns3::Mac64AddressValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Mac64AddressValue const &', 'arg0')])
+    ## mac64-address.h (module 'network'): ns3::Mac64AddressValue::Mac64AddressValue(ns3::Mac64Address const & value) [constructor]
+    cls.add_constructor([param('ns3::Mac64Address const &', 'value')])
+    ## mac64-address.h (module 'network'): ns3::Ptr<ns3::AttributeValue> ns3::Mac64AddressValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## mac64-address.h (module 'network'): bool ns3::Mac64AddressValue::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)
+    ## mac64-address.h (module 'network'): ns3::Mac64Address ns3::Mac64AddressValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'ns3::Mac64Address', 
+                   [], 
+                   is_const=True)
+    ## mac64-address.h (module 'network'): std::string ns3::Mac64AddressValue::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)
+    ## mac64-address.h (module 'network'): void ns3::Mac64AddressValue::Set(ns3::Mac64Address const & value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('ns3::Mac64Address const &', 'value')])
+    return
+
+def register_Ns3NetDevice_methods(root_module, cls):
+    ## net-device.h (module 'network'): ns3::NetDevice::NetDevice() [constructor]
+    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]
+    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')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## net-device.h (module 'network'): ns3::Address ns3::NetDevice::GetAddress() const [member function]
+    cls.add_method('GetAddress', 
+                   'ns3::Address', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## net-device.h (module 'network'): ns3::Address ns3::NetDevice::GetBroadcast() const [member function]
+    cls.add_method('GetBroadcast', 
+                   'ns3::Address', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## net-device.h (module 'network'): ns3::Ptr<ns3::Channel> ns3::NetDevice::GetChannel() const [member function]
+    cls.add_method('GetChannel', 
+                   'ns3::Ptr< ns3::Channel >', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## net-device.h (module 'network'): uint32_t ns3::NetDevice::GetIfIndex() const [member function]
+    cls.add_method('GetIfIndex', 
+                   'uint32_t', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## net-device.h (module 'network'): uint16_t ns3::NetDevice::GetMtu() const [member function]
+    cls.add_method('GetMtu', 
+                   'uint16_t', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## net-device.h (module 'network'): ns3::Address ns3::NetDevice::GetMulticast(ns3::Ipv4Address multicastGroup) const [member function]
+    cls.add_method('GetMulticast', 
+                   'ns3::Address', 
+                   [param('ns3::Ipv4Address', 'multicastGroup')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## net-device.h (module 'network'): ns3::Address ns3::NetDevice::GetMulticast(ns3::Ipv6Address addr) const [member function]
+    cls.add_method('GetMulticast', 
+                   'ns3::Address', 
+                   [param('ns3::Ipv6Address', 'addr')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## net-device.h (module 'network'): ns3::Ptr<ns3::Node> ns3::NetDevice::GetNode() const [member function]
+    cls.add_method('GetNode', 
+                   'ns3::Ptr< ns3::Node >', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## net-device.h (module 'network'): static ns3::TypeId ns3::NetDevice::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## net-device.h (module 'network'): bool ns3::NetDevice::IsBridge() const [member function]
+    cls.add_method('IsBridge', 
+                   'bool', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## net-device.h (module 'network'): bool ns3::NetDevice::IsBroadcast() const [member function]
+    cls.add_method('IsBroadcast', 
+                   'bool', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## net-device.h (module 'network'): bool ns3::NetDevice::IsLinkUp() const [member function]
+    cls.add_method('IsLinkUp', 
+                   'bool', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## net-device.h (module 'network'): bool ns3::NetDevice::IsMulticast() const [member function]
+    cls.add_method('IsMulticast', 
+                   'bool', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## net-device.h (module 'network'): bool ns3::NetDevice::IsPointToPoint() const [member function]
+    cls.add_method('IsPointToPoint', 
+                   'bool', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## net-device.h (module 'network'): bool ns3::NetDevice::NeedsArp() const [member function]
+    cls.add_method('NeedsArp', 
+                   'bool', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## net-device.h (module 'network'): bool ns3::NetDevice::Send(ns3::Ptr<ns3::Packet> packet, ns3::Address const & dest, uint16_t protocolNumber) [member function]
+    cls.add_method('Send', 
+                   'bool', 
+                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('ns3::Address const &', 'dest'), param('uint16_t', 'protocolNumber')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## net-device.h (module 'network'): bool ns3::NetDevice::SendFrom(ns3::Ptr<ns3::Packet> packet, ns3::Address const & source, ns3::Address const & dest, uint16_t protocolNumber) [member function]
+    cls.add_method('SendFrom', 
+                   'bool', 
+                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('ns3::Address const &', 'source'), param('ns3::Address const &', 'dest'), param('uint16_t', 'protocolNumber')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## net-device.h (module 'network'): void ns3::NetDevice::SetAddress(ns3::Address address) [member function]
+    cls.add_method('SetAddress', 
+                   'void', 
+                   [param('ns3::Address', 'address')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## net-device.h (module 'network'): void ns3::NetDevice::SetIfIndex(uint32_t const index) [member function]
+    cls.add_method('SetIfIndex', 
+                   'void', 
+                   [param('uint32_t const', 'index')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## net-device.h (module 'network'): bool ns3::NetDevice::SetMtu(uint16_t const mtu) [member function]
+    cls.add_method('SetMtu', 
+                   'bool', 
+                   [param('uint16_t const', 'mtu')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## net-device.h (module 'network'): void ns3::NetDevice::SetNode(ns3::Ptr<ns3::Node> node) [member function]
+    cls.add_method('SetNode', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Node >', 'node')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## net-device.h (module 'network'): void ns3::NetDevice::SetPromiscReceiveCallback(ns3::Callback<bool,ns3::Ptr<ns3::NetDevice>,ns3::Ptr<const ns3::Packet>,short unsigned int,const ns3::Address&,const ns3::Address&,ns3::NetDevice::PacketType,ns3::empty,ns3::empty,ns3::empty> cb) [member function]
+    cls.add_method('SetPromiscReceiveCallback', 
+                   'void', 
+                   [param('ns3::Callback< bool, ns3::Ptr< ns3::NetDevice >, ns3::Ptr< ns3::Packet const >, short unsigned int, ns3::Address const &, ns3::Address const &, ns3::NetDevice::PacketType, ns3::empty, ns3::empty, ns3::empty >', 'cb')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## net-device.h (module 'network'): void ns3::NetDevice::SetReceiveCallback(ns3::Callback<bool, ns3::Ptr<ns3::NetDevice>, ns3::Ptr<ns3::Packet const>, unsigned short, ns3::Address const&, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> cb) [member function]
+    cls.add_method('SetReceiveCallback', 
+                   'void', 
+                   [param('ns3::Callback< bool, ns3::Ptr< ns3::NetDevice >, ns3::Ptr< ns3::Packet const >, unsigned short, ns3::Address const &, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'cb')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## net-device.h (module 'network'): bool ns3::NetDevice::SupportsSendFrom() const [member function]
+    cls.add_method('SupportsSendFrom', 
+                   'bool', 
+                   [], 
+                   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')])
+    ## node.h (module 'network'): ns3::Node::Node() [constructor]
+    cls.add_constructor([])
+    ## node.h (module 'network'): ns3::Node::Node(uint32_t systemId) [constructor]
+    cls.add_constructor([param('uint32_t', 'systemId')])
+    ## node.h (module 'network'): uint32_t ns3::Node::AddApplication(ns3::Ptr<ns3::Application> application) [member function]
+    cls.add_method('AddApplication', 
+                   'uint32_t', 
+                   [param('ns3::Ptr< ns3::Application >', 'application')])
+    ## node.h (module 'network'): uint32_t ns3::Node::AddDevice(ns3::Ptr<ns3::NetDevice> device) [member function]
+    cls.add_method('AddDevice', 
+                   'uint32_t', 
+                   [param('ns3::Ptr< ns3::NetDevice >', 'device')])
+    ## node.h (module 'network'): static bool ns3::Node::ChecksumEnabled() [member function]
+    cls.add_method('ChecksumEnabled', 
+                   'bool', 
+                   [], 
+                   is_static=True)
+    ## node.h (module 'network'): ns3::Ptr<ns3::Application> ns3::Node::GetApplication(uint32_t index) const [member function]
+    cls.add_method('GetApplication', 
+                   'ns3::Ptr< ns3::Application >', 
+                   [param('uint32_t', 'index')], 
+                   is_const=True)
+    ## node.h (module 'network'): ns3::Ptr<ns3::NetDevice> ns3::Node::GetDevice(uint32_t index) const [member function]
+    cls.add_method('GetDevice', 
+                   'ns3::Ptr< ns3::NetDevice >', 
+                   [param('uint32_t', 'index')], 
+                   is_const=True)
+    ## node.h (module 'network'): uint32_t ns3::Node::GetId() const [member function]
+    cls.add_method('GetId', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## node.h (module 'network'): uint32_t ns3::Node::GetNApplications() const [member function]
+    cls.add_method('GetNApplications', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## node.h (module 'network'): uint32_t ns3::Node::GetNDevices() const [member function]
+    cls.add_method('GetNDevices', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## node.h (module 'network'): uint32_t ns3::Node::GetSystemId() const [member function]
+    cls.add_method('GetSystemId', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## node.h (module 'network'): static ns3::TypeId ns3::Node::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## node.h (module 'network'): void ns3::Node::RegisterDeviceAdditionListener(ns3::Callback<void,ns3::Ptr<ns3::NetDevice>,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> listener) [member function]
+    cls.add_method('RegisterDeviceAdditionListener', 
+                   'void', 
+                   [param('ns3::Callback< void, ns3::Ptr< ns3::NetDevice >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'listener')])
+    ## node.h (module 'network'): void ns3::Node::RegisterProtocolHandler(ns3::Callback<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> handler, uint16_t protocolType, ns3::Ptr<ns3::NetDevice> device, bool promiscuous=false) [member function]
+    cls.add_method('RegisterProtocolHandler', 
+                   'void', 
+                   [param('ns3::Callback< 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 >', 'handler'), param('uint16_t', 'protocolType'), param('ns3::Ptr< ns3::NetDevice >', 'device'), param('bool', 'promiscuous', default_value='false')])
+    ## node.h (module 'network'): void ns3::Node::UnregisterDeviceAdditionListener(ns3::Callback<void,ns3::Ptr<ns3::NetDevice>,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> listener) [member function]
+    cls.add_method('UnregisterDeviceAdditionListener', 
+                   'void', 
+                   [param('ns3::Callback< void, ns3::Ptr< ns3::NetDevice >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'listener')])
+    ## node.h (module 'network'): void ns3::Node::UnregisterProtocolHandler(ns3::Callback<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> handler) [member function]
+    cls.add_method('UnregisterProtocolHandler', 
+                   'void', 
+                   [param('ns3::Callback< 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 >', 'handler')])
+    ## node.h (module 'network'): void ns3::Node::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    ## node.h (module 'network'): void ns3::Node::DoInitialize() [member function]
+    cls.add_method('DoInitialize', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    return
+
+def register_Ns3ObjectFactoryChecker_methods(root_module, cls):
+    ## object-factory.h (module 'core'): ns3::ObjectFactoryChecker::ObjectFactoryChecker() [constructor]
+    cls.add_constructor([])
+    ## object-factory.h (module 'core'): ns3::ObjectFactoryChecker::ObjectFactoryChecker(ns3::ObjectFactoryChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::ObjectFactoryChecker const &', 'arg0')])
+    return
+
+def register_Ns3ObjectFactoryValue_methods(root_module, cls):
+    ## object-factory.h (module 'core'): ns3::ObjectFactoryValue::ObjectFactoryValue() [constructor]
+    cls.add_constructor([])
+    ## object-factory.h (module 'core'): ns3::ObjectFactoryValue::ObjectFactoryValue(ns3::ObjectFactoryValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::ObjectFactoryValue const &', 'arg0')])
+    ## object-factory.h (module 'core'): ns3::ObjectFactoryValue::ObjectFactoryValue(ns3::ObjectFactory const & value) [constructor]
+    cls.add_constructor([param('ns3::ObjectFactory const &', 'value')])
+    ## object-factory.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::ObjectFactoryValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## object-factory.h (module 'core'): bool ns3::ObjectFactoryValue::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)
+    ## object-factory.h (module 'core'): ns3::ObjectFactory ns3::ObjectFactoryValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'ns3::ObjectFactory', 
+                   [], 
+                   is_const=True)
+    ## object-factory.h (module 'core'): std::string ns3::ObjectFactoryValue::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)
+    ## object-factory.h (module 'core'): void ns3::ObjectFactoryValue::Set(ns3::ObjectFactory const & value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('ns3::ObjectFactory const &', 'value')])
+    return
+
+def register_Ns3OutputStreamWrapper_methods(root_module, cls):
+    ## output-stream-wrapper.h (module 'network'): ns3::OutputStreamWrapper::OutputStreamWrapper(ns3::OutputStreamWrapper const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::OutputStreamWrapper const &', 'arg0')])
+    ## output-stream-wrapper.h (module 'network'): ns3::OutputStreamWrapper::OutputStreamWrapper(std::string filename, std::_Ios_Openmode filemode) [constructor]
+    cls.add_constructor([param('std::string', 'filename'), param('std::_Ios_Openmode', 'filemode')])
+    ## output-stream-wrapper.h (module 'network'): ns3::OutputStreamWrapper::OutputStreamWrapper(std::ostream * os) [constructor]
+    cls.add_constructor([param('std::ostream *', 'os')])
+    ## output-stream-wrapper.h (module 'network'): std::ostream * ns3::OutputStreamWrapper::GetStream() [member function]
+    cls.add_method('GetStream', 
+                   'std::ostream *', 
+                   [])
+    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'): 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', 
+                   [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')])
+    return
+
+def register_Ns3TimeValue_methods(root_module, cls):
+    ## nstime.h (module 'core'): ns3::TimeValue::TimeValue() [constructor]
+    cls.add_constructor([])
+    ## nstime.h (module 'core'): ns3::TimeValue::TimeValue(ns3::TimeValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::TimeValue const &', 'arg0')])
+    ## nstime.h (module 'core'): ns3::TimeValue::TimeValue(ns3::Time const & value) [constructor]
+    cls.add_constructor([param('ns3::Time const &', 'value')])
+    ## nstime.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::TimeValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## nstime.h (module 'core'): bool ns3::TimeValue::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)
+    ## nstime.h (module 'core'): ns3::Time ns3::TimeValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'ns3::Time', 
+                   [], 
+                   is_const=True)
+    ## nstime.h (module 'core'): std::string ns3::TimeValue::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)
+    ## nstime.h (module 'core'): void ns3::TimeValue::Set(ns3::Time const & value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('ns3::Time const &', 'value')])
+    return
+
+def register_Ns3TypeIdChecker_methods(root_module, cls):
+    ## type-id.h (module 'core'): ns3::TypeIdChecker::TypeIdChecker() [constructor]
+    cls.add_constructor([])
+    ## type-id.h (module 'core'): ns3::TypeIdChecker::TypeIdChecker(ns3::TypeIdChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::TypeIdChecker const &', 'arg0')])
+    return
+
+def register_Ns3TypeIdValue_methods(root_module, cls):
+    ## type-id.h (module 'core'): ns3::TypeIdValue::TypeIdValue() [constructor]
+    cls.add_constructor([])
+    ## type-id.h (module 'core'): ns3::TypeIdValue::TypeIdValue(ns3::TypeIdValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::TypeIdValue const &', 'arg0')])
+    ## type-id.h (module 'core'): ns3::TypeIdValue::TypeIdValue(ns3::TypeId const & value) [constructor]
+    cls.add_constructor([param('ns3::TypeId const &', 'value')])
+    ## type-id.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::TypeIdValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## type-id.h (module 'core'): bool ns3::TypeIdValue::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)
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeIdValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_const=True)
+    ## type-id.h (module 'core'): std::string ns3::TypeIdValue::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)
+    ## type-id.h (module 'core'): void ns3::TypeIdValue::Set(ns3::TypeId const & value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [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_Ns3LrWpanNetDevice_methods(root_module, cls):
+    ## lr-wpan-net-device.h (module 'lr-wpan'): ns3::LrWpanNetDevice::LrWpanNetDevice(ns3::LrWpanNetDevice const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::LrWpanNetDevice const &', 'arg0')])
+    ## lr-wpan-net-device.h (module 'lr-wpan'): ns3::LrWpanNetDevice::LrWpanNetDevice() [constructor]
+    cls.add_constructor([])
+    ## lr-wpan-net-device.h (module 'lr-wpan'): void ns3::LrWpanNetDevice::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')], 
+                   is_virtual=True)
+    ## lr-wpan-net-device.h (module 'lr-wpan'): int64_t ns3::LrWpanNetDevice::AssignStreams(int64_t stream) [member function]
+    cls.add_method('AssignStreams', 
+                   'int64_t', 
+                   [param('int64_t', 'stream')])
+    ## lr-wpan-net-device.h (module 'lr-wpan'): ns3::Address ns3::LrWpanNetDevice::GetAddress() const [member function]
+    cls.add_method('GetAddress', 
+                   'ns3::Address', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## lr-wpan-net-device.h (module 'lr-wpan'): ns3::Address ns3::LrWpanNetDevice::GetBroadcast() const [member function]
+    cls.add_method('GetBroadcast', 
+                   'ns3::Address', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## lr-wpan-net-device.h (module 'lr-wpan'): ns3::Ptr<ns3::Channel> ns3::LrWpanNetDevice::GetChannel() const [member function]
+    cls.add_method('GetChannel', 
+                   'ns3::Ptr< ns3::Channel >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## lr-wpan-net-device.h (module 'lr-wpan'): ns3::Ptr<ns3::LrWpanCsmaCa> ns3::LrWpanNetDevice::GetCsmaCa() const [member function]
+    cls.add_method('GetCsmaCa', 
+                   'ns3::Ptr< ns3::LrWpanCsmaCa >', 
+                   [], 
+                   is_const=True)
+    ## lr-wpan-net-device.h (module 'lr-wpan'): uint32_t ns3::LrWpanNetDevice::GetIfIndex() const [member function]
+    cls.add_method('GetIfIndex', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## lr-wpan-net-device.h (module 'lr-wpan'): ns3::Ptr<ns3::LrWpanMac> ns3::LrWpanNetDevice::GetMac() const [member function]
+    cls.add_method('GetMac', 
+                   'ns3::Ptr< ns3::LrWpanMac >', 
+                   [], 
+                   is_const=True)
+    ## lr-wpan-net-device.h (module 'lr-wpan'): uint16_t ns3::LrWpanNetDevice::GetMtu() const [member function]
+    cls.add_method('GetMtu', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## lr-wpan-net-device.h (module 'lr-wpan'): ns3::Address ns3::LrWpanNetDevice::GetMulticast(ns3::Ipv4Address multicastGroup) const [member function]
+    cls.add_method('GetMulticast', 
+                   'ns3::Address', 
+                   [param('ns3::Ipv4Address', 'multicastGroup')], 
+                   is_const=True, is_virtual=True)
+    ## lr-wpan-net-device.h (module 'lr-wpan'): ns3::Address ns3::LrWpanNetDevice::GetMulticast(ns3::Ipv6Address addr) const [member function]
+    cls.add_method('GetMulticast', 
+                   'ns3::Address', 
+                   [param('ns3::Ipv6Address', 'addr')], 
+                   is_const=True, is_virtual=True)
+    ## lr-wpan-net-device.h (module 'lr-wpan'): ns3::Ptr<ns3::Node> ns3::LrWpanNetDevice::GetNode() const [member function]
+    cls.add_method('GetNode', 
+                   'ns3::Ptr< ns3::Node >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## lr-wpan-net-device.h (module 'lr-wpan'): ns3::Ptr<ns3::LrWpanPhy> ns3::LrWpanNetDevice::GetPhy() const [member function]
+    cls.add_method('GetPhy', 
+                   'ns3::Ptr< ns3::LrWpanPhy >', 
+                   [], 
+                   is_const=True)
+    ## lr-wpan-net-device.h (module 'lr-wpan'): static ns3::TypeId ns3::LrWpanNetDevice::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## lr-wpan-net-device.h (module 'lr-wpan'): bool ns3::LrWpanNetDevice::IsBridge() const [member function]
+    cls.add_method('IsBridge', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## lr-wpan-net-device.h (module 'lr-wpan'): bool ns3::LrWpanNetDevice::IsBroadcast() const [member function]
+    cls.add_method('IsBroadcast', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## lr-wpan-net-device.h (module 'lr-wpan'): bool ns3::LrWpanNetDevice::IsLinkUp() const [member function]
+    cls.add_method('IsLinkUp', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## lr-wpan-net-device.h (module 'lr-wpan'): bool ns3::LrWpanNetDevice::IsMulticast() const [member function]
+    cls.add_method('IsMulticast', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## lr-wpan-net-device.h (module 'lr-wpan'): bool ns3::LrWpanNetDevice::IsPointToPoint() const [member function]
+    cls.add_method('IsPointToPoint', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## lr-wpan-net-device.h (module 'lr-wpan'): void ns3::LrWpanNetDevice::McpsDataIndication(ns3::McpsDataIndicationParams params, ns3::Ptr<ns3::Packet> pkt) [member function]
+    cls.add_method('McpsDataIndication', 
+                   'void', 
+                   [param('ns3::McpsDataIndicationParams', 'params'), param('ns3::Ptr< ns3::Packet >', 'pkt')])
+    ## lr-wpan-net-device.h (module 'lr-wpan'): bool ns3::LrWpanNetDevice::NeedsArp() const [member function]
+    cls.add_method('NeedsArp', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## lr-wpan-net-device.h (module 'lr-wpan'): bool ns3::LrWpanNetDevice::Send(ns3::Ptr<ns3::Packet> packet, ns3::Address const & dest, uint16_t protocolNumber) [member function]
+    cls.add_method('Send', 
+                   'bool', 
+                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('ns3::Address const &', 'dest'), param('uint16_t', 'protocolNumber')], 
+                   is_virtual=True)
+    ## lr-wpan-net-device.h (module 'lr-wpan'): bool ns3::LrWpanNetDevice::SendFrom(ns3::Ptr<ns3::Packet> packet, ns3::Address const & source, ns3::Address const & dest, uint16_t protocolNumber) [member function]
+    cls.add_method('SendFrom', 
+                   'bool', 
+                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('ns3::Address const &', 'source'), param('ns3::Address const &', 'dest'), param('uint16_t', 'protocolNumber')], 
+                   is_virtual=True)
+    ## lr-wpan-net-device.h (module 'lr-wpan'): void ns3::LrWpanNetDevice::SetAddress(ns3::Address address) [member function]
+    cls.add_method('SetAddress', 
+                   'void', 
+                   [param('ns3::Address', 'address')], 
+                   is_virtual=True)
+    ## lr-wpan-net-device.h (module 'lr-wpan'): void ns3::LrWpanNetDevice::SetChannel(ns3::Ptr<ns3::SpectrumChannel> channel) [member function]
+    cls.add_method('SetChannel', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::SpectrumChannel >', 'channel')])
+    ## lr-wpan-net-device.h (module 'lr-wpan'): void ns3::LrWpanNetDevice::SetCsmaCa(ns3::Ptr<ns3::LrWpanCsmaCa> csmaca) [member function]
+    cls.add_method('SetCsmaCa', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::LrWpanCsmaCa >', 'csmaca')])
+    ## lr-wpan-net-device.h (module 'lr-wpan'): void ns3::LrWpanNetDevice::SetIfIndex(uint32_t const index) [member function]
+    cls.add_method('SetIfIndex', 
+                   'void', 
+                   [param('uint32_t const', 'index')], 
+                   is_virtual=True)
+    ## lr-wpan-net-device.h (module 'lr-wpan'): void ns3::LrWpanNetDevice::SetMac(ns3::Ptr<ns3::LrWpanMac> mac) [member function]
+    cls.add_method('SetMac', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::LrWpanMac >', 'mac')])
+    ## lr-wpan-net-device.h (module 'lr-wpan'): bool ns3::LrWpanNetDevice::SetMtu(uint16_t const mtu) [member function]
+    cls.add_method('SetMtu', 
+                   'bool', 
+                   [param('uint16_t const', 'mtu')], 
+                   is_virtual=True)
+    ## lr-wpan-net-device.h (module 'lr-wpan'): void ns3::LrWpanNetDevice::SetNode(ns3::Ptr<ns3::Node> node) [member function]
+    cls.add_method('SetNode', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Node >', 'node')], 
+                   is_virtual=True)
+    ## lr-wpan-net-device.h (module 'lr-wpan'): void ns3::LrWpanNetDevice::SetPhy(ns3::Ptr<ns3::LrWpanPhy> phy) [member function]
+    cls.add_method('SetPhy', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::LrWpanPhy >', 'phy')])
+    ## lr-wpan-net-device.h (module 'lr-wpan'): void ns3::LrWpanNetDevice::SetPromiscReceiveCallback(ns3::Callback<bool,ns3::Ptr<ns3::NetDevice>,ns3::Ptr<const ns3::Packet>,short unsigned int,const ns3::Address&,const ns3::Address&,ns3::NetDevice::PacketType,ns3::empty,ns3::empty,ns3::empty> cb) [member function]
+    cls.add_method('SetPromiscReceiveCallback', 
+                   'void', 
+                   [param('ns3::Callback< bool, ns3::Ptr< ns3::NetDevice >, ns3::Ptr< ns3::Packet const >, short unsigned int, ns3::Address const &, ns3::Address const &, ns3::NetDevice::PacketType, ns3::empty, ns3::empty, ns3::empty >', 'cb')], 
+                   is_virtual=True)
+    ## lr-wpan-net-device.h (module 'lr-wpan'): void ns3::LrWpanNetDevice::SetReceiveCallback(ns3::Callback<bool, ns3::Ptr<ns3::NetDevice>, ns3::Ptr<ns3::Packet const>, unsigned short, ns3::Address const&, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> cb) [member function]
+    cls.add_method('SetReceiveCallback', 
+                   'void', 
+                   [param('ns3::Callback< bool, ns3::Ptr< ns3::NetDevice >, ns3::Ptr< ns3::Packet const >, unsigned short, ns3::Address const &, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'cb')], 
+                   is_virtual=True)
+    ## lr-wpan-net-device.h (module 'lr-wpan'): bool ns3::LrWpanNetDevice::SupportsSendFrom() const [member function]
+    cls.add_method('SupportsSendFrom', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## lr-wpan-net-device.h (module 'lr-wpan'): void ns3::LrWpanNetDevice::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   visibility='private', is_virtual=True)
+    ## lr-wpan-net-device.h (module 'lr-wpan'): void ns3::LrWpanNetDevice::DoInitialize() [member function]
+    cls.add_method('DoInitialize', 
+                   'void', 
+                   [], 
+                   visibility='private', is_virtual=True)
+    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')])
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation::Implementation() [constructor]
+    cls.add_constructor([])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Implementation::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## hash-function.h (module 'core'): uint64_t ns3::Hash::Implementation::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Implementation::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
+    return
+
+def register_Ns3HashFunctionFnv1a_methods(root_module, cls):
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a::Fnv1a(ns3::Hash::Function::Fnv1a const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Fnv1a const &', 'arg0')])
+    ## hash-fnv.h (module 'core'): ns3::Hash::Function::Fnv1a::Fnv1a() [constructor]
+    cls.add_constructor([])
+    ## hash-fnv.h (module 'core'): uint32_t ns3::Hash::Function::Fnv1a::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-fnv.h (module 'core'): uint64_t ns3::Hash::Function::Fnv1a::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-fnv.h (module 'core'): void ns3::Hash::Function::Fnv1a::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionHash32_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32::Hash32(ns3::Hash::Function::Hash32 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Hash32 const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash32::Hash32(ns3::Hash::Hash32Function_ptr hp) [constructor]
+    cls.add_constructor([param('ns3::Hash::Hash32Function_ptr', 'hp')])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Function::Hash32::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Function::Hash32::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionHash64_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64::Hash64(ns3::Hash::Function::Hash64 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Hash64 const &', 'arg0')])
+    ## hash-function.h (module 'core'): ns3::Hash::Function::Hash64::Hash64(ns3::Hash::Hash64Function_ptr hp) [constructor]
+    cls.add_constructor([param('ns3::Hash::Hash64Function_ptr', 'hp')])
+    ## hash-function.h (module 'core'): uint32_t ns3::Hash::Function::Hash64::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): uint64_t ns3::Hash::Function::Hash64::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-function.h (module 'core'): void ns3::Hash::Function::Hash64::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3HashFunctionMurmur3_methods(root_module, cls):
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3::Murmur3(ns3::Hash::Function::Murmur3 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Function::Murmur3 const &', 'arg0')])
+    ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3::Murmur3() [constructor]
+    cls.add_constructor([])
+    ## hash-murmur3.h (module 'core'): uint32_t ns3::Hash::Function::Murmur3::GetHash32(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash32', 
+                   'uint32_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-murmur3.h (module 'core'): uint64_t ns3::Hash::Function::Murmur3::GetHash64(char const * buffer, size_t const size) [member function]
+    cls.add_method('GetHash64', 
+                   'uint64_t', 
+                   [param('char const *', 'buffer'), param('size_t const', 'size')], 
+                   is_virtual=True)
+    ## hash-murmur3.h (module 'core'): void ns3::Hash::Function::Murmur3::clear() [member function]
+    cls.add_method('clear', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_functions(root_module):
+    module = root_module
+    register_functions_ns3_FatalImpl(module.get_submodule('FatalImpl'), root_module)
+    register_functions_ns3_Hash(module.get_submodule('Hash'), root_module)
+    return
+
+def register_functions_ns3_FatalImpl(module, root_module):
+    return
+
+def register_functions_ns3_Hash(module, root_module):
+    register_functions_ns3_Hash_Function(module.get_submodule('Function'), root_module)
+    return
+
+def register_functions_ns3_Hash_Function(module, root_module):
+    return
+
+def main():
+    out = FileCodeSink(sys.stdout)
+    root_module = module_init()
+    register_types(root_module)
+    register_methods(root_module)
+    register_functions(root_module)
+    root_module.generate(out)
+
+if __name__ == '__main__':
+    main()
+
diff -Naur ns-3.19/src/lr-wpan/doc/802-15-4-ber.eps ns-3.20/src/lr-wpan/doc/802-15-4-ber.eps
--- ns-3.19/src/lr-wpan/doc/802-15-4-ber.eps	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.20/src/lr-wpan/doc/802-15-4-ber.eps	2014-06-17 10:33:13.892995969 -0700
@@ -0,0 +1,1030 @@
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: 802.15.4-ber.eps
+%%Creator: gnuplot 4.4 patchlevel 2
+%%CreationDate: Tue Oct  4 14:51:04 2011
+%%DocumentFonts: (atend)
+%%BoundingBox: 50 50 410 302
+%%EndComments
+%%BeginProlog
+/gnudict 256 dict def
+gnudict begin
+%
+% The following true/false flags may be edited by hand if desired.
+% The unit line width and grayscale image gamma correction may also be changed.
+%
+/Color true def
+/Blacktext false def
+/Solid false def
+/Dashlength 1 def
+/Landscape false def
+/Level1 false def
+/Rounded false def
+/ClipToBoundingBox false def
+/TransparentPatterns false def
+/gnulinewidth 5.000 def
+/userlinewidth gnulinewidth def
+/Gamma 1.0 def
+%
+/vshift -46 def
+/dl1 {
+  10.0 Dashlength mul mul
+  Rounded { currentlinewidth 0.75 mul sub dup 0 le { pop 0.01 } if } if
+} def
+/dl2 {
+  10.0 Dashlength mul mul
+  Rounded { currentlinewidth 0.75 mul add } if
+} def
+/hpt_ 31.5 def
+/vpt_ 31.5 def
+/hpt hpt_ def
+/vpt vpt_ def
+Level1 {} {
+/SDict 10 dict def
+systemdict /pdfmark known not {
+  userdict /pdfmark systemdict /cleartomark get put
+} if
+SDict begin [
+  /Title (802.15.4-ber.eps)
+  /Subject (gnuplot plot)
+  /Creator (gnuplot 4.4 patchlevel 2)
+  /Author (tomh)
+%  /Producer (gnuplot)
+%  /Keywords ()
+  /CreationDate (Tue Oct  4 14:51:04 2011)
+  /DOCINFO pdfmark
+end
+} ifelse
+/doclip {
+  ClipToBoundingBox {
+    newpath 50 50 moveto 410 50 lineto 410 302 lineto 50 302 lineto closepath
+    clip
+  } if
+} def
+%
+% Gnuplot Prolog Version 4.4 (August 2010)
+%
+%/SuppressPDFMark true def
+%
+/M {moveto} bind def
+/L {lineto} bind def
+/R {rmoveto} bind def
+/V {rlineto} bind def
+/N {newpath moveto} bind def
+/Z {closepath} bind def
+/C {setrgbcolor} bind def
+/f {rlineto fill} bind def
+/g {setgray} bind def
+/Gshow {show} def   % May be redefined later in the file to support UTF-8
+/vpt2 vpt 2 mul def
+/hpt2 hpt 2 mul def
+/Lshow {currentpoint stroke M 0 vshift R 
+	Blacktext {gsave 0 setgray show grestore} {show} ifelse} def
+/Rshow {currentpoint stroke M dup stringwidth pop neg vshift R
+	Blacktext {gsave 0 setgray show grestore} {show} ifelse} def
+/Cshow {currentpoint stroke M dup stringwidth pop -2 div vshift R 
+	Blacktext {gsave 0 setgray show grestore} {show} ifelse} def
+/UP {dup vpt_ mul /vpt exch def hpt_ mul /hpt exch def
+  /hpt2 hpt 2 mul def /vpt2 vpt 2 mul def} def
+/DL {Color {setrgbcolor Solid {pop []} if 0 setdash}
+ {pop pop pop 0 setgray Solid {pop []} if 0 setdash} ifelse} def
+/BL {stroke userlinewidth 2 mul setlinewidth
+	Rounded {1 setlinejoin 1 setlinecap} if} def
+/AL {stroke userlinewidth 2 div setlinewidth
+	Rounded {1 setlinejoin 1 setlinecap} if} def
+/UL {dup gnulinewidth mul /userlinewidth exch def
+	dup 1 lt {pop 1} if 10 mul /udl exch def} def
+/PL {stroke userlinewidth setlinewidth
+	Rounded {1 setlinejoin 1 setlinecap} if} def
+3.8 setmiterlimit
+% Default Line colors
+/LCw {1 1 1} def
+/LCb {0 0 0} def
+/LCa {0 0 0} def
+/LC0 {1 0 0} def
+/LC1 {0 1 0} def
+/LC2 {0 0 1} def
+/LC3 {1 0 1} def
+/LC4 {0 1 1} def
+/LC5 {1 1 0} def
+/LC6 {0 0 0} def
+/LC7 {1 0.3 0} def
+/LC8 {0.5 0.5 0.5} def
+% Default Line Types
+/LTw {PL [] 1 setgray} def
+/LTb {BL [] LCb DL} def
+/LTa {AL [1 udl mul 2 udl mul] 0 setdash LCa setrgbcolor} def
+/LT0 {PL [] LC0 DL} def
+/LT1 {PL [4 dl1 2 dl2] LC1 DL} def
+/LT2 {PL [2 dl1 3 dl2] LC2 DL} def
+/LT3 {PL [1 dl1 1.5 dl2] LC3 DL} def
+/LT4 {PL [6 dl1 2 dl2 1 dl1 2 dl2] LC4 DL} def
+/LT5 {PL [3 dl1 3 dl2 1 dl1 3 dl2] LC5 DL} def
+/LT6 {PL [2 dl1 2 dl2 2 dl1 6 dl2] LC6 DL} def
+/LT7 {PL [1 dl1 2 dl2 6 dl1 2 dl2 1 dl1 2 dl2] LC7 DL} def
+/LT8 {PL [2 dl1 2 dl2 2 dl1 2 dl2 2 dl1 2 dl2 2 dl1 4 dl2] LC8 DL} def
+/Pnt {stroke [] 0 setdash gsave 1 setlinecap M 0 0 V stroke grestore} def
+/Dia {stroke [] 0 setdash 2 copy vpt add M
+  hpt neg vpt neg V hpt vpt neg V
+  hpt vpt V hpt neg vpt V closepath stroke
+  Pnt} def
+/Pls {stroke [] 0 setdash vpt sub M 0 vpt2 V
+  currentpoint stroke M
+  hpt neg vpt neg R hpt2 0 V stroke
+ } def
+/Box {stroke [] 0 setdash 2 copy exch hpt sub exch vpt add M
+  0 vpt2 neg V hpt2 0 V 0 vpt2 V
+  hpt2 neg 0 V closepath stroke
+  Pnt} def
+/Crs {stroke [] 0 setdash exch hpt sub exch vpt add M
+  hpt2 vpt2 neg V currentpoint stroke M
+  hpt2 neg 0 R hpt2 vpt2 V stroke} def
+/TriU {stroke [] 0 setdash 2 copy vpt 1.12 mul add M
+  hpt neg vpt -1.62 mul V
+  hpt 2 mul 0 V
+  hpt neg vpt 1.62 mul V closepath stroke
+  Pnt} def
+/Star {2 copy Pls Crs} def
+/BoxF {stroke [] 0 setdash exch hpt sub exch vpt add M
+  0 vpt2 neg V hpt2 0 V 0 vpt2 V
+  hpt2 neg 0 V closepath fill} def
+/TriUF {stroke [] 0 setdash vpt 1.12 mul add M
+  hpt neg vpt -1.62 mul V
+  hpt 2 mul 0 V
+  hpt neg vpt 1.62 mul V closepath fill} def
+/TriD {stroke [] 0 setdash 2 copy vpt 1.12 mul sub M
+  hpt neg vpt 1.62 mul V
+  hpt 2 mul 0 V
+  hpt neg vpt -1.62 mul V closepath stroke
+  Pnt} def
+/TriDF {stroke [] 0 setdash vpt 1.12 mul sub M
+  hpt neg vpt 1.62 mul V
+  hpt 2 mul 0 V
+  hpt neg vpt -1.62 mul V closepath fill} def
+/DiaF {stroke [] 0 setdash vpt add M
+  hpt neg vpt neg V hpt vpt neg V
+  hpt vpt V hpt neg vpt V closepath fill} def
+/Pent {stroke [] 0 setdash 2 copy gsave
+  translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+  closepath stroke grestore Pnt} def
+/PentF {stroke [] 0 setdash gsave
+  translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+  closepath fill grestore} def
+/Circle {stroke [] 0 setdash 2 copy
+  hpt 0 360 arc stroke Pnt} def
+/CircleF {stroke [] 0 setdash hpt 0 360 arc fill} def
+/C0 {BL [] 0 setdash 2 copy moveto vpt 90 450 arc} bind def
+/C1 {BL [] 0 setdash 2 copy moveto
+	2 copy vpt 0 90 arc closepath fill
+	vpt 0 360 arc closepath} bind def
+/C2 {BL [] 0 setdash 2 copy moveto
+	2 copy vpt 90 180 arc closepath fill
+	vpt 0 360 arc closepath} bind def
+/C3 {BL [] 0 setdash 2 copy moveto
+	2 copy vpt 0 180 arc closepath fill
+	vpt 0 360 arc closepath} bind def
+/C4 {BL [] 0 setdash 2 copy moveto
+	2 copy vpt 180 270 arc closepath fill
+	vpt 0 360 arc closepath} bind def
+/C5 {BL [] 0 setdash 2 copy moveto
+	2 copy vpt 0 90 arc
+	2 copy moveto
+	2 copy vpt 180 270 arc closepath fill
+	vpt 0 360 arc} bind def
+/C6 {BL [] 0 setdash 2 copy moveto
+	2 copy vpt 90 270 arc closepath fill
+	vpt 0 360 arc closepath} bind def
+/C7 {BL [] 0 setdash 2 copy moveto
+	2 copy vpt 0 270 arc closepath fill
+	vpt 0 360 arc closepath} bind def
+/C8 {BL [] 0 setdash 2 copy moveto
+	2 copy vpt 270 360 arc closepath fill
+	vpt 0 360 arc closepath} bind def
+/C9 {BL [] 0 setdash 2 copy moveto
+	2 copy vpt 270 450 arc closepath fill
+	vpt 0 360 arc closepath} bind def
+/C10 {BL [] 0 setdash 2 copy 2 copy moveto vpt 270 360 arc closepath fill
+	2 copy moveto
+	2 copy vpt 90 180 arc closepath fill
+	vpt 0 360 arc closepath} bind def
+/C11 {BL [] 0 setdash 2 copy moveto
+	2 copy vpt 0 180 arc closepath fill
+	2 copy moveto
+	2 copy vpt 270 360 arc closepath fill
+	vpt 0 360 arc closepath} bind def
+/C12 {BL [] 0 setdash 2 copy moveto
+	2 copy vpt 180 360 arc closepath fill
+	vpt 0 360 arc closepath} bind def
+/C13 {BL [] 0 setdash 2 copy moveto
+	2 copy vpt 0 90 arc closepath fill
+	2 copy moveto
+	2 copy vpt 180 360 arc closepath fill
+	vpt 0 360 arc closepath} bind def
+/C14 {BL [] 0 setdash 2 copy moveto
+	2 copy vpt 90 360 arc closepath fill
+	vpt 0 360 arc} bind def
+/C15 {BL [] 0 setdash 2 copy vpt 0 360 arc closepath fill
+	vpt 0 360 arc closepath} bind def
+/Rec {newpath 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto
+	neg 0 rlineto closepath} bind def
+/Square {dup Rec} bind def
+/Bsquare {vpt sub exch vpt sub exch vpt2 Square} bind def
+/S0 {BL [] 0 setdash 2 copy moveto 0 vpt rlineto BL Bsquare} bind def
+/S1 {BL [] 0 setdash 2 copy vpt Square fill Bsquare} bind def
+/S2 {BL [] 0 setdash 2 copy exch vpt sub exch vpt Square fill Bsquare} bind def
+/S3 {BL [] 0 setdash 2 copy exch vpt sub exch vpt2 vpt Rec fill Bsquare} bind def
+/S4 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt Square fill Bsquare} bind def
+/S5 {BL [] 0 setdash 2 copy 2 copy vpt Square fill
+	exch vpt sub exch vpt sub vpt Square fill Bsquare} bind def
+/S6 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill Bsquare} bind def
+/S7 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill
+	2 copy vpt Square fill Bsquare} bind def
+/S8 {BL [] 0 setdash 2 copy vpt sub vpt Square fill Bsquare} bind def
+/S9 {BL [] 0 setdash 2 copy vpt sub vpt vpt2 Rec fill Bsquare} bind def
+/S10 {BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt Square fill
+	Bsquare} bind def
+/S11 {BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt2 vpt Rec fill
+	Bsquare} bind def
+/S12 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill Bsquare} bind def
+/S13 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill
+	2 copy vpt Square fill Bsquare} bind def
+/S14 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill
+	2 copy exch vpt sub exch vpt Square fill Bsquare} bind def
+/S15 {BL [] 0 setdash 2 copy Bsquare fill Bsquare} bind def
+/D0 {gsave translate 45 rotate 0 0 S0 stroke grestore} bind def
+/D1 {gsave translate 45 rotate 0 0 S1 stroke grestore} bind def
+/D2 {gsave translate 45 rotate 0 0 S2 stroke grestore} bind def
+/D3 {gsave translate 45 rotate 0 0 S3 stroke grestore} bind def
+/D4 {gsave translate 45 rotate 0 0 S4 stroke grestore} bind def
+/D5 {gsave translate 45 rotate 0 0 S5 stroke grestore} bind def
+/D6 {gsave translate 45 rotate 0 0 S6 stroke grestore} bind def
+/D7 {gsave translate 45 rotate 0 0 S7 stroke grestore} bind def
+/D8 {gsave translate 45 rotate 0 0 S8 stroke grestore} bind def
+/D9 {gsave translate 45 rotate 0 0 S9 stroke grestore} bind def
+/D10 {gsave translate 45 rotate 0 0 S10 stroke grestore} bind def
+/D11 {gsave translate 45 rotate 0 0 S11 stroke grestore} bind def
+/D12 {gsave translate 45 rotate 0 0 S12 stroke grestore} bind def
+/D13 {gsave translate 45 rotate 0 0 S13 stroke grestore} bind def
+/D14 {gsave translate 45 rotate 0 0 S14 stroke grestore} bind def
+/D15 {gsave translate 45 rotate 0 0 S15 stroke grestore} bind def
+/DiaE {stroke [] 0 setdash vpt add M
+  hpt neg vpt neg V hpt vpt neg V
+  hpt vpt V hpt neg vpt V closepath stroke} def
+/BoxE {stroke [] 0 setdash exch hpt sub exch vpt add M
+  0 vpt2 neg V hpt2 0 V 0 vpt2 V
+  hpt2 neg 0 V closepath stroke} def
+/TriUE {stroke [] 0 setdash vpt 1.12 mul add M
+  hpt neg vpt -1.62 mul V
+  hpt 2 mul 0 V
+  hpt neg vpt 1.62 mul V closepath stroke} def
+/TriDE {stroke [] 0 setdash vpt 1.12 mul sub M
+  hpt neg vpt 1.62 mul V
+  hpt 2 mul 0 V
+  hpt neg vpt -1.62 mul V closepath stroke} def
+/PentE {stroke [] 0 setdash gsave
+  translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+  closepath stroke grestore} def
+/CircE {stroke [] 0 setdash 
+  hpt 0 360 arc stroke} def
+/Opaque {gsave closepath 1 setgray fill grestore 0 setgray closepath} def
+/DiaW {stroke [] 0 setdash vpt add M
+  hpt neg vpt neg V hpt vpt neg V
+  hpt vpt V hpt neg vpt V Opaque stroke} def
+/BoxW {stroke [] 0 setdash exch hpt sub exch vpt add M
+  0 vpt2 neg V hpt2 0 V 0 vpt2 V
+  hpt2 neg 0 V Opaque stroke} def
+/TriUW {stroke [] 0 setdash vpt 1.12 mul add M
+  hpt neg vpt -1.62 mul V
+  hpt 2 mul 0 V
+  hpt neg vpt 1.62 mul V Opaque stroke} def
+/TriDW {stroke [] 0 setdash vpt 1.12 mul sub M
+  hpt neg vpt 1.62 mul V
+  hpt 2 mul 0 V
+  hpt neg vpt -1.62 mul V Opaque stroke} def
+/PentW {stroke [] 0 setdash gsave
+  translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+  Opaque stroke grestore} def
+/CircW {stroke [] 0 setdash 
+  hpt 0 360 arc Opaque stroke} def
+/BoxFill {gsave Rec 1 setgray fill grestore} def
+/Density {
+  /Fillden exch def
+  currentrgbcolor
+  /ColB exch def /ColG exch def /ColR exch def
+  /ColR ColR Fillden mul Fillden sub 1 add def
+  /ColG ColG Fillden mul Fillden sub 1 add def
+  /ColB ColB Fillden mul Fillden sub 1 add def
+  ColR ColG ColB setrgbcolor} def
+/BoxColFill {gsave Rec PolyFill} def
+/PolyFill {gsave Density fill grestore grestore} def
+/h {rlineto rlineto rlineto gsave closepath fill grestore} bind def
+%
+% PostScript Level 1 Pattern Fill routine for rectangles
+% Usage: x y w h s a XX PatternFill
+%	x,y = lower left corner of box to be filled
+%	w,h = width and height of box
+%	  a = angle in degrees between lines and x-axis
+%	 XX = 0/1 for no/yes cross-hatch
+%
+/PatternFill {gsave /PFa [ 9 2 roll ] def
+  PFa 0 get PFa 2 get 2 div add PFa 1 get PFa 3 get 2 div add translate
+  PFa 2 get -2 div PFa 3 get -2 div PFa 2 get PFa 3 get Rec
+  gsave 1 setgray fill grestore clip
+  currentlinewidth 0.5 mul setlinewidth
+  /PFs PFa 2 get dup mul PFa 3 get dup mul add sqrt def
+  0 0 M PFa 5 get rotate PFs -2 div dup translate
+  0 1 PFs PFa 4 get div 1 add floor cvi
+	{PFa 4 get mul 0 M 0 PFs V} for
+  0 PFa 6 get ne {
+	0 1 PFs PFa 4 get div 1 add floor cvi
+	{PFa 4 get mul 0 2 1 roll M PFs 0 V} for
+ } if
+  stroke grestore} def
+%
+/languagelevel where
+ {pop languagelevel} {1} ifelse
+ 2 lt
+	{/InterpretLevel1 true def}
+	{/InterpretLevel1 Level1 def}
+ ifelse
+%
+% PostScript level 2 pattern fill definitions
+%
+/Level2PatternFill {
+/Tile8x8 {/PaintType 2 /PatternType 1 /TilingType 1 /BBox [0 0 8 8] /XStep 8 /YStep 8}
+	bind def
+/KeepColor {currentrgbcolor [/Pattern /DeviceRGB] setcolorspace} bind def
+<< Tile8x8
+ /PaintProc {0.5 setlinewidth pop 0 0 M 8 8 L 0 8 M 8 0 L stroke} 
+>> matrix makepattern
+/Pat1 exch def
+<< Tile8x8
+ /PaintProc {0.5 setlinewidth pop 0 0 M 8 8 L 0 8 M 8 0 L stroke
+	0 4 M 4 8 L 8 4 L 4 0 L 0 4 L stroke}
+>> matrix makepattern
+/Pat2 exch def
+<< Tile8x8
+ /PaintProc {0.5 setlinewidth pop 0 0 M 0 8 L
+	8 8 L 8 0 L 0 0 L fill}
+>> matrix makepattern
+/Pat3 exch def
+<< Tile8x8
+ /PaintProc {0.5 setlinewidth pop -4 8 M 8 -4 L
+	0 12 M 12 0 L stroke}
+>> matrix makepattern
+/Pat4 exch def
+<< Tile8x8
+ /PaintProc {0.5 setlinewidth pop -4 0 M 8 12 L
+	0 -4 M 12 8 L stroke}
+>> matrix makepattern
+/Pat5 exch def
+<< Tile8x8
+ /PaintProc {0.5 setlinewidth pop -2 8 M 4 -4 L
+	0 12 M 8 -4 L 4 12 M 10 0 L stroke}
+>> matrix makepattern
+/Pat6 exch def
+<< Tile8x8
+ /PaintProc {0.5 setlinewidth pop -2 0 M 4 12 L
+	0 -4 M 8 12 L 4 -4 M 10 8 L stroke}
+>> matrix makepattern
+/Pat7 exch def
+<< Tile8x8
+ /PaintProc {0.5 setlinewidth pop 8 -2 M -4 4 L
+	12 0 M -4 8 L 12 4 M 0 10 L stroke}
+>> matrix makepattern
+/Pat8 exch def
+<< Tile8x8
+ /PaintProc {0.5 setlinewidth pop 0 -2 M 12 4 L
+	-4 0 M 12 8 L -4 4 M 8 10 L stroke}
+>> matrix makepattern
+/Pat9 exch def
+/Pattern1 {PatternBgnd KeepColor Pat1 setpattern} bind def
+/Pattern2 {PatternBgnd KeepColor Pat2 setpattern} bind def
+/Pattern3 {PatternBgnd KeepColor Pat3 setpattern} bind def
+/Pattern4 {PatternBgnd KeepColor Landscape {Pat5} {Pat4} ifelse setpattern} bind def
+/Pattern5 {PatternBgnd KeepColor Landscape {Pat4} {Pat5} ifelse setpattern} bind def
+/Pattern6 {PatternBgnd KeepColor Landscape {Pat9} {Pat6} ifelse setpattern} bind def
+/Pattern7 {PatternBgnd KeepColor Landscape {Pat8} {Pat7} ifelse setpattern} bind def
+} def
+%
+%
+%End of PostScript Level 2 code
+%
+/PatternBgnd {
+  TransparentPatterns {} {gsave 1 setgray fill grestore} ifelse
+} def
+%
+% Substitute for Level 2 pattern fill codes with
+% grayscale if Level 2 support is not selected.
+%
+/Level1PatternFill {
+/Pattern1 {0.250 Density} bind def
+/Pattern2 {0.500 Density} bind def
+/Pattern3 {0.750 Density} bind def
+/Pattern4 {0.125 Density} bind def
+/Pattern5 {0.375 Density} bind def
+/Pattern6 {0.625 Density} bind def
+/Pattern7 {0.875 Density} bind def
+} def
+%
+% Now test for support of Level 2 code
+%
+Level1 {Level1PatternFill} {Level2PatternFill} ifelse
+%
+/Symbol-Oblique /Symbol findfont [1 0 .167 1 0 0] makefont
+dup length dict begin {1 index /FID eq {pop pop} {def} ifelse} forall
+currentdict end definefont pop
+/MFshow {
+   { dup 5 get 3 ge
+     { 5 get 3 eq {gsave} {grestore} ifelse }
+     {dup dup 0 get findfont exch 1 get scalefont setfont
+     [ currentpoint ] exch dup 2 get 0 exch R dup 5 get 2 ne {dup dup 6
+     get exch 4 get {Gshow} {stringwidth pop 0 R} ifelse }if dup 5 get 0 eq
+     {dup 3 get {2 get neg 0 exch R pop} {pop aload pop M} ifelse} {dup 5
+     get 1 eq {dup 2 get exch dup 3 get exch 6 get stringwidth pop -2 div
+     dup 0 R} {dup 6 get stringwidth pop -2 div 0 R 6 get
+     show 2 index {aload pop M neg 3 -1 roll neg R pop pop} {pop pop pop
+     pop aload pop M} ifelse }ifelse }ifelse }
+     ifelse }
+   forall} def
+/Gswidth {dup type /stringtype eq {stringwidth} {pop (n) stringwidth} ifelse} def
+/MFwidth {0 exch { dup 5 get 3 ge { 5 get 3 eq { 0 } { pop } ifelse }
+ {dup 3 get{dup dup 0 get findfont exch 1 get scalefont setfont
+     6 get Gswidth pop add} {pop} ifelse} ifelse} forall} def
+/MLshow { currentpoint stroke M
+  0 exch R
+  Blacktext {gsave 0 setgray MFshow grestore} {MFshow} ifelse } bind def
+/MRshow { currentpoint stroke M
+  exch dup MFwidth neg 3 -1 roll R
+  Blacktext {gsave 0 setgray MFshow grestore} {MFshow} ifelse } bind def
+/MCshow { currentpoint stroke M
+  exch dup MFwidth -2 div 3 -1 roll R
+  Blacktext {gsave 0 setgray MFshow grestore} {MFshow} ifelse } bind def
+/XYsave    { [( ) 1 2 true false 3 ()] } bind def
+/XYrestore { [( ) 1 2 true false 4 ()] } bind def
+end
+%%EndProlog
+gnudict begin
+gsave
+doclip
+50 50 translate
+0.050 0.050 scale
+0 setgray
+newpath
+(Times-BoldItalic) findfont 140 scalefont setfont
+1.000 UL
+LTb
+1.000 UL
+LTa
+938 448 M
+6009 0 V
+stroke
+LTb
+938 448 M
+63 0 V
+5946 0 R
+-63 0 V
+stroke
+854 448 M
+[ [(Times-BoldItalic) 140.0 0.0 true true 0 ( 1e-09)]
+] -46.7 MRshow
+1.000 UL
+LTb
+938 596 M
+31 0 V
+5978 0 R
+-31 0 V
+938 792 M
+31 0 V
+5978 0 R
+-31 0 V
+938 892 M
+31 0 V
+5978 0 R
+-31 0 V
+stroke
+LTa
+938 939 M
+6009 0 V
+stroke
+LTb
+938 939 M
+63 0 V
+5946 0 R
+-63 0 V
+stroke
+854 939 M
+[ [(Times-BoldItalic) 140.0 0.0 true true 0 ( 1e-08)]
+] -46.7 MRshow
+1.000 UL
+LTb
+938 1087 M
+31 0 V
+5978 0 R
+-31 0 V
+938 1283 M
+31 0 V
+5978 0 R
+-31 0 V
+938 1383 M
+31 0 V
+5978 0 R
+-31 0 V
+stroke
+LTa
+938 1431 M
+6009 0 V
+stroke
+LTb
+938 1431 M
+63 0 V
+5946 0 R
+-63 0 V
+stroke
+854 1431 M
+[ [(Times-BoldItalic) 140.0 0.0 true true 0 ( 1e-07)]
+] -46.7 MRshow
+1.000 UL
+LTb
+938 1579 M
+31 0 V
+5978 0 R
+-31 0 V
+938 1774 M
+31 0 V
+5978 0 R
+-31 0 V
+938 1875 M
+31 0 V
+5978 0 R
+-31 0 V
+stroke
+LTa
+938 1922 M
+6009 0 V
+stroke
+LTb
+938 1922 M
+63 0 V
+5946 0 R
+-63 0 V
+stroke
+854 1922 M
+[ [(Times-BoldItalic) 140.0 0.0 true true 0 ( 1e-06)]
+] -46.7 MRshow
+1.000 UL
+LTb
+938 2070 M
+31 0 V
+5978 0 R
+-31 0 V
+938 2266 M
+31 0 V
+5978 0 R
+-31 0 V
+938 2366 M
+31 0 V
+5978 0 R
+-31 0 V
+stroke
+LTa
+938 2414 M
+6009 0 V
+stroke
+LTb
+938 2414 M
+63 0 V
+5946 0 R
+-63 0 V
+stroke
+854 2414 M
+[ [(Times-BoldItalic) 140.0 0.0 true true 0 ( 1e-05)]
+] -46.7 MRshow
+1.000 UL
+LTb
+938 2562 M
+31 0 V
+5978 0 R
+-31 0 V
+938 2757 M
+31 0 V
+5978 0 R
+-31 0 V
+938 2858 M
+31 0 V
+5978 0 R
+-31 0 V
+stroke
+LTa
+938 2905 M
+6009 0 V
+stroke
+LTb
+938 2905 M
+63 0 V
+5946 0 R
+-63 0 V
+stroke
+854 2905 M
+[ [(Times-BoldItalic) 140.0 0.0 true true 0 ( 0.0001)]
+] -46.7 MRshow
+1.000 UL
+LTb
+938 3053 M
+31 0 V
+5978 0 R
+-31 0 V
+938 3249 M
+31 0 V
+5978 0 R
+-31 0 V
+938 3349 M
+31 0 V
+5978 0 R
+-31 0 V
+stroke
+LTa
+938 3397 M
+6009 0 V
+stroke
+LTb
+938 3397 M
+63 0 V
+5946 0 R
+-63 0 V
+stroke
+854 3397 M
+[ [(Times-BoldItalic) 140.0 0.0 true true 0 ( 0.001)]
+] -46.7 MRshow
+1.000 UL
+LTb
+938 3545 M
+31 0 V
+5978 0 R
+-31 0 V
+938 3740 M
+31 0 V
+5978 0 R
+-31 0 V
+938 3840 M
+31 0 V
+5978 0 R
+-31 0 V
+stroke
+LTa
+938 3888 M
+6009 0 V
+stroke
+LTb
+938 3888 M
+63 0 V
+5946 0 R
+-63 0 V
+stroke
+854 3888 M
+[ [(Times-BoldItalic) 140.0 0.0 true true 0 ( 0.01)]
+] -46.7 MRshow
+1.000 UL
+LTb
+938 4036 M
+31 0 V
+5978 0 R
+-31 0 V
+938 4232 M
+31 0 V
+5978 0 R
+-31 0 V
+938 4332 M
+31 0 V
+5978 0 R
+-31 0 V
+stroke
+LTa
+938 4380 M
+6009 0 V
+stroke
+LTb
+938 4380 M
+63 0 V
+5946 0 R
+-63 0 V
+stroke
+854 4380 M
+[ [(Times-BoldItalic) 140.0 0.0 true true 0 ( 0.1)]
+] -46.7 MRshow
+1.000 UL
+LTb
+938 4527 M
+31 0 V
+5978 0 R
+-31 0 V
+938 4723 M
+31 0 V
+5978 0 R
+-31 0 V
+938 4823 M
+31 0 V
+5978 0 R
+-31 0 V
+stroke
+LTa
+938 4871 M
+6009 0 V
+stroke
+LTb
+938 4871 M
+63 0 V
+5946 0 R
+-63 0 V
+stroke
+854 4871 M
+[ [(Times-BoldItalic) 140.0 0.0 true true 0 ( 1)]
+] -46.7 MRshow
+1.000 UL
+LTb
+1.000 UL
+LTa
+938 448 M
+0 4423 V
+stroke
+LTb
+938 448 M
+0 63 V
+0 4360 R
+0 -63 V
+stroke
+938 308 M
+[ [(Times-BoldItalic) 140.0 0.0 true true 0 (-10)]
+] -46.7 MCshow
+1.000 UL
+LTb
+1.000 UL
+LTa
+2140 448 M
+0 4423 V
+stroke
+LTb
+2140 448 M
+0 63 V
+0 4360 R
+0 -63 V
+stroke
+2140 308 M
+[ [(Times-BoldItalic) 140.0 0.0 true true 0 (-5)]
+] -46.7 MCshow
+1.000 UL
+LTb
+1.000 UL
+LTa
+3342 448 M
+0 4423 V
+stroke
+LTb
+3342 448 M
+0 63 V
+0 4360 R
+0 -63 V
+stroke
+3342 308 M
+[ [(Times-BoldItalic) 140.0 0.0 true true 0 ( 0)]
+] -46.7 MCshow
+1.000 UL
+LTb
+1.000 UL
+LTa
+4543 448 M
+0 4423 V
+stroke
+LTb
+4543 448 M
+0 63 V
+0 4360 R
+0 -63 V
+stroke
+4543 308 M
+[ [(Times-BoldItalic) 140.0 0.0 true true 0 ( 5)]
+] -46.7 MCshow
+1.000 UL
+LTb
+1.000 UL
+LTa
+5745 448 M
+0 4220 V
+0 140 R
+0 63 V
+stroke
+LTb
+5745 448 M
+0 63 V
+0 4360 R
+0 -63 V
+stroke
+5745 308 M
+[ [(Times-BoldItalic) 140.0 0.0 true true 0 ( 10)]
+] -46.7 MCshow
+1.000 UL
+LTb
+1.000 UL
+LTa
+6947 448 M
+0 4423 V
+stroke
+LTb
+6947 448 M
+0 63 V
+0 4360 R
+0 -63 V
+stroke
+6947 308 M
+[ [(Times-BoldItalic) 140.0 0.0 true true 0 ( 15)]
+] -46.7 MCshow
+1.000 UL
+LTb
+1.000 UL
+LTb
+938 4871 N
+938 448 L
+6009 0 V
+0 4423 V
+-6009 0 V
+Z stroke
+LCb setrgbcolor
+112 2659 M
+currentpoint gsave translate -270 rotate 0 0 moveto
+[ [(Times-BoldItalic) 140.0 0.0 true true 0 (Bit Error Rate \(BER\))]
+] -46.7 MCshow
+grestore
+LTb
+LCb setrgbcolor
+3942 98 M
+[ [(Times-BoldItalic) 140.0 0.0 true true 0 (SNR \(dB\))]
+] -46.7 MCshow
+LTb
+1.000 UP
+1.000 UL
+LTb
+% Begin plot #1
+5.000 UL
+LT0
+LCb setrgbcolor
+6296 4738 M
+[ [(Times-BoldItalic) 140.0 0.0 true true 0 (802.15.4)]
+] -46.7 MRshow
+LT0
+6380 4738 M
+399 0 V
+938 4629 M
+24 -3 V
+24 -2 V
+24 -3 V
+24 -3 V
+24 -3 V
+24 -3 V
+24 -4 V
+24 -3 V
+24 -3 V
+24 -4 V
+24 -3 V
+24 -4 V
+24 -4 V
+25 -4 V
+24 -4 V
+24 -4 V
+24 -5 V
+24 -4 V
+24 -5 V
+24 -5 V
+24 -5 V
+24 -5 V
+24 -5 V
+24 -6 V
+24 -5 V
+24 -6 V
+24 -6 V
+24 -6 V
+24 -6 V
+24 -7 V
+24 -6 V
+24 -7 V
+24 -7 V
+24 -8 V
+24 -7 V
+24 -8 V
+24 -8 V
+24 -8 V
+24 -9 V
+24 -9 V
+24 -9 V
+25 -9 V
+24 -10 V
+24 -9 V
+24 -11 V
+24 -10 V
+24 -11 V
+24 -11 V
+24 -12 V
+24 -11 V
+24 -13 V
+24 -12 V
+24 -13 V
+24 -13 V
+24 -14 V
+24 -14 V
+24 -14 V
+24 -15 V
+24 -16 V
+24 -16 V
+24 -16 V
+24 -17 V
+24 -17 V
+24 -17 V
+24 -19 V
+24 -18 V
+24 -20 V
+24 -20 V
+24 -20 V
+25 -21 V
+24 -22 V
+24 -22 V
+24 -23 V
+24 -23 V
+24 -24 V
+24 -25 V
+24 -26 V
+24 -26 V
+24 -27 V
+24 -28 V
+24 -28 V
+24 -29 V
+24 -30 V
+24 -31 V
+24 -32 V
+24 -32 V
+24 -34 V
+24 -34 V
+24 -35 V
+24 -37 V
+24 -37 V
+24 -38 V
+24 -39 V
+24 -40 V
+24 -42 V
+24 -42 V
+24 -43 V
+25 -45 V
+24 -46 V
+24 -46 V
+24 -49 V
+24 -49 V
+stroke 3390 2910 M
+24 -50 V
+24 -52 V
+24 -53 V
+24 -55 V
+24 -56 V
+24 -57 V
+24 -59 V
+24 -60 V
+24 -61 V
+24 -63 V
+24 -65 V
+24 -66 V
+24 -68 V
+24 -70 V
+24 -71 V
+24 -73 V
+24 -75 V
+24 -76 V
+24 -78 V
+24 -81 V
+24 -82 V
+24 -84 V
+25 -86 V
+24 -88 V
+24 -90 V
+24 -93 V
+24 -94 V
+24 -97 V
+24 -99 V
+24 -101 V
+24 -104 V
+24 -106 V
+11 -49 V
+% End plot #1
+stroke
+1.000 UL
+LTb
+938 4871 N
+938 448 L
+6009 0 V
+0 4423 V
+-6009 0 V
+Z stroke
+1.000 UP
+1.000 UL
+LTb
+stroke
+grestore
+end
+showpage
+%%Trailer
+%%DocumentFonts: Times-BoldItalic
diff -Naur ns-3.19/src/lr-wpan/doc/802-15-4-per-sens.eps ns-3.20/src/lr-wpan/doc/802-15-4-per-sens.eps
--- ns-3.19/src/lr-wpan/doc/802-15-4-per-sens.eps	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.20/src/lr-wpan/doc/802-15-4-per-sens.eps	2014-06-17 10:33:13.893995962 -0700
@@ -0,0 +1,3773 @@
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: 802.15.4-per-sens.eps
+%%Creator: gnuplot 4.6 patchlevel 4 (Gentoo revision r2)
+%%CreationDate: Wed Apr 23 12:42:53 2014
+%%DocumentFonts: (atend)
+%%BoundingBox: 50 50 410 302
+%%EndComments
+%%BeginProlog
+/gnudict 256 dict def
+gnudict begin
+%
+% The following true/false flags may be edited by hand if desired.
+% The unit line width and grayscale image gamma correction may also be changed.
+%
+/Color true def
+/Blacktext false def
+/Solid false def
+/Dashlength 1 def
+/Landscape false def
+/Level1 false def
+/Rounded false def
+/ClipToBoundingBox false def
+/SuppressPDFMark false def
+/TransparentPatterns false def
+/gnulinewidth 5.000 def
+/userlinewidth gnulinewidth def
+/Gamma 1.0 def
+/BackgroundColor {-1.000 -1.000 -1.000} def
+%
+/vshift -46 def
+/dl1 {
+  10.0 Dashlength mul mul
+  Rounded { currentlinewidth 0.75 mul sub dup 0 le { pop 0.01 } if } if
+} def
+/dl2 {
+  10.0 Dashlength mul mul
+  Rounded { currentlinewidth 0.75 mul add } if
+} def
+/hpt_ 31.5 def
+/vpt_ 31.5 def
+/hpt hpt_ def
+/vpt vpt_ def
+/doclip {
+  ClipToBoundingBox {
+    newpath 50 50 moveto 410 50 lineto 410 302 lineto 50 302 lineto closepath
+    clip
+  } if
+} def
+%
+% Gnuplot Prolog Version 4.6 (September 2012)
+%
+%/SuppressPDFMark true def
+%
+/M {moveto} bind def
+/L {lineto} bind def
+/R {rmoveto} bind def
+/V {rlineto} bind def
+/N {newpath moveto} bind def
+/Z {closepath} bind def
+/C {setrgbcolor} bind def
+/f {rlineto fill} bind def
+/g {setgray} bind def
+/Gshow {show} def   % May be redefined later in the file to support UTF-8
+/vpt2 vpt 2 mul def
+/hpt2 hpt 2 mul def
+/Lshow {currentpoint stroke M 0 vshift R 
+	Blacktext {gsave 0 setgray show grestore} {show} ifelse} def
+/Rshow {currentpoint stroke M dup stringwidth pop neg vshift R
+	Blacktext {gsave 0 setgray show grestore} {show} ifelse} def
+/Cshow {currentpoint stroke M dup stringwidth pop -2 div vshift R 
+	Blacktext {gsave 0 setgray show grestore} {show} ifelse} def
+/UP {dup vpt_ mul /vpt exch def hpt_ mul /hpt exch def
+  /hpt2 hpt 2 mul def /vpt2 vpt 2 mul def} def
+/DL {Color {setrgbcolor Solid {pop []} if 0 setdash}
+ {pop pop pop 0 setgray Solid {pop []} if 0 setdash} ifelse} def
+/BL {stroke userlinewidth 2 mul setlinewidth
+	Rounded {1 setlinejoin 1 setlinecap} if} def
+/AL {stroke userlinewidth 2 div setlinewidth
+	Rounded {1 setlinejoin 1 setlinecap} if} def
+/UL {dup gnulinewidth mul /userlinewidth exch def
+	dup 1 lt {pop 1} if 10 mul /udl exch def} def
+/PL {stroke userlinewidth setlinewidth
+	Rounded {1 setlinejoin 1 setlinecap} if} def
+3.8 setmiterlimit
+% Default Line colors
+/LCw {1 1 1} def
+/LCb {0 0 0} def
+/LCa {0 0 0} def
+/LC0 {1 0 0} def
+/LC1 {0 1 0} def
+/LC2 {0 0 1} def
+/LC3 {1 0 1} def
+/LC4 {0 1 1} def
+/LC5 {1 1 0} def
+/LC6 {0 0 0} def
+/LC7 {1 0.3 0} def
+/LC8 {0.5 0.5 0.5} def
+% Default Line Types
+/LTw {PL [] 1 setgray} def
+/LTb {BL [] LCb DL} def
+/LTa {AL [1 udl mul 2 udl mul] 0 setdash LCa setrgbcolor} def
+/LT0 {PL [] LC0 DL} def
+/LT1 {PL [4 dl1 2 dl2] LC1 DL} def
+/LT2 {PL [2 dl1 3 dl2] LC2 DL} def
+/LT3 {PL [1 dl1 1.5 dl2] LC3 DL} def
+/LT4 {PL [6 dl1 2 dl2 1 dl1 2 dl2] LC4 DL} def
+/LT5 {PL [3 dl1 3 dl2 1 dl1 3 dl2] LC5 DL} def
+/LT6 {PL [2 dl1 2 dl2 2 dl1 6 dl2] LC6 DL} def
+/LT7 {PL [1 dl1 2 dl2 6 dl1 2 dl2 1 dl1 2 dl2] LC7 DL} def
+/LT8 {PL [2 dl1 2 dl2 2 dl1 2 dl2 2 dl1 2 dl2 2 dl1 4 dl2] LC8 DL} def
+/Pnt {stroke [] 0 setdash gsave 1 setlinecap M 0 0 V stroke grestore} def
+/Dia {stroke [] 0 setdash 2 copy vpt add M
+  hpt neg vpt neg V hpt vpt neg V
+  hpt vpt V hpt neg vpt V closepath stroke
+  Pnt} def
+/Pls {stroke [] 0 setdash vpt sub M 0 vpt2 V
+  currentpoint stroke M
+  hpt neg vpt neg R hpt2 0 V stroke
+ } def
+/Box {stroke [] 0 setdash 2 copy exch hpt sub exch vpt add M
+  0 vpt2 neg V hpt2 0 V 0 vpt2 V
+  hpt2 neg 0 V closepath stroke
+  Pnt} def
+/Crs {stroke [] 0 setdash exch hpt sub exch vpt add M
+  hpt2 vpt2 neg V currentpoint stroke M
+  hpt2 neg 0 R hpt2 vpt2 V stroke} def
+/TriU {stroke [] 0 setdash 2 copy vpt 1.12 mul add M
+  hpt neg vpt -1.62 mul V
+  hpt 2 mul 0 V
+  hpt neg vpt 1.62 mul V closepath stroke
+  Pnt} def
+/Star {2 copy Pls Crs} def
+/BoxF {stroke [] 0 setdash exch hpt sub exch vpt add M
+  0 vpt2 neg V hpt2 0 V 0 vpt2 V
+  hpt2 neg 0 V closepath fill} def
+/TriUF {stroke [] 0 setdash vpt 1.12 mul add M
+  hpt neg vpt -1.62 mul V
+  hpt 2 mul 0 V
+  hpt neg vpt 1.62 mul V closepath fill} def
+/TriD {stroke [] 0 setdash 2 copy vpt 1.12 mul sub M
+  hpt neg vpt 1.62 mul V
+  hpt 2 mul 0 V
+  hpt neg vpt -1.62 mul V closepath stroke
+  Pnt} def
+/TriDF {stroke [] 0 setdash vpt 1.12 mul sub M
+  hpt neg vpt 1.62 mul V
+  hpt 2 mul 0 V
+  hpt neg vpt -1.62 mul V closepath fill} def
+/DiaF {stroke [] 0 setdash vpt add M
+  hpt neg vpt neg V hpt vpt neg V
+  hpt vpt V hpt neg vpt V closepath fill} def
+/Pent {stroke [] 0 setdash 2 copy gsave
+  translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+  closepath stroke grestore Pnt} def
+/PentF {stroke [] 0 setdash gsave
+  translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+  closepath fill grestore} def
+/Circle {stroke [] 0 setdash 2 copy
+  hpt 0 360 arc stroke Pnt} def
+/CircleF {stroke [] 0 setdash hpt 0 360 arc fill} def
+/C0 {BL [] 0 setdash 2 copy moveto vpt 90 450 arc} bind def
+/C1 {BL [] 0 setdash 2 copy moveto
+	2 copy vpt 0 90 arc closepath fill
+	vpt 0 360 arc closepath} bind def
+/C2 {BL [] 0 setdash 2 copy moveto
+	2 copy vpt 90 180 arc closepath fill
+	vpt 0 360 arc closepath} bind def
+/C3 {BL [] 0 setdash 2 copy moveto
+	2 copy vpt 0 180 arc closepath fill
+	vpt 0 360 arc closepath} bind def
+/C4 {BL [] 0 setdash 2 copy moveto
+	2 copy vpt 180 270 arc closepath fill
+	vpt 0 360 arc closepath} bind def
+/C5 {BL [] 0 setdash 2 copy moveto
+	2 copy vpt 0 90 arc
+	2 copy moveto
+	2 copy vpt 180 270 arc closepath fill
+	vpt 0 360 arc} bind def
+/C6 {BL [] 0 setdash 2 copy moveto
+	2 copy vpt 90 270 arc closepath fill
+	vpt 0 360 arc closepath} bind def
+/C7 {BL [] 0 setdash 2 copy moveto
+	2 copy vpt 0 270 arc closepath fill
+	vpt 0 360 arc closepath} bind def
+/C8 {BL [] 0 setdash 2 copy moveto
+	2 copy vpt 270 360 arc closepath fill
+	vpt 0 360 arc closepath} bind def
+/C9 {BL [] 0 setdash 2 copy moveto
+	2 copy vpt 270 450 arc closepath fill
+	vpt 0 360 arc closepath} bind def
+/C10 {BL [] 0 setdash 2 copy 2 copy moveto vpt 270 360 arc closepath fill
+	2 copy moveto
+	2 copy vpt 90 180 arc closepath fill
+	vpt 0 360 arc closepath} bind def
+/C11 {BL [] 0 setdash 2 copy moveto
+	2 copy vpt 0 180 arc closepath fill
+	2 copy moveto
+	2 copy vpt 270 360 arc closepath fill
+	vpt 0 360 arc closepath} bind def
+/C12 {BL [] 0 setdash 2 copy moveto
+	2 copy vpt 180 360 arc closepath fill
+	vpt 0 360 arc closepath} bind def
+/C13 {BL [] 0 setdash 2 copy moveto
+	2 copy vpt 0 90 arc closepath fill
+	2 copy moveto
+	2 copy vpt 180 360 arc closepath fill
+	vpt 0 360 arc closepath} bind def
+/C14 {BL [] 0 setdash 2 copy moveto
+	2 copy vpt 90 360 arc closepath fill
+	vpt 0 360 arc} bind def
+/C15 {BL [] 0 setdash 2 copy vpt 0 360 arc closepath fill
+	vpt 0 360 arc closepath} bind def
+/Rec {newpath 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto
+	neg 0 rlineto closepath} bind def
+/Square {dup Rec} bind def
+/Bsquare {vpt sub exch vpt sub exch vpt2 Square} bind def
+/S0 {BL [] 0 setdash 2 copy moveto 0 vpt rlineto BL Bsquare} bind def
+/S1 {BL [] 0 setdash 2 copy vpt Square fill Bsquare} bind def
+/S2 {BL [] 0 setdash 2 copy exch vpt sub exch vpt Square fill Bsquare} bind def
+/S3 {BL [] 0 setdash 2 copy exch vpt sub exch vpt2 vpt Rec fill Bsquare} bind def
+/S4 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt Square fill Bsquare} bind def
+/S5 {BL [] 0 setdash 2 copy 2 copy vpt Square fill
+	exch vpt sub exch vpt sub vpt Square fill Bsquare} bind def
+/S6 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill Bsquare} bind def
+/S7 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill
+	2 copy vpt Square fill Bsquare} bind def
+/S8 {BL [] 0 setdash 2 copy vpt sub vpt Square fill Bsquare} bind def
+/S9 {BL [] 0 setdash 2 copy vpt sub vpt vpt2 Rec fill Bsquare} bind def
+/S10 {BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt Square fill
+	Bsquare} bind def
+/S11 {BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt2 vpt Rec fill
+	Bsquare} bind def
+/S12 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill Bsquare} bind def
+/S13 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill
+	2 copy vpt Square fill Bsquare} bind def
+/S14 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill
+	2 copy exch vpt sub exch vpt Square fill Bsquare} bind def
+/S15 {BL [] 0 setdash 2 copy Bsquare fill Bsquare} bind def
+/D0 {gsave translate 45 rotate 0 0 S0 stroke grestore} bind def
+/D1 {gsave translate 45 rotate 0 0 S1 stroke grestore} bind def
+/D2 {gsave translate 45 rotate 0 0 S2 stroke grestore} bind def
+/D3 {gsave translate 45 rotate 0 0 S3 stroke grestore} bind def
+/D4 {gsave translate 45 rotate 0 0 S4 stroke grestore} bind def
+/D5 {gsave translate 45 rotate 0 0 S5 stroke grestore} bind def
+/D6 {gsave translate 45 rotate 0 0 S6 stroke grestore} bind def
+/D7 {gsave translate 45 rotate 0 0 S7 stroke grestore} bind def
+/D8 {gsave translate 45 rotate 0 0 S8 stroke grestore} bind def
+/D9 {gsave translate 45 rotate 0 0 S9 stroke grestore} bind def
+/D10 {gsave translate 45 rotate 0 0 S10 stroke grestore} bind def
+/D11 {gsave translate 45 rotate 0 0 S11 stroke grestore} bind def
+/D12 {gsave translate 45 rotate 0 0 S12 stroke grestore} bind def
+/D13 {gsave translate 45 rotate 0 0 S13 stroke grestore} bind def
+/D14 {gsave translate 45 rotate 0 0 S14 stroke grestore} bind def
+/D15 {gsave translate 45 rotate 0 0 S15 stroke grestore} bind def
+/DiaE {stroke [] 0 setdash vpt add M
+  hpt neg vpt neg V hpt vpt neg V
+  hpt vpt V hpt neg vpt V closepath stroke} def
+/BoxE {stroke [] 0 setdash exch hpt sub exch vpt add M
+  0 vpt2 neg V hpt2 0 V 0 vpt2 V
+  hpt2 neg 0 V closepath stroke} def
+/TriUE {stroke [] 0 setdash vpt 1.12 mul add M
+  hpt neg vpt -1.62 mul V
+  hpt 2 mul 0 V
+  hpt neg vpt 1.62 mul V closepath stroke} def
+/TriDE {stroke [] 0 setdash vpt 1.12 mul sub M
+  hpt neg vpt 1.62 mul V
+  hpt 2 mul 0 V
+  hpt neg vpt -1.62 mul V closepath stroke} def
+/PentE {stroke [] 0 setdash gsave
+  translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+  closepath stroke grestore} def
+/CircE {stroke [] 0 setdash 
+  hpt 0 360 arc stroke} def
+/Opaque {gsave closepath 1 setgray fill grestore 0 setgray closepath} def
+/DiaW {stroke [] 0 setdash vpt add M
+  hpt neg vpt neg V hpt vpt neg V
+  hpt vpt V hpt neg vpt V Opaque stroke} def
+/BoxW {stroke [] 0 setdash exch hpt sub exch vpt add M
+  0 vpt2 neg V hpt2 0 V 0 vpt2 V
+  hpt2 neg 0 V Opaque stroke} def
+/TriUW {stroke [] 0 setdash vpt 1.12 mul add M
+  hpt neg vpt -1.62 mul V
+  hpt 2 mul 0 V
+  hpt neg vpt 1.62 mul V Opaque stroke} def
+/TriDW {stroke [] 0 setdash vpt 1.12 mul sub M
+  hpt neg vpt 1.62 mul V
+  hpt 2 mul 0 V
+  hpt neg vpt -1.62 mul V Opaque stroke} def
+/PentW {stroke [] 0 setdash gsave
+  translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+  Opaque stroke grestore} def
+/CircW {stroke [] 0 setdash 
+  hpt 0 360 arc Opaque stroke} def
+/BoxFill {gsave Rec 1 setgray fill grestore} def
+/Density {
+  /Fillden exch def
+  currentrgbcolor
+  /ColB exch def /ColG exch def /ColR exch def
+  /ColR ColR Fillden mul Fillden sub 1 add def
+  /ColG ColG Fillden mul Fillden sub 1 add def
+  /ColB ColB Fillden mul Fillden sub 1 add def
+  ColR ColG ColB setrgbcolor} def
+/BoxColFill {gsave Rec PolyFill} def
+/PolyFill {gsave Density fill grestore grestore} def
+/h {rlineto rlineto rlineto gsave closepath fill grestore} bind def
+%
+% PostScript Level 1 Pattern Fill routine for rectangles
+% Usage: x y w h s a XX PatternFill
+%	x,y = lower left corner of box to be filled
+%	w,h = width and height of box
+%	  a = angle in degrees between lines and x-axis
+%	 XX = 0/1 for no/yes cross-hatch
+%
+/PatternFill {gsave /PFa [ 9 2 roll ] def
+  PFa 0 get PFa 2 get 2 div add PFa 1 get PFa 3 get 2 div add translate
+  PFa 2 get -2 div PFa 3 get -2 div PFa 2 get PFa 3 get Rec
+  TransparentPatterns {} {gsave 1 setgray fill grestore} ifelse
+  clip
+  currentlinewidth 0.5 mul setlinewidth
+  /PFs PFa 2 get dup mul PFa 3 get dup mul add sqrt def
+  0 0 M PFa 5 get rotate PFs -2 div dup translate
+  0 1 PFs PFa 4 get div 1 add floor cvi
+	{PFa 4 get mul 0 M 0 PFs V} for
+  0 PFa 6 get ne {
+	0 1 PFs PFa 4 get div 1 add floor cvi
+	{PFa 4 get mul 0 2 1 roll M PFs 0 V} for
+ } if
+  stroke grestore} def
+%
+/languagelevel where
+ {pop languagelevel} {1} ifelse
+ 2 lt
+	{/InterpretLevel1 true def}
+	{/InterpretLevel1 Level1 def}
+ ifelse
+%
+% PostScript level 2 pattern fill definitions
+%
+/Level2PatternFill {
+/Tile8x8 {/PaintType 2 /PatternType 1 /TilingType 1 /BBox [0 0 8 8] /XStep 8 /YStep 8}
+	bind def
+/KeepColor {currentrgbcolor [/Pattern /DeviceRGB] setcolorspace} bind def
+<< Tile8x8
+ /PaintProc {0.5 setlinewidth pop 0 0 M 8 8 L 0 8 M 8 0 L stroke} 
+>> matrix makepattern
+/Pat1 exch def
+<< Tile8x8
+ /PaintProc {0.5 setlinewidth pop 0 0 M 8 8 L 0 8 M 8 0 L stroke
+	0 4 M 4 8 L 8 4 L 4 0 L 0 4 L stroke}
+>> matrix makepattern
+/Pat2 exch def
+<< Tile8x8
+ /PaintProc {0.5 setlinewidth pop 0 0 M 0 8 L
+	8 8 L 8 0 L 0 0 L fill}
+>> matrix makepattern
+/Pat3 exch def
+<< Tile8x8
+ /PaintProc {0.5 setlinewidth pop -4 8 M 8 -4 L
+	0 12 M 12 0 L stroke}
+>> matrix makepattern
+/Pat4 exch def
+<< Tile8x8
+ /PaintProc {0.5 setlinewidth pop -4 0 M 8 12 L
+	0 -4 M 12 8 L stroke}
+>> matrix makepattern
+/Pat5 exch def
+<< Tile8x8
+ /PaintProc {0.5 setlinewidth pop -2 8 M 4 -4 L
+	0 12 M 8 -4 L 4 12 M 10 0 L stroke}
+>> matrix makepattern
+/Pat6 exch def
+<< Tile8x8
+ /PaintProc {0.5 setlinewidth pop -2 0 M 4 12 L
+	0 -4 M 8 12 L 4 -4 M 10 8 L stroke}
+>> matrix makepattern
+/Pat7 exch def
+<< Tile8x8
+ /PaintProc {0.5 setlinewidth pop 8 -2 M -4 4 L
+	12 0 M -4 8 L 12 4 M 0 10 L stroke}
+>> matrix makepattern
+/Pat8 exch def
+<< Tile8x8
+ /PaintProc {0.5 setlinewidth pop 0 -2 M 12 4 L
+	-4 0 M 12 8 L -4 4 M 8 10 L stroke}
+>> matrix makepattern
+/Pat9 exch def
+/Pattern1 {PatternBgnd KeepColor Pat1 setpattern} bind def
+/Pattern2 {PatternBgnd KeepColor Pat2 setpattern} bind def
+/Pattern3 {PatternBgnd KeepColor Pat3 setpattern} bind def
+/Pattern4 {PatternBgnd KeepColor Landscape {Pat5} {Pat4} ifelse setpattern} bind def
+/Pattern5 {PatternBgnd KeepColor Landscape {Pat4} {Pat5} ifelse setpattern} bind def
+/Pattern6 {PatternBgnd KeepColor Landscape {Pat9} {Pat6} ifelse setpattern} bind def
+/Pattern7 {PatternBgnd KeepColor Landscape {Pat8} {Pat7} ifelse setpattern} bind def
+} def
+%
+%
+%End of PostScript Level 2 code
+%
+/PatternBgnd {
+  TransparentPatterns {} {gsave 1 setgray fill grestore} ifelse
+} def
+%
+% Substitute for Level 2 pattern fill codes with
+% grayscale if Level 2 support is not selected.
+%
+/Level1PatternFill {
+/Pattern1 {0.250 Density} bind def
+/Pattern2 {0.500 Density} bind def
+/Pattern3 {0.750 Density} bind def
+/Pattern4 {0.125 Density} bind def
+/Pattern5 {0.375 Density} bind def
+/Pattern6 {0.625 Density} bind def
+/Pattern7 {0.875 Density} bind def
+} def
+%
+% Now test for support of Level 2 code
+%
+Level1 {Level1PatternFill} {Level2PatternFill} ifelse
+%
+/Symbol-Oblique /Symbol findfont [1 0 .167 1 0 0] makefont
+dup length dict begin {1 index /FID eq {pop pop} {def} ifelse} forall
+currentdict end definefont pop
+/MFshow {
+   { dup 5 get 3 ge
+     { 5 get 3 eq {gsave} {grestore} ifelse }
+     {dup dup 0 get findfont exch 1 get scalefont setfont
+     [ currentpoint ] exch dup 2 get 0 exch R dup 5 get 2 ne {dup dup 6
+     get exch 4 get {Gshow} {stringwidth pop 0 R} ifelse }if dup 5 get 0 eq
+     {dup 3 get {2 get neg 0 exch R pop} {pop aload pop M} ifelse} {dup 5
+     get 1 eq {dup 2 get exch dup 3 get exch 6 get stringwidth pop -2 div
+     dup 0 R} {dup 6 get stringwidth pop -2 div 0 R 6 get
+     show 2 index {aload pop M neg 3 -1 roll neg R pop pop} {pop pop pop
+     pop aload pop M} ifelse }ifelse }ifelse }
+     ifelse }
+   forall} def
+/Gswidth {dup type /stringtype eq {stringwidth} {pop (n) stringwidth} ifelse} def
+/MFwidth {0 exch { dup 5 get 3 ge { 5 get 3 eq { 0 } { pop } ifelse }
+ {dup 3 get{dup dup 0 get findfont exch 1 get scalefont setfont
+     6 get Gswidth pop add} {pop} ifelse} ifelse} forall} def
+/MLshow { currentpoint stroke M
+  0 exch R
+  Blacktext {gsave 0 setgray MFshow grestore} {MFshow} ifelse } bind def
+/MRshow { currentpoint stroke M
+  exch dup MFwidth neg 3 -1 roll R
+  Blacktext {gsave 0 setgray MFshow grestore} {MFshow} ifelse } bind def
+/MCshow { currentpoint stroke M
+  exch dup MFwidth -2 div 3 -1 roll R
+  Blacktext {gsave 0 setgray MFshow grestore} {MFshow} ifelse } bind def
+/XYsave    { [( ) 1 2 true false 3 ()] } bind def
+/XYrestore { [( ) 1 2 true false 4 ()] } bind def
+Level1 SuppressPDFMark or 
+{} {
+/SDict 10 dict def
+systemdict /pdfmark known not {
+  userdict /pdfmark systemdict /cleartomark get put
+} if
+SDict begin [
+  /Title (802.15.4-per-sens.eps)
+  /Subject (gnuplot plot)
+  /Creator (gnuplot 4.6 patchlevel 4 (Gentoo revision r2))
+  /Author (jopen)
+%  /Producer (gnuplot)
+%  /Keywords ()
+  /CreationDate (Wed Apr 23 12:42:53 2014)
+  /DOCINFO pdfmark
+end
+} ifelse
+end
+%%EndProlog
+%%Page: 1 1
+gnudict begin
+gsave
+doclip
+50 50 translate
+0.050 0.050 scale
+0 setgray
+newpath
+(Times-BoldItalic) findfont 140 scalefont setfont
+BackgroundColor 0 lt 3 1 roll 0 lt exch 0 lt or or not {BackgroundColor C 1.000 0 0 7200.00 5040.00 BoxColFill} if
+1.000 UL
+LTb
+LCb setrgbcolor
+1.000 UL
+LTa
+LCa setrgbcolor
+938 448 M
+6009 0 V
+stroke
+LTb
+LCb setrgbcolor
+938 448 M
+63 0 V
+5946 0 R
+-63 0 V
+stroke
+854 448 M
+[ [(Times-BoldItalic) 140.0 0.0 true true 0 ( 1e-12)]
+] -46.7 MRshow
+1.000 UL
+LTb
+LCb setrgbcolor
+938 764 M
+31 0 V
+5978 0 R
+-31 0 V
+stroke
+LTa
+LCa setrgbcolor
+938 1080 M
+6009 0 V
+stroke
+LTb
+LCb setrgbcolor
+938 1080 M
+63 0 V
+5946 0 R
+-63 0 V
+stroke
+854 1080 M
+[ [(Times-BoldItalic) 140.0 0.0 true true 0 ( 1e-10)]
+] -46.7 MRshow
+1.000 UL
+LTb
+LCb setrgbcolor
+938 1396 M
+31 0 V
+5978 0 R
+-31 0 V
+stroke
+LTa
+LCa setrgbcolor
+938 1712 M
+6009 0 V
+stroke
+LTb
+LCb setrgbcolor
+938 1712 M
+63 0 V
+5946 0 R
+-63 0 V
+stroke
+854 1712 M
+[ [(Times-BoldItalic) 140.0 0.0 true true 0 ( 1e-08)]
+] -46.7 MRshow
+1.000 UL
+LTb
+LCb setrgbcolor
+938 2028 M
+31 0 V
+5978 0 R
+-31 0 V
+stroke
+LTa
+LCa setrgbcolor
+938 2344 M
+6009 0 V
+stroke
+LTb
+LCb setrgbcolor
+938 2344 M
+63 0 V
+5946 0 R
+-63 0 V
+stroke
+854 2344 M
+[ [(Times-BoldItalic) 140.0 0.0 true true 0 ( 1e-06)]
+] -46.7 MRshow
+1.000 UL
+LTb
+LCb setrgbcolor
+938 2660 M
+31 0 V
+5978 0 R
+-31 0 V
+stroke
+LTa
+LCa setrgbcolor
+938 2975 M
+6009 0 V
+stroke
+LTb
+LCb setrgbcolor
+938 2975 M
+63 0 V
+5946 0 R
+-63 0 V
+stroke
+854 2975 M
+[ [(Times-BoldItalic) 140.0 0.0 true true 0 ( 0.0001)]
+] -46.7 MRshow
+1.000 UL
+LTb
+LCb setrgbcolor
+938 3291 M
+31 0 V
+5978 0 R
+-31 0 V
+stroke
+LTa
+LCa setrgbcolor
+938 3607 M
+6009 0 V
+stroke
+LTb
+LCb setrgbcolor
+938 3607 M
+63 0 V
+5946 0 R
+-63 0 V
+stroke
+854 3607 M
+[ [(Times-BoldItalic) 140.0 0.0 true true 0 ( 0.01)]
+] -46.7 MRshow
+1.000 UL
+LTb
+LCb setrgbcolor
+938 3923 M
+31 0 V
+5978 0 R
+-31 0 V
+stroke
+LTa
+LCa setrgbcolor
+938 4239 M
+6009 0 V
+stroke
+LTb
+LCb setrgbcolor
+938 4239 M
+63 0 V
+5946 0 R
+-63 0 V
+stroke
+854 4239 M
+[ [(Times-BoldItalic) 140.0 0.0 true true 0 ( 1)]
+] -46.7 MRshow
+1.000 UL
+LTb
+LCb setrgbcolor
+938 4555 M
+31 0 V
+5978 0 R
+-31 0 V
+stroke
+LTa
+LCa setrgbcolor
+938 4871 M
+6009 0 V
+stroke
+LTb
+LCb setrgbcolor
+938 4871 M
+63 0 V
+5946 0 R
+-63 0 V
+stroke
+854 4871 M
+[ [(Times-BoldItalic) 140.0 0.0 true true 0 ( 100)]
+] -46.7 MRshow
+1.000 UL
+LTb
+LCb setrgbcolor
+1.000 UL
+LTa
+LCa setrgbcolor
+938 448 M
+0 4423 V
+stroke
+LTb
+LCb setrgbcolor
+938 448 M
+0 63 V
+0 4360 R
+0 -63 V
+stroke
+938 308 M
+[ [(Times-BoldItalic) 140.0 0.0 true true 0 (-130)]
+] -46.7 MCshow
+1.000 UL
+LTb
+LCb setrgbcolor
+1.000 UL
+LTa
+LCa setrgbcolor
+1940 448 M
+0 4423 V
+stroke
+LTb
+LCb setrgbcolor
+1940 448 M
+0 63 V
+0 4360 R
+0 -63 V
+stroke
+1940 308 M
+[ [(Times-BoldItalic) 140.0 0.0 true true 0 (-125)]
+] -46.7 MCshow
+1.000 UL
+LTb
+LCb setrgbcolor
+1.000 UL
+LTa
+LCa setrgbcolor
+2941 448 M
+0 4423 V
+stroke
+LTb
+LCb setrgbcolor
+2941 448 M
+0 63 V
+0 4360 R
+0 -63 V
+stroke
+2941 308 M
+[ [(Times-BoldItalic) 140.0 0.0 true true 0 (-120)]
+] -46.7 MCshow
+1.000 UL
+LTb
+LCb setrgbcolor
+1.000 UL
+LTa
+LCa setrgbcolor
+3943 448 M
+0 4423 V
+stroke
+LTb
+LCb setrgbcolor
+3943 448 M
+0 63 V
+0 4360 R
+0 -63 V
+stroke
+3943 308 M
+[ [(Times-BoldItalic) 140.0 0.0 true true 0 (-115)]
+] -46.7 MCshow
+1.000 UL
+LTb
+LCb setrgbcolor
+1.000 UL
+LTa
+LCa setrgbcolor
+4944 448 M
+0 4423 V
+stroke
+LTb
+LCb setrgbcolor
+4944 448 M
+0 63 V
+0 4360 R
+0 -63 V
+stroke
+4944 308 M
+[ [(Times-BoldItalic) 140.0 0.0 true true 0 (-110)]
+] -46.7 MCshow
+1.000 UL
+LTb
+LCb setrgbcolor
+1.000 UL
+LTa
+LCa setrgbcolor
+5946 448 M
+0 4220 V
+0 140 R
+0 63 V
+stroke
+LTb
+LCb setrgbcolor
+5946 448 M
+0 63 V
+0 4360 R
+0 -63 V
+stroke
+5946 308 M
+[ [(Times-BoldItalic) 140.0 0.0 true true 0 (-105)]
+] -46.7 MCshow
+1.000 UL
+LTb
+LCb setrgbcolor
+1.000 UL
+LTa
+LCa setrgbcolor
+6947 448 M
+0 4423 V
+stroke
+LTb
+LCb setrgbcolor
+6947 448 M
+0 63 V
+0 4360 R
+0 -63 V
+stroke
+6947 308 M
+[ [(Times-BoldItalic) 140.0 0.0 true true 0 (-100)]
+] -46.7 MCshow
+1.000 UL
+LTb
+LCb setrgbcolor
+1.000 UL
+LTb
+LCb setrgbcolor
+938 4871 N
+938 448 L
+6009 0 V
+0 4423 V
+-6009 0 V
+Z stroke
+LCb setrgbcolor
+112 2659 M
+currentpoint gsave translate -270 rotate 0 0 moveto
+[ [(Times-BoldItalic) 140.0 0.0 true true 0 (Packet Error Rate \(PER\))]
+] -46.7 MCshow
+grestore
+LTb
+LCb setrgbcolor
+3942 98 M
+[ [(Times-BoldItalic) 140.0 0.0 true true 0 (RxPower \(dBm\))]
+] -46.7 MCshow
+LTb
+1.000 UP
+1.000 UL
+LTb
+LCb setrgbcolor
+% Begin plot #1
+5.000 UL
+LT0
+LC0 setrgbcolor
+LCb setrgbcolor
+6296 4738 M
+[ [(Times-BoldItalic) 140.0 0.0 true true 0 (802.15.4)]
+] -46.7 MRshow
+LT0
+6380 4738 M
+399 0 V
+938 4871 M
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+stroke 1142 4871 M
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+3 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+stroke 1351 4871 M
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+stroke 1559 4871 M
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+stroke 1767 4871 M
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+3 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+stroke 1976 4871 M
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+stroke 2184 4871 M
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+stroke 2392 4871 M
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+stroke 2600 4871 M
+2 0 V
+2 0 V
+2 0 V
+3 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+stroke 2809 4871 M
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+stroke 3017 4871 M
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+stroke 3225 4871 M
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+3 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+stroke 3434 4871 M
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+stroke 3642 4871 M
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+stroke 3850 4871 M
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+3 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+stroke 4059 4871 M
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+stroke 4267 4871 M
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+stroke 4475 4871 M
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+3 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+stroke 4684 4871 M
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+stroke 4892 4871 M
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+stroke 5100 4871 M
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 -1 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 -1 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 -1 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 -1 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 -1 V
+2 0 V
+2 0 V
+2 0 V
+2 -1 V
+2 0 V
+2 0 V
+2 0 V
+2 -1 V
+2 0 V
+2 0 V
+2 -1 V
+2 0 V
+2 0 V
+2 -1 V
+2 0 V
+2 0 V
+2 -1 V
+2 0 V
+2 -1 V
+2 0 V
+2 -1 V
+2 0 V
+2 -1 V
+2 0 V
+2 -1 V
+2 0 V
+2 -1 V
+2 0 V
+2 -1 V
+2 0 V
+2 -1 V
+2 -1 V
+2 0 V
+3 -1 V
+2 0 V
+2 -1 V
+2 -1 V
+2 -1 V
+2 0 V
+2 -1 V
+2 -1 V
+2 -1 V
+2 0 V
+2 -1 V
+2 -1 V
+2 -1 V
+2 -1 V
+2 -1 V
+2 0 V
+stroke 5309 4841 M
+2 -1 V
+2 -1 V
+2 -1 V
+2 -1 V
+2 -1 V
+2 -1 V
+2 -1 V
+2 -1 V
+2 -1 V
+2 -1 V
+2 -1 V
+2 -1 V
+2 -2 V
+2 -1 V
+2 -1 V
+2 -1 V
+2 -1 V
+2 -1 V
+2 -2 V
+2 -1 V
+2 -1 V
+2 -1 V
+2 -2 V
+2 -1 V
+2 -1 V
+2 -2 V
+2 -1 V
+2 -2 V
+2 -1 V
+2 -1 V
+2 -2 V
+2 -1 V
+2 -2 V
+2 -1 V
+2 -2 V
+2 -1 V
+2 -2 V
+2 -1 V
+2 -2 V
+2 -2 V
+2 -1 V
+2 -2 V
+2 -2 V
+2 -1 V
+2 -2 V
+2 -2 V
+2 -1 V
+2 -2 V
+2 -2 V
+2 -2 V
+2 -1 V
+2 -2 V
+2 -2 V
+2 -2 V
+2 -2 V
+2 -2 V
+2 -2 V
+2 -2 V
+2 -1 V
+2 -2 V
+2 -2 V
+2 -2 V
+2 -2 V
+2 -2 V
+2 -2 V
+2 -2 V
+2 -3 V
+2 -2 V
+2 -2 V
+2 -2 V
+2 -2 V
+2 -2 V
+2 -2 V
+2 -2 V
+2 -3 V
+2 -2 V
+2 -2 V
+2 -2 V
+2 -3 V
+2 -2 V
+2 -2 V
+2 -2 V
+2 -3 V
+2 -2 V
+2 -2 V
+2 -3 V
+2 -2 V
+2 -2 V
+2 -3 V
+2 -2 V
+2 -3 V
+2 -2 V
+2 -3 V
+2 -2 V
+2 -3 V
+2 -2 V
+2 -3 V
+2 -2 V
+2 -3 V
+2 -2 V
+2 -3 V
+2 -2 V
+2 -3 V
+2 -2 V
+stroke 5517 4654 M
+2 -3 V
+2 -3 V
+2 -2 V
+2 -3 V
+2 -3 V
+2 -2 V
+2 -3 V
+2 -3 V
+2 -2 V
+2 -3 V
+2 -3 V
+2 -3 V
+2 -3 V
+2 -2 V
+2 -3 V
+2 -3 V
+2 -3 V
+2 -3 V
+2 -2 V
+2 -3 V
+2 -3 V
+2 -3 V
+2 -3 V
+2 -3 V
+2 -3 V
+2 -3 V
+2 -3 V
+2 -3 V
+2 -3 V
+2 -3 V
+2 -3 V
+2 -3 V
+2 -3 V
+2 -3 V
+2 -3 V
+2 -3 V
+2 -3 V
+2 -3 V
+2 -3 V
+2 -3 V
+2 -3 V
+2 -3 V
+2 -3 V
+2 -3 V
+2 -4 V
+2 -3 V
+2 -3 V
+2 -3 V
+2 -3 V
+2 -3 V
+2 -4 V
+2 -3 V
+2 -3 V
+2 -3 V
+2 -4 V
+2 -3 V
+2 -3 V
+2 -3 V
+2 -4 V
+2 -3 V
+2 -3 V
+2 -4 V
+2 -3 V
+2 -3 V
+2 -4 V
+2 -3 V
+2 -4 V
+2 -3 V
+2 -3 V
+2 -4 V
+2 -3 V
+2 -4 V
+2 -3 V
+2 -4 V
+2 -3 V
+2 -4 V
+2 -3 V
+2 -3 V
+2 -4 V
+2 -4 V
+2 -3 V
+2 -4 V
+2 -3 V
+2 -4 V
+2 -3 V
+2 -4 V
+2 -3 V
+2 -4 V
+2 -4 V
+2 -3 V
+2 -4 V
+2 -4 V
+2 -3 V
+2 -4 V
+2 -4 V
+2 -3 V
+2 -4 V
+2 -4 V
+2 -3 V
+2 -4 V
+2 -4 V
+2 -4 V
+2 -3 V
+2 -4 V
+stroke 5725 4319 M
+2 -4 V
+2 -4 V
+2 -3 V
+2 -4 V
+2 -4 V
+2 -4 V
+2 -4 V
+2 -4 V
+2 -3 V
+2 -4 V
+2 -4 V
+2 -4 V
+2 -4 V
+2 -4 V
+2 -4 V
+2 -4 V
+2 -4 V
+2 -4 V
+2 -4 V
+2 -4 V
+2 -4 V
+2 -4 V
+2 -4 V
+2 -4 V
+2 -4 V
+2 -4 V
+2 -4 V
+2 -4 V
+2 -4 V
+2 -4 V
+2 -4 V
+2 -4 V
+2 -4 V
+2 -4 V
+2 -4 V
+2 -4 V
+2 -5 V
+2 -4 V
+2 -4 V
+2 -4 V
+2 -4 V
+2 -5 V
+2 -4 V
+2 -4 V
+2 -4 V
+2 -4 V
+2 -5 V
+2 -4 V
+2 -4 V
+2 -4 V
+2 -5 V
+2 -4 V
+2 -4 V
+2 -5 V
+2 -4 V
+2 -4 V
+2 -5 V
+2 -4 V
+2 -5 V
+2 -4 V
+2 -4 V
+2 -5 V
+2 -4 V
+2 -5 V
+2 -4 V
+2 -4 V
+2 -5 V
+2 -4 V
+2 -5 V
+2 -4 V
+2 -5 V
+2 -4 V
+2 -5 V
+2 -4 V
+2 -5 V
+2 -5 V
+2 -4 V
+2 -5 V
+2 -4 V
+2 -5 V
+2 -5 V
+2 -4 V
+2 -5 V
+2 -5 V
+2 -4 V
+2 -5 V
+2 -5 V
+2 -4 V
+2 -5 V
+2 -5 V
+2 -4 V
+2 -5 V
+2 -5 V
+2 -5 V
+2 -4 V
+2 -5 V
+2 -5 V
+2 -5 V
+2 -5 V
+2 -5 V
+2 -4 V
+2 -5 V
+2 -5 V
+2 -5 V
+stroke 5933 3870 M
+2 -5 V
+2 -5 V
+2 -5 V
+2 -5 V
+2 -5 V
+3 -5 V
+2 -4 V
+2 -5 V
+2 -5 V
+2 -5 V
+2 -5 V
+2 -5 V
+2 -6 V
+2 -5 V
+2 -5 V
+2 -5 V
+2 -5 V
+2 -5 V
+2 -5 V
+2 -5 V
+2 -5 V
+2 -5 V
+2 -6 V
+2 -5 V
+2 -5 V
+2 -5 V
+2 -5 V
+2 -6 V
+2 -5 V
+2 -5 V
+2 -5 V
+2 -6 V
+2 -5 V
+2 -5 V
+2 -5 V
+2 -6 V
+2 -5 V
+2 -5 V
+2 -6 V
+2 -5 V
+2 -5 V
+2 -6 V
+2 -5 V
+2 -6 V
+2 -5 V
+2 -6 V
+2 -5 V
+2 -6 V
+2 -5 V
+2 -5 V
+2 -6 V
+2 -6 V
+2 -5 V
+2 -6 V
+2 -5 V
+2 -6 V
+2 -5 V
+2 -6 V
+2 -6 V
+2 -5 V
+2 -6 V
+2 -5 V
+2 -6 V
+2 -6 V
+2 -6 V
+2 -5 V
+2 -6 V
+2 -6 V
+2 -5 V
+2 -6 V
+2 -6 V
+2 -6 V
+2 -6 V
+2 -5 V
+2 -6 V
+2 -6 V
+2 -6 V
+2 -6 V
+2 -6 V
+2 -6 V
+2 -5 V
+2 -6 V
+2 -6 V
+2 -6 V
+2 -6 V
+2 -6 V
+2 -6 V
+2 -6 V
+2 -6 V
+2 -6 V
+2 -6 V
+2 -6 V
+2 -6 V
+2 -7 V
+2 -6 V
+2 -6 V
+2 -6 V
+2 -6 V
+2 -6 V
+2 -6 V
+2 -7 V
+2 -6 V
+2 -6 V
+2 -6 V
+stroke 6142 3294 M
+2 -7 V
+2 -6 V
+2 -6 V
+2 -6 V
+2 -7 V
+2 -6 V
+2 -6 V
+2 -7 V
+2 -6 V
+2 -6 V
+2 -7 V
+2 -6 V
+2 -7 V
+2 -6 V
+2 -7 V
+2 -6 V
+2 -7 V
+2 -6 V
+2 -7 V
+2 -6 V
+2 -7 V
+2 -6 V
+2 -7 V
+2 -6 V
+2 -7 V
+2 -7 V
+2 -6 V
+2 -7 V
+2 -7 V
+2 -6 V
+2 -7 V
+2 -7 V
+2 -6 V
+2 -7 V
+2 -7 V
+2 -7 V
+2 -7 V
+2 -6 V
+2 -7 V
+2 -7 V
+2 -7 V
+2 -7 V
+2 -7 V
+2 -7 V
+2 -6 V
+2 -7 V
+2 -7 V
+2 -7 V
+2 -7 V
+2 -7 V
+2 -7 V
+2 -7 V
+2 -7 V
+2 -7 V
+2 -8 V
+2 -7 V
+2 -7 V
+2 -7 V
+2 -7 V
+2 -7 V
+2 -7 V
+2 -8 V
+2 -7 V
+2 -7 V
+2 -7 V
+2 -8 V
+2 -7 V
+2 -7 V
+2 -8 V
+2 -7 V
+2 -7 V
+2 -8 V
+2 -7 V
+2 -7 V
+2 -8 V
+2 -7 V
+2 -8 V
+2 -7 V
+2 -8 V
+2 -7 V
+2 -8 V
+2 -7 V
+2 -8 V
+2 -7 V
+2 -8 V
+2 -8 V
+2 -7 V
+2 -8 V
+2 -8 V
+2 -7 V
+2 -8 V
+2 -8 V
+2 -7 V
+2 -8 V
+2 -8 V
+2 -8 V
+2 -7 V
+2 -8 V
+2 -8 V
+2 -8 V
+2 -8 V
+2 -8 V
+2 -8 V
+2 -8 V
+stroke 6350 2559 M
+2 -8 V
+2 -8 V
+2 -8 V
+2 -8 V
+2 -8 V
+2 -8 V
+2 -8 V
+2 -8 V
+2 -8 V
+2 -8 V
+2 -8 V
+2 -8 V
+2 -9 V
+2 -8 V
+2 -8 V
+2 -8 V
+2 -8 V
+2 -9 V
+2 -8 V
+2 -8 V
+2 -9 V
+2 -8 V
+2 -8 V
+2 -9 V
+2 -8 V
+2 -9 V
+2 -8 V
+2 -8 V
+2 -9 V
+2 -8 V
+2 -9 V
+2 -9 V
+2 -8 V
+2 -9 V
+2 -8 V
+2 -9 V
+2 -9 V
+2 -8 V
+2 -9 V
+2 -9 V
+2 -8 V
+2 -9 V
+2 -9 V
+2 -9 V
+2 -8 V
+2 -9 V
+2 -9 V
+2 -9 V
+2 -9 V
+2 -9 V
+2 -9 V
+2 -9 V
+2 -9 V
+2 -9 V
+2 -9 V
+2 -9 V
+2 -9 V
+2 -9 V
+2 -9 V
+2 -9 V
+2 -9 V
+2 -9 V
+2 -9 V
+2 -10 V
+2 -9 V
+2 -9 V
+2 -9 V
+2 -10 V
+2 -9 V
+2 -9 V
+2 -10 V
+2 -9 V
+2 -9 V
+2 -10 V
+2 -9 V
+2 -10 V
+2 -9 V
+2 -10 V
+2 -9 V
+2 -10 V
+2 -9 V
+2 -10 V
+2 -9 V
+2 -10 V
+2 -10 V
+2 -9 V
+2 -10 V
+2 -10 V
+2 -10 V
+2 -9 V
+2 -10 V
+2 -10 V
+2 -10 V
+2 -10 V
+2 -10 V
+2 -9 V
+2 -10 V
+2 -10 V
+2 -10 V
+2 -10 V
+2 -10 V
+2 -10 V
+2 -10 V
+2 -10 V
+stroke 6558 1626 M
+2 -11 V
+2 -10 V
+2 -10 V
+2 -10 V
+2 -10 V
+2 -11 V
+2 -10 V
+2 -10 V
+2 -10 V
+2 -10 V
+2 -11 V
+2 -10 V
+2 -11 V
+2 -10 V
+2 -10 V
+2 -11 V
+2 -11 V
+2 -10 V
+2 -11 V
+2 -10 V
+2 -11 V
+2 -10 V
+2 -11 V
+2 -11 V
+2 -11 V
+2 -10 V
+2 -11 V
+3 -11 V
+2 -10 V
+2 -11 V
+2 -12 V
+2 -10 V
+2 -10 V
+2 -12 V
+2 -12 V
+2 -9 V
+2 -9 V
+2 -16 V
+2 -11 V
+2 -6 V
+2 -14 V
+2 -14 V
+2 -8 V
+2 -8 V
+2 -18 V
+2 -11 V
+2 -11 V
+2 -12 V
+2 -13 V
+2 0 V
+2 -14 V
+2 -16 V
+2 -19 V
+2 0 V
+2 -21 V
+2 0 V
+2 -25 V
+2 0 V
+2 0 V
+2 -30 V
+2 0 V
+2 0 V
+2 -40 V
+2 0 V
+2 0 V
+2 -55 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 -96 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+2 0 V
+0 -332 V
+% End plot #1
+stroke
+1.000 UL
+LTb
+LCb setrgbcolor
+938 4871 N
+938 448 L
+6009 0 V
+0 4423 V
+-6009 0 V
+Z stroke
+1.000 UP
+1.000 UL
+LTb
+LCb setrgbcolor
+stroke
+grestore
+end
+showpage
+%%Trailer
+%%DocumentFonts: Times-BoldItalic
diff -Naur ns-3.19/src/lr-wpan/doc/802-15-4-psr-distance.eps ns-3.20/src/lr-wpan/doc/802-15-4-psr-distance.eps
--- ns-3.19/src/lr-wpan/doc/802-15-4-psr-distance.eps	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.20/src/lr-wpan/doc/802-15-4-psr-distance.eps	2014-06-17 10:33:13.893995962 -0700
@@ -0,0 +1,908 @@
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: 802.15.4-psr-distance.eps
+%%Creator: gnuplot 4.4 patchlevel 2
+%%CreationDate: Tue Oct  4 13:04:05 2011
+%%DocumentFonts: (atend)
+%%BoundingBox: 50 50 410 302
+%%EndComments
+%%BeginProlog
+/gnudict 256 dict def
+gnudict begin
+%
+% The following true/false flags may be edited by hand if desired.
+% The unit line width and grayscale image gamma correction may also be changed.
+%
+/Color true def
+/Blacktext false def
+/Solid false def
+/Dashlength 1 def
+/Landscape false def
+/Level1 false def
+/Rounded false def
+/ClipToBoundingBox false def
+/TransparentPatterns false def
+/gnulinewidth 5.000 def
+/userlinewidth gnulinewidth def
+/Gamma 1.0 def
+%
+/vshift -46 def
+/dl1 {
+  10.0 Dashlength mul mul
+  Rounded { currentlinewidth 0.75 mul sub dup 0 le { pop 0.01 } if } if
+} def
+/dl2 {
+  10.0 Dashlength mul mul
+  Rounded { currentlinewidth 0.75 mul add } if
+} def
+/hpt_ 31.5 def
+/vpt_ 31.5 def
+/hpt hpt_ def
+/vpt vpt_ def
+Level1 {} {
+/SDict 10 dict def
+systemdict /pdfmark known not {
+  userdict /pdfmark systemdict /cleartomark get put
+} if
+SDict begin [
+  /Title (802.15.4-psr-distance.eps)
+  /Subject (gnuplot plot)
+  /Creator (gnuplot 4.4 patchlevel 2)
+  /Author (tomh)
+%  /Producer (gnuplot)
+%  /Keywords ()
+  /CreationDate (Tue Oct  4 13:04:05 2011)
+  /DOCINFO pdfmark
+end
+} ifelse
+/doclip {
+  ClipToBoundingBox {
+    newpath 50 50 moveto 410 50 lineto 410 302 lineto 50 302 lineto closepath
+    clip
+  } if
+} def
+%
+% Gnuplot Prolog Version 4.4 (August 2010)
+%
+%/SuppressPDFMark true def
+%
+/M {moveto} bind def
+/L {lineto} bind def
+/R {rmoveto} bind def
+/V {rlineto} bind def
+/N {newpath moveto} bind def
+/Z {closepath} bind def
+/C {setrgbcolor} bind def
+/f {rlineto fill} bind def
+/g {setgray} bind def
+/Gshow {show} def   % May be redefined later in the file to support UTF-8
+/vpt2 vpt 2 mul def
+/hpt2 hpt 2 mul def
+/Lshow {currentpoint stroke M 0 vshift R 
+	Blacktext {gsave 0 setgray show grestore} {show} ifelse} def
+/Rshow {currentpoint stroke M dup stringwidth pop neg vshift R
+	Blacktext {gsave 0 setgray show grestore} {show} ifelse} def
+/Cshow {currentpoint stroke M dup stringwidth pop -2 div vshift R 
+	Blacktext {gsave 0 setgray show grestore} {show} ifelse} def
+/UP {dup vpt_ mul /vpt exch def hpt_ mul /hpt exch def
+  /hpt2 hpt 2 mul def /vpt2 vpt 2 mul def} def
+/DL {Color {setrgbcolor Solid {pop []} if 0 setdash}
+ {pop pop pop 0 setgray Solid {pop []} if 0 setdash} ifelse} def
+/BL {stroke userlinewidth 2 mul setlinewidth
+	Rounded {1 setlinejoin 1 setlinecap} if} def
+/AL {stroke userlinewidth 2 div setlinewidth
+	Rounded {1 setlinejoin 1 setlinecap} if} def
+/UL {dup gnulinewidth mul /userlinewidth exch def
+	dup 1 lt {pop 1} if 10 mul /udl exch def} def
+/PL {stroke userlinewidth setlinewidth
+	Rounded {1 setlinejoin 1 setlinecap} if} def
+3.8 setmiterlimit
+% Default Line colors
+/LCw {1 1 1} def
+/LCb {0 0 0} def
+/LCa {0 0 0} def
+/LC0 {1 0 0} def
+/LC1 {0 1 0} def
+/LC2 {0 0 1} def
+/LC3 {1 0 1} def
+/LC4 {0 1 1} def
+/LC5 {1 1 0} def
+/LC6 {0 0 0} def
+/LC7 {1 0.3 0} def
+/LC8 {0.5 0.5 0.5} def
+% Default Line Types
+/LTw {PL [] 1 setgray} def
+/LTb {BL [] LCb DL} def
+/LTa {AL [1 udl mul 2 udl mul] 0 setdash LCa setrgbcolor} def
+/LT0 {PL [] LC0 DL} def
+/LT1 {PL [4 dl1 2 dl2] LC1 DL} def
+/LT2 {PL [2 dl1 3 dl2] LC2 DL} def
+/LT3 {PL [1 dl1 1.5 dl2] LC3 DL} def
+/LT4 {PL [6 dl1 2 dl2 1 dl1 2 dl2] LC4 DL} def
+/LT5 {PL [3 dl1 3 dl2 1 dl1 3 dl2] LC5 DL} def
+/LT6 {PL [2 dl1 2 dl2 2 dl1 6 dl2] LC6 DL} def
+/LT7 {PL [1 dl1 2 dl2 6 dl1 2 dl2 1 dl1 2 dl2] LC7 DL} def
+/LT8 {PL [2 dl1 2 dl2 2 dl1 2 dl2 2 dl1 2 dl2 2 dl1 4 dl2] LC8 DL} def
+/Pnt {stroke [] 0 setdash gsave 1 setlinecap M 0 0 V stroke grestore} def
+/Dia {stroke [] 0 setdash 2 copy vpt add M
+  hpt neg vpt neg V hpt vpt neg V
+  hpt vpt V hpt neg vpt V closepath stroke
+  Pnt} def
+/Pls {stroke [] 0 setdash vpt sub M 0 vpt2 V
+  currentpoint stroke M
+  hpt neg vpt neg R hpt2 0 V stroke
+ } def
+/Box {stroke [] 0 setdash 2 copy exch hpt sub exch vpt add M
+  0 vpt2 neg V hpt2 0 V 0 vpt2 V
+  hpt2 neg 0 V closepath stroke
+  Pnt} def
+/Crs {stroke [] 0 setdash exch hpt sub exch vpt add M
+  hpt2 vpt2 neg V currentpoint stroke M
+  hpt2 neg 0 R hpt2 vpt2 V stroke} def
+/TriU {stroke [] 0 setdash 2 copy vpt 1.12 mul add M
+  hpt neg vpt -1.62 mul V
+  hpt 2 mul 0 V
+  hpt neg vpt 1.62 mul V closepath stroke
+  Pnt} def
+/Star {2 copy Pls Crs} def
+/BoxF {stroke [] 0 setdash exch hpt sub exch vpt add M
+  0 vpt2 neg V hpt2 0 V 0 vpt2 V
+  hpt2 neg 0 V closepath fill} def
+/TriUF {stroke [] 0 setdash vpt 1.12 mul add M
+  hpt neg vpt -1.62 mul V
+  hpt 2 mul 0 V
+  hpt neg vpt 1.62 mul V closepath fill} def
+/TriD {stroke [] 0 setdash 2 copy vpt 1.12 mul sub M
+  hpt neg vpt 1.62 mul V
+  hpt 2 mul 0 V
+  hpt neg vpt -1.62 mul V closepath stroke
+  Pnt} def
+/TriDF {stroke [] 0 setdash vpt 1.12 mul sub M
+  hpt neg vpt 1.62 mul V
+  hpt 2 mul 0 V
+  hpt neg vpt -1.62 mul V closepath fill} def
+/DiaF {stroke [] 0 setdash vpt add M
+  hpt neg vpt neg V hpt vpt neg V
+  hpt vpt V hpt neg vpt V closepath fill} def
+/Pent {stroke [] 0 setdash 2 copy gsave
+  translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+  closepath stroke grestore Pnt} def
+/PentF {stroke [] 0 setdash gsave
+  translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+  closepath fill grestore} def
+/Circle {stroke [] 0 setdash 2 copy
+  hpt 0 360 arc stroke Pnt} def
+/CircleF {stroke [] 0 setdash hpt 0 360 arc fill} def
+/C0 {BL [] 0 setdash 2 copy moveto vpt 90 450 arc} bind def
+/C1 {BL [] 0 setdash 2 copy moveto
+	2 copy vpt 0 90 arc closepath fill
+	vpt 0 360 arc closepath} bind def
+/C2 {BL [] 0 setdash 2 copy moveto
+	2 copy vpt 90 180 arc closepath fill
+	vpt 0 360 arc closepath} bind def
+/C3 {BL [] 0 setdash 2 copy moveto
+	2 copy vpt 0 180 arc closepath fill
+	vpt 0 360 arc closepath} bind def
+/C4 {BL [] 0 setdash 2 copy moveto
+	2 copy vpt 180 270 arc closepath fill
+	vpt 0 360 arc closepath} bind def
+/C5 {BL [] 0 setdash 2 copy moveto
+	2 copy vpt 0 90 arc
+	2 copy moveto
+	2 copy vpt 180 270 arc closepath fill
+	vpt 0 360 arc} bind def
+/C6 {BL [] 0 setdash 2 copy moveto
+	2 copy vpt 90 270 arc closepath fill
+	vpt 0 360 arc closepath} bind def
+/C7 {BL [] 0 setdash 2 copy moveto
+	2 copy vpt 0 270 arc closepath fill
+	vpt 0 360 arc closepath} bind def
+/C8 {BL [] 0 setdash 2 copy moveto
+	2 copy vpt 270 360 arc closepath fill
+	vpt 0 360 arc closepath} bind def
+/C9 {BL [] 0 setdash 2 copy moveto
+	2 copy vpt 270 450 arc closepath fill
+	vpt 0 360 arc closepath} bind def
+/C10 {BL [] 0 setdash 2 copy 2 copy moveto vpt 270 360 arc closepath fill
+	2 copy moveto
+	2 copy vpt 90 180 arc closepath fill
+	vpt 0 360 arc closepath} bind def
+/C11 {BL [] 0 setdash 2 copy moveto
+	2 copy vpt 0 180 arc closepath fill
+	2 copy moveto
+	2 copy vpt 270 360 arc closepath fill
+	vpt 0 360 arc closepath} bind def
+/C12 {BL [] 0 setdash 2 copy moveto
+	2 copy vpt 180 360 arc closepath fill
+	vpt 0 360 arc closepath} bind def
+/C13 {BL [] 0 setdash 2 copy moveto
+	2 copy vpt 0 90 arc closepath fill
+	2 copy moveto
+	2 copy vpt 180 360 arc closepath fill
+	vpt 0 360 arc closepath} bind def
+/C14 {BL [] 0 setdash 2 copy moveto
+	2 copy vpt 90 360 arc closepath fill
+	vpt 0 360 arc} bind def
+/C15 {BL [] 0 setdash 2 copy vpt 0 360 arc closepath fill
+	vpt 0 360 arc closepath} bind def
+/Rec {newpath 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto
+	neg 0 rlineto closepath} bind def
+/Square {dup Rec} bind def
+/Bsquare {vpt sub exch vpt sub exch vpt2 Square} bind def
+/S0 {BL [] 0 setdash 2 copy moveto 0 vpt rlineto BL Bsquare} bind def
+/S1 {BL [] 0 setdash 2 copy vpt Square fill Bsquare} bind def
+/S2 {BL [] 0 setdash 2 copy exch vpt sub exch vpt Square fill Bsquare} bind def
+/S3 {BL [] 0 setdash 2 copy exch vpt sub exch vpt2 vpt Rec fill Bsquare} bind def
+/S4 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt Square fill Bsquare} bind def
+/S5 {BL [] 0 setdash 2 copy 2 copy vpt Square fill
+	exch vpt sub exch vpt sub vpt Square fill Bsquare} bind def
+/S6 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill Bsquare} bind def
+/S7 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill
+	2 copy vpt Square fill Bsquare} bind def
+/S8 {BL [] 0 setdash 2 copy vpt sub vpt Square fill Bsquare} bind def
+/S9 {BL [] 0 setdash 2 copy vpt sub vpt vpt2 Rec fill Bsquare} bind def
+/S10 {BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt Square fill
+	Bsquare} bind def
+/S11 {BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt2 vpt Rec fill
+	Bsquare} bind def
+/S12 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill Bsquare} bind def
+/S13 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill
+	2 copy vpt Square fill Bsquare} bind def
+/S14 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill
+	2 copy exch vpt sub exch vpt Square fill Bsquare} bind def
+/S15 {BL [] 0 setdash 2 copy Bsquare fill Bsquare} bind def
+/D0 {gsave translate 45 rotate 0 0 S0 stroke grestore} bind def
+/D1 {gsave translate 45 rotate 0 0 S1 stroke grestore} bind def
+/D2 {gsave translate 45 rotate 0 0 S2 stroke grestore} bind def
+/D3 {gsave translate 45 rotate 0 0 S3 stroke grestore} bind def
+/D4 {gsave translate 45 rotate 0 0 S4 stroke grestore} bind def
+/D5 {gsave translate 45 rotate 0 0 S5 stroke grestore} bind def
+/D6 {gsave translate 45 rotate 0 0 S6 stroke grestore} bind def
+/D7 {gsave translate 45 rotate 0 0 S7 stroke grestore} bind def
+/D8 {gsave translate 45 rotate 0 0 S8 stroke grestore} bind def
+/D9 {gsave translate 45 rotate 0 0 S9 stroke grestore} bind def
+/D10 {gsave translate 45 rotate 0 0 S10 stroke grestore} bind def
+/D11 {gsave translate 45 rotate 0 0 S11 stroke grestore} bind def
+/D12 {gsave translate 45 rotate 0 0 S12 stroke grestore} bind def
+/D13 {gsave translate 45 rotate 0 0 S13 stroke grestore} bind def
+/D14 {gsave translate 45 rotate 0 0 S14 stroke grestore} bind def
+/D15 {gsave translate 45 rotate 0 0 S15 stroke grestore} bind def
+/DiaE {stroke [] 0 setdash vpt add M
+  hpt neg vpt neg V hpt vpt neg V
+  hpt vpt V hpt neg vpt V closepath stroke} def
+/BoxE {stroke [] 0 setdash exch hpt sub exch vpt add M
+  0 vpt2 neg V hpt2 0 V 0 vpt2 V
+  hpt2 neg 0 V closepath stroke} def
+/TriUE {stroke [] 0 setdash vpt 1.12 mul add M
+  hpt neg vpt -1.62 mul V
+  hpt 2 mul 0 V
+  hpt neg vpt 1.62 mul V closepath stroke} def
+/TriDE {stroke [] 0 setdash vpt 1.12 mul sub M
+  hpt neg vpt 1.62 mul V
+  hpt 2 mul 0 V
+  hpt neg vpt -1.62 mul V closepath stroke} def
+/PentE {stroke [] 0 setdash gsave
+  translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+  closepath stroke grestore} def
+/CircE {stroke [] 0 setdash 
+  hpt 0 360 arc stroke} def
+/Opaque {gsave closepath 1 setgray fill grestore 0 setgray closepath} def
+/DiaW {stroke [] 0 setdash vpt add M
+  hpt neg vpt neg V hpt vpt neg V
+  hpt vpt V hpt neg vpt V Opaque stroke} def
+/BoxW {stroke [] 0 setdash exch hpt sub exch vpt add M
+  0 vpt2 neg V hpt2 0 V 0 vpt2 V
+  hpt2 neg 0 V Opaque stroke} def
+/TriUW {stroke [] 0 setdash vpt 1.12 mul add M
+  hpt neg vpt -1.62 mul V
+  hpt 2 mul 0 V
+  hpt neg vpt 1.62 mul V Opaque stroke} def
+/TriDW {stroke [] 0 setdash vpt 1.12 mul sub M
+  hpt neg vpt 1.62 mul V
+  hpt 2 mul 0 V
+  hpt neg vpt -1.62 mul V Opaque stroke} def
+/PentW {stroke [] 0 setdash gsave
+  translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+  Opaque stroke grestore} def
+/CircW {stroke [] 0 setdash 
+  hpt 0 360 arc Opaque stroke} def
+/BoxFill {gsave Rec 1 setgray fill grestore} def
+/Density {
+  /Fillden exch def
+  currentrgbcolor
+  /ColB exch def /ColG exch def /ColR exch def
+  /ColR ColR Fillden mul Fillden sub 1 add def
+  /ColG ColG Fillden mul Fillden sub 1 add def
+  /ColB ColB Fillden mul Fillden sub 1 add def
+  ColR ColG ColB setrgbcolor} def
+/BoxColFill {gsave Rec PolyFill} def
+/PolyFill {gsave Density fill grestore grestore} def
+/h {rlineto rlineto rlineto gsave closepath fill grestore} bind def
+%
+% PostScript Level 1 Pattern Fill routine for rectangles
+% Usage: x y w h s a XX PatternFill
+%	x,y = lower left corner of box to be filled
+%	w,h = width and height of box
+%	  a = angle in degrees between lines and x-axis
+%	 XX = 0/1 for no/yes cross-hatch
+%
+/PatternFill {gsave /PFa [ 9 2 roll ] def
+  PFa 0 get PFa 2 get 2 div add PFa 1 get PFa 3 get 2 div add translate
+  PFa 2 get -2 div PFa 3 get -2 div PFa 2 get PFa 3 get Rec
+  gsave 1 setgray fill grestore clip
+  currentlinewidth 0.5 mul setlinewidth
+  /PFs PFa 2 get dup mul PFa 3 get dup mul add sqrt def
+  0 0 M PFa 5 get rotate PFs -2 div dup translate
+  0 1 PFs PFa 4 get div 1 add floor cvi
+	{PFa 4 get mul 0 M 0 PFs V} for
+  0 PFa 6 get ne {
+	0 1 PFs PFa 4 get div 1 add floor cvi
+	{PFa 4 get mul 0 2 1 roll M PFs 0 V} for
+ } if
+  stroke grestore} def
+%
+/languagelevel where
+ {pop languagelevel} {1} ifelse
+ 2 lt
+	{/InterpretLevel1 true def}
+	{/InterpretLevel1 Level1 def}
+ ifelse
+%
+% PostScript level 2 pattern fill definitions
+%
+/Level2PatternFill {
+/Tile8x8 {/PaintType 2 /PatternType 1 /TilingType 1 /BBox [0 0 8 8] /XStep 8 /YStep 8}
+	bind def
+/KeepColor {currentrgbcolor [/Pattern /DeviceRGB] setcolorspace} bind def
+<< Tile8x8
+ /PaintProc {0.5 setlinewidth pop 0 0 M 8 8 L 0 8 M 8 0 L stroke} 
+>> matrix makepattern
+/Pat1 exch def
+<< Tile8x8
+ /PaintProc {0.5 setlinewidth pop 0 0 M 8 8 L 0 8 M 8 0 L stroke
+	0 4 M 4 8 L 8 4 L 4 0 L 0 4 L stroke}
+>> matrix makepattern
+/Pat2 exch def
+<< Tile8x8
+ /PaintProc {0.5 setlinewidth pop 0 0 M 0 8 L
+	8 8 L 8 0 L 0 0 L fill}
+>> matrix makepattern
+/Pat3 exch def
+<< Tile8x8
+ /PaintProc {0.5 setlinewidth pop -4 8 M 8 -4 L
+	0 12 M 12 0 L stroke}
+>> matrix makepattern
+/Pat4 exch def
+<< Tile8x8
+ /PaintProc {0.5 setlinewidth pop -4 0 M 8 12 L
+	0 -4 M 12 8 L stroke}
+>> matrix makepattern
+/Pat5 exch def
+<< Tile8x8
+ /PaintProc {0.5 setlinewidth pop -2 8 M 4 -4 L
+	0 12 M 8 -4 L 4 12 M 10 0 L stroke}
+>> matrix makepattern
+/Pat6 exch def
+<< Tile8x8
+ /PaintProc {0.5 setlinewidth pop -2 0 M 4 12 L
+	0 -4 M 8 12 L 4 -4 M 10 8 L stroke}
+>> matrix makepattern
+/Pat7 exch def
+<< Tile8x8
+ /PaintProc {0.5 setlinewidth pop 8 -2 M -4 4 L
+	12 0 M -4 8 L 12 4 M 0 10 L stroke}
+>> matrix makepattern
+/Pat8 exch def
+<< Tile8x8
+ /PaintProc {0.5 setlinewidth pop 0 -2 M 12 4 L
+	-4 0 M 12 8 L -4 4 M 8 10 L stroke}
+>> matrix makepattern
+/Pat9 exch def
+/Pattern1 {PatternBgnd KeepColor Pat1 setpattern} bind def
+/Pattern2 {PatternBgnd KeepColor Pat2 setpattern} bind def
+/Pattern3 {PatternBgnd KeepColor Pat3 setpattern} bind def
+/Pattern4 {PatternBgnd KeepColor Landscape {Pat5} {Pat4} ifelse setpattern} bind def
+/Pattern5 {PatternBgnd KeepColor Landscape {Pat4} {Pat5} ifelse setpattern} bind def
+/Pattern6 {PatternBgnd KeepColor Landscape {Pat9} {Pat6} ifelse setpattern} bind def
+/Pattern7 {PatternBgnd KeepColor Landscape {Pat8} {Pat7} ifelse setpattern} bind def
+} def
+%
+%
+%End of PostScript Level 2 code
+%
+/PatternBgnd {
+  TransparentPatterns {} {gsave 1 setgray fill grestore} ifelse
+} def
+%
+% Substitute for Level 2 pattern fill codes with
+% grayscale if Level 2 support is not selected.
+%
+/Level1PatternFill {
+/Pattern1 {0.250 Density} bind def
+/Pattern2 {0.500 Density} bind def
+/Pattern3 {0.750 Density} bind def
+/Pattern4 {0.125 Density} bind def
+/Pattern5 {0.375 Density} bind def
+/Pattern6 {0.625 Density} bind def
+/Pattern7 {0.875 Density} bind def
+} def
+%
+% Now test for support of Level 2 code
+%
+Level1 {Level1PatternFill} {Level2PatternFill} ifelse
+%
+/Symbol-Oblique /Symbol findfont [1 0 .167 1 0 0] makefont
+dup length dict begin {1 index /FID eq {pop pop} {def} ifelse} forall
+currentdict end definefont pop
+/MFshow {
+   { dup 5 get 3 ge
+     { 5 get 3 eq {gsave} {grestore} ifelse }
+     {dup dup 0 get findfont exch 1 get scalefont setfont
+     [ currentpoint ] exch dup 2 get 0 exch R dup 5 get 2 ne {dup dup 6
+     get exch 4 get {Gshow} {stringwidth pop 0 R} ifelse }if dup 5 get 0 eq
+     {dup 3 get {2 get neg 0 exch R pop} {pop aload pop M} ifelse} {dup 5
+     get 1 eq {dup 2 get exch dup 3 get exch 6 get stringwidth pop -2 div
+     dup 0 R} {dup 6 get stringwidth pop -2 div 0 R 6 get
+     show 2 index {aload pop M neg 3 -1 roll neg R pop pop} {pop pop pop
+     pop aload pop M} ifelse }ifelse }ifelse }
+     ifelse }
+   forall} def
+/Gswidth {dup type /stringtype eq {stringwidth} {pop (n) stringwidth} ifelse} def
+/MFwidth {0 exch { dup 5 get 3 ge { 5 get 3 eq { 0 } { pop } ifelse }
+ {dup 3 get{dup dup 0 get findfont exch 1 get scalefont setfont
+     6 get Gswidth pop add} {pop} ifelse} ifelse} forall} def
+/MLshow { currentpoint stroke M
+  0 exch R
+  Blacktext {gsave 0 setgray MFshow grestore} {MFshow} ifelse } bind def
+/MRshow { currentpoint stroke M
+  exch dup MFwidth neg 3 -1 roll R
+  Blacktext {gsave 0 setgray MFshow grestore} {MFshow} ifelse } bind def
+/MCshow { currentpoint stroke M
+  exch dup MFwidth -2 div 3 -1 roll R
+  Blacktext {gsave 0 setgray MFshow grestore} {MFshow} ifelse } bind def
+/XYsave    { [( ) 1 2 true false 3 ()] } bind def
+/XYrestore { [( ) 1 2 true false 4 ()] } bind def
+end
+%%EndProlog
+gnudict begin
+gsave
+doclip
+50 50 translate
+0.050 0.050 scale
+0 setgray
+newpath
+(Times-BoldItalic) findfont 140 scalefont setfont
+1.000 UL
+LTb
+1.000 UL
+LTa
+686 448 M
+6261 0 V
+stroke
+LTb
+686 448 M
+63 0 V
+6198 0 R
+-63 0 V
+stroke
+602 448 M
+[ [(Times-BoldItalic) 140.0 0.0 true true 0 ( 0)]
+] -46.7 MRshow
+1.000 UL
+LTb
+1.000 UL
+LTa
+686 1282 M
+6261 0 V
+stroke
+LTb
+686 1282 M
+63 0 V
+6198 0 R
+-63 0 V
+stroke
+602 1282 M
+[ [(Times-BoldItalic) 140.0 0.0 true true 0 ( 0.2)]
+] -46.7 MRshow
+1.000 UL
+LTb
+1.000 UL
+LTa
+686 2116 M
+6261 0 V
+stroke
+LTb
+686 2116 M
+63 0 V
+6198 0 R
+-63 0 V
+stroke
+602 2116 M
+[ [(Times-BoldItalic) 140.0 0.0 true true 0 ( 0.4)]
+] -46.7 MRshow
+1.000 UL
+LTb
+1.000 UL
+LTa
+686 2951 M
+6261 0 V
+stroke
+LTb
+686 2951 M
+63 0 V
+6198 0 R
+-63 0 V
+stroke
+602 2951 M
+[ [(Times-BoldItalic) 140.0 0.0 true true 0 ( 0.6)]
+] -46.7 MRshow
+1.000 UL
+LTb
+1.000 UL
+LTa
+686 3785 M
+6261 0 V
+stroke
+LTb
+686 3785 M
+63 0 V
+6198 0 R
+-63 0 V
+stroke
+602 3785 M
+[ [(Times-BoldItalic) 140.0 0.0 true true 0 ( 0.8)]
+] -46.7 MRshow
+1.000 UL
+LTb
+1.000 UL
+LTa
+686 4619 M
+6261 0 V
+stroke
+LTb
+686 4619 M
+63 0 V
+6198 0 R
+-63 0 V
+stroke
+602 4619 M
+[ [(Times-BoldItalic) 140.0 0.0 true true 0 ( 1)]
+] -46.7 MRshow
+1.000 UL
+LTb
+1.000 UL
+LTa
+686 448 M
+0 4171 V
+stroke
+LTb
+686 448 M
+0 63 V
+0 4108 R
+0 -63 V
+stroke
+686 308 M
+[ [(Times-BoldItalic) 140.0 0.0 true true 0 ( 0)]
+] -46.7 MCshow
+1.000 UL
+LTb
+1.000 UL
+LTa
+2251 448 M
+0 4171 V
+stroke
+LTb
+2251 448 M
+0 63 V
+0 4108 R
+0 -63 V
+stroke
+2251 308 M
+[ [(Times-BoldItalic) 140.0 0.0 true true 0 ( 50)]
+] -46.7 MCshow
+1.000 UL
+LTb
+1.000 UL
+LTa
+3816 448 M
+0 4171 V
+stroke
+LTb
+3816 448 M
+0 63 V
+0 4108 R
+0 -63 V
+stroke
+3816 308 M
+[ [(Times-BoldItalic) 140.0 0.0 true true 0 ( 100)]
+] -46.7 MCshow
+1.000 UL
+LTb
+1.000 UL
+LTa
+5382 448 M
+0 3968 V
+0 140 R
+0 63 V
+stroke
+LTb
+5382 448 M
+0 63 V
+0 4108 R
+0 -63 V
+stroke
+5382 308 M
+[ [(Times-BoldItalic) 140.0 0.0 true true 0 ( 150)]
+] -46.7 MCshow
+1.000 UL
+LTb
+1.000 UL
+LTa
+6947 448 M
+0 4171 V
+stroke
+LTb
+6947 448 M
+0 63 V
+0 4108 R
+0 -63 V
+stroke
+6947 308 M
+[ [(Times-BoldItalic) 140.0 0.0 true true 0 ( 200)]
+] -46.7 MCshow
+1.000 UL
+LTb
+1.000 UL
+LTb
+686 4619 N
+686 448 L
+6261 0 V
+0 4171 V
+-6261 0 V
+Z stroke
+LCb setrgbcolor
+112 2533 M
+currentpoint gsave translate -270 rotate 0 0 moveto
+[ [(Times-BoldItalic) 140.0 0.0 true true 0 (Packet Success Rate \(PSR\))]
+] -46.7 MCshow
+grestore
+LTb
+LCb setrgbcolor
+3816 98 M
+[ [(Times-BoldItalic) 140.0 0.0 true true 0 (distance \(m\))]
+] -46.7 MCshow
+LTb
+3816 4829 M
+[ [(Times-BoldItalic) 140.0 0.0 true true 0 (Packet \(MSDU\) size = 20 bytes; tx power = 0 dBm; channel = 11)]
+] -46.7 MCshow
+1.000 UP
+1.000 UL
+LTb
+% Begin plot #1
+5.000 UL
+LT0
+LCb setrgbcolor
+6296 4486 M
+[ [(Times-BoldItalic) 140.0 0.0 true true 0 (802.15.4-psr-vs-distance)]
+] -46.7 MRshow
+LT0
+6380 4486 M
+399 0 V
+717 4619 M
+32 0 V
+31 0 V
+31 0 V
+32 0 V
+31 0 V
+31 0 V
+31 0 V
+32 0 V
+31 0 V
+31 0 V
+32 0 V
+31 0 V
+31 0 V
+32 0 V
+31 0 V
+31 0 V
+31 0 V
+32 0 V
+31 0 V
+31 0 V
+32 0 V
+31 0 V
+31 0 V
+32 0 V
+31 0 V
+31 0 V
+32 0 V
+31 0 V
+31 0 V
+31 0 V
+32 0 V
+31 0 V
+31 0 V
+32 0 V
+31 0 V
+31 0 V
+32 0 V
+31 0 V
+31 0 V
+32 0 V
+31 0 V
+31 0 V
+31 0 V
+32 0 V
+31 0 V
+31 0 V
+32 0 V
+31 0 V
+31 0 V
+32 0 V
+31 0 V
+31 0 V
+31 0 V
+32 0 V
+31 0 V
+31 0 V
+32 0 V
+31 0 V
+31 0 V
+32 0 V
+31 0 V
+31 0 V
+32 0 V
+31 0 V
+31 0 V
+31 0 V
+32 0 V
+31 0 V
+31 0 V
+32 0 V
+31 0 V
+31 0 V
+32 -4 V
+31 -4 V
+31 8 V
+31 0 V
+32 -13 V
+31 -4 V
+31 -16 V
+32 -30 V
+31 -41 V
+31 4 V
+32 -88 V
+31 -62 V
+31 -100 V
+32 -113 V
+31 -83 V
+31 -176 V
+31 -141 V
+32 -263 V
+31 -367 V
+31 -175 V
+32 -284 V
+31 -359 V
+31 -308 V
+32 -217 V
+31 -234 V
+31 -296 V
+31 -192 V
+32 -96 V
+31 -162 V
+31 -163 V
+stroke 3910 640 M
+32 -34 V
+31 -41 V
+31 -42 V
+32 -46 V
+31 -12 V
+31 -13 V
+32 17 V
+31 -13 V
+31 -8 V
+31 0 V
+32 0 V
+31 0 V
+31 0 V
+32 0 V
+31 0 V
+31 0 V
+32 0 V
+31 0 V
+31 0 V
+32 0 V
+31 0 V
+31 0 V
+31 0 V
+32 0 V
+31 0 V
+31 0 V
+32 0 V
+31 0 V
+31 0 V
+32 0 V
+31 0 V
+31 0 V
+31 0 V
+32 0 V
+31 0 V
+31 0 V
+32 0 V
+31 0 V
+31 0 V
+32 0 V
+31 0 V
+31 0 V
+32 0 V
+31 0 V
+31 0 V
+31 0 V
+32 0 V
+31 0 V
+31 0 V
+32 0 V
+31 0 V
+31 0 V
+32 0 V
+31 0 V
+31 0 V
+31 0 V
+32 0 V
+31 0 V
+31 0 V
+32 0 V
+31 0 V
+31 0 V
+32 0 V
+31 0 V
+31 0 V
+32 0 V
+31 0 V
+31 0 V
+31 0 V
+32 0 V
+31 0 V
+31 0 V
+32 0 V
+31 0 V
+31 0 V
+32 0 V
+31 0 V
+31 0 V
+32 0 V
+31 0 V
+31 0 V
+31 0 V
+32 0 V
+31 0 V
+31 0 V
+32 0 V
+31 0 V
+31 0 V
+32 0 V
+31 0 V
+31 0 V
+31 0 V
+32 0 V
+31 0 V
+31 0 V
+32 0 V
+% End plot #1
+stroke
+1.000 UL
+LTb
+686 4619 N
+686 448 L
+6261 0 V
+0 4171 V
+-6261 0 V
+Z stroke
+1.000 UP
+1.000 UL
+LTb
+stroke
+grestore
+end
+showpage
+%%Trailer
+%%DocumentFonts: Times-BoldItalic
diff -Naur ns-3.19/src/lr-wpan/doc/lr-wpan-arch.dia ns-3.20/src/lr-wpan/doc/lr-wpan-arch.dia
--- ns-3.19/src/lr-wpan/doc/lr-wpan-arch.dia	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.20/src/lr-wpan/doc/lr-wpan-arch.dia	2014-06-17 10:33:13.894995954 -0700
@@ -0,0 +1,6 @@
+‹     í]MsÛ¶ÝçWh”­ã“ ªÚ�4m§g^æ9]tå¡$ZfK‘Š¶ã.Þo HY–DÚI(¦{•±cË	^œûâÇŸ¾-âÁm˜­¢49„‡ƒ0™¦³(™ŸÿøúÛøÓÙ»gQðƒþšgÁb ?‘¬Ìo§Ãë<_þprrww‡âûU�§Š£´
+OþÄqp¢�ÏÞ�;˜y`Þ+ßò<‹&7y8H‚Ex:œÓ¿çYz“Ì†E«²Ý4�ÓlpÄ§Ã÷Wö5<)»9Ùêç‰¾—Á<œdaðw}×X¿”jÒõ2Ìv»],ÓU¤›ä÷Ë½&5ý˜ï�Ú”­VºQ2?{ÿ‘¿/©|cÓWÕ�Ö‚ä‹ ›GÉ>Ž›¸Š|J©¡|…%—d=&‡ÃMŽ.;.\´º\¦YžQ¾9IÓ8’5ÏnÂæ8«ik{ê´ZœÅU”çé3ÇÄ«—œ@ñöÃÝvè�;Ï¢ÙÓ7îV‹š^î¢Y~}ùÍÑp½ß;êý6ZE“8¬:ú(É;ëþ¾›îw¯ŽeïÍÇ[ZCÑ[íô0óCŠÃ§‡ùM4WÏ˜Ùv›šž®Ëf'Ï�ún»—LñÖÎdm!âà>ÌÊîÞLÓƒò—Œ3¦yt»þíÑ˜¤“¿Âi^žìÅ/çƒƒ‹<Èõ'6d8ˆf§Ãÿàí‘Ú=7Ý“&Á½¡Z¦öÄ#Ž<±{þûìQ0™ìöŸéÃ’y>`ˆ1Ñô.F^c°E˜ÃgŒ|Móf½‡q¸¸œ¦Y²¯=º/bIjÌÖ¥øÑ‹ðX×a4¿ÎëÁR[`˜6ÓS`øÜ‰aDðö‹´ 3ls“íÛÃ¶DÅ¸ÄUÇ/€ØØ‡A¬®Ó»Ë
+ÿ¼D9x¬Vù}î„ÉÍ¢¼0{$Y9]»f³mU´gL0!SZì1*™TÍ�òð[þ+ì´©» ÖWØj·ãVÔ8OÌÄuæ•&y�yp,¢ø^O�¬†{íÌ5*?ú{ß†y4_´Ã�`�*¯‘¿sÃòv ÛsQ¿úˆP1Úí ¶õÉ¢	�VÿódV_ÏÍ=F^ˆR©>ä®8Z^^§Yô�¶¦ ~’Xv|‡ƒa´"1¶èdu31V8lLPÅ›…¦ªYZ®Ì‚l¦•ÖWCûB‹´Z*ìÚ¡Î*!(c‚‘(n$%¨xýÄúÇr©ó¹ÑÍ+ Y×$»o‹o�aññöÖR½ b]pÒ“Žmïøa)Fzºõ�z~˜Z6–HŽ4+‘^û~í†ì%ÎGBrõèÅÜ:tË“àü�óÎ8ßG—Ä<=_(Ä88àü½ç�µ[J»¦nÅ–²òÄó…V[DÚ;‰³>¸>¦ˆÎÏ?ÇºæØ*SïïõyR:×"î)á’”x[R&•å!—™?�õ©Ò(œK.ÇB“§D“Õ¼ÔÐµ™¦Ir&3{*‡�`­ähîÔé«>]îDUºþ ‰/²ü2È²ô®ÞÌ(mÝùe&ó§½6VOPMAŸõ;ÂÔ6âjº>Þn ]�Ÿ¹±ôý«Yfµ7ï¯ÿ2¸Ö¼d¦K­�òÔ¢›¿nÑðšiw:íF’‰¶ìG1’˜‘‘þŸ;dÀ5QzªãG¨¢�yd®Yµ!‚${Í’¬†”¼Ö¤$‘äJ[ .I©„Ñ¤äRÚ 2 % ¥ZCRê!)É¶¤´.Éñ¨KWq�‚Ùxý£”ÈÈ¨Ú �‹ŽÊEM\D\ºˆxÛEdGrý¶ÄÇ‘¡»d=á#¥UX‰æ�Ò«4>`¼žÕh©j´´¢­Ï©ö¢6'¤q¤&Ÿ±Ô4"LË/Úïb­¶cõZåú#…	ñ…z-¨×‚z-Ð(�“§Æ3#zþð`½”l½¦õ:¬ŒV¥m»_8K1H(«¾°è�xqñéhö%[U–þ`«¶i_¶e+–ÌZ§•[Øóˆo`0÷=S¹…}ŸZ‡J0å¼r«âëõG'ê· ~ëßX¿…«ë·öï·'j¿Ô÷©ý"´ýblÏN¨ÂéjlÏR“‰í¯ñ ¸Š®Æþ@Íõ,ºO:XÄMØ] IÝ>}‹ZOÚ'pHÙò•<ƒ«Ý¸ÁS¸ÞV`¦Ì?ìC`ôIWWš`=ä+ˆêCTÿEõ[/z”…’ˆ¹Ô\%Š§ŠûÈ&—}pÿ>„eØÎ¶ÒÁìcD_t°»pÊ„t»[0ª,±™F‰µ+Yãèù!k±÷Ï±2¢oT… žñük<¿#±äu°òÇªO9^ùcQÈøÁíà°ðDR�ý�HêÍÂÂ¯ü©“d²IF5…X>%Ü­,“e¹½‘dDzÜ„¶…ü’¬ò+›RÛTå Ì@˜�0k˜5ô;Ê*}'ºÏ*¶ÎRÒòe›�d!kYCÈ‚»ö”»FñÛs× kØï¬¡jŸ5ô
+DÝf-
+6:ûH3«Åd½È~ùýO`X÷YÃ
+;„€X³†wœ×¦À¥SJò•¢¾Å!J“g>¥#Ê´ëLÇ§ªN°²•uNd!0+€šDéýÚ%@N—ñPÒbÄ��ŸTH�ÈO‚«³?�cýÉOúß'?I[/`4û»JÂŠ•<Nó“‰•[fý�¾ÉˆôŠ¼€óeíIV7¥¦©>0HP‚„e+eÆÚ+3ÏÎŒŽ…YÂ„	—yÖY$VXƒ4«6@Pf=||=åíö`éIÏíóJ"ÇÚYôŠ ”"}pÿûÛà“ÇI3¹öC•97õ‘›Z/ýQÈÓ]†ðK‚Å¸üÑ‡§Ð U°PYÈƒ8:ÄÑ�‹Þl½Žù:ØÛÌ.ˆv¼³™²‹Øl”ÊÂqRïU[°^‹¹ü®òyš&(áÂq>�S®‘4 ö	MJ�úÊ> Pàc¥ôöÎ³º©=*ÈæA6²y-T’j¿¢]:ç!æ¹Ýqý\O96ûDÑ‹øùçO_.>\|ü’Éý¶ˆU¦ª©‡q+Öºž".Fa·{#j¦¿‰q	GÁ{*ª¶>à¡>òi¯�Ê…{”¸ÕG^ñ�j}d¶75ÅO^Ò—_@GUY"ÐRi©u‘8F&ÌãrÅ²A0;ƒ‰q�Å ² h¨Êò€�úÈ@”�+zaTÀÂˆP„•ì“4:ÿü+ˆ£#¥Û(ˆ£·AM­«Â?`í¹�|§[ Òn¸Æƒ- �Œjì˜¨�L$Ú‹$YlÃ‹$Yìè"É³˜¢é3h¤£i¤*cfê#3yh$n÷©%ŽU·;%aeRÉ Ë„TgƒÀGß•�Šßãà>ÌÎÞ¿è¯y,ÎÞýh îc*Í  
\ No newline at end of file
diff -Naur ns-3.19/src/lr-wpan/doc/lr-wpan-data-example.dia ns-3.20/src/lr-wpan/doc/lr-wpan-data-example.dia
--- ns-3.19/src/lr-wpan/doc/lr-wpan-data-example.dia	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.20/src/lr-wpan/doc/lr-wpan-data-example.dia	2014-06-17 10:33:13.894995954 -0700
@@ -0,0 +1,34 @@
+‹     í�YoÜH’Çßõ)
+j ÑätÞGsì�WÞE/`c´í^ìÎ“@UQRm³ŽaQvkö³O,©¤"u™eg+´[%Óü“Tð—™‘ùë³rô¥¨VÓÅüí!AøpTÌÇ‹Ét~ñöð¿û�×úð¯ïþ2™æ?Ûÿ.ª|6²ÿb¾rŸÞ^Öõòç7o¾~ýŠÊëU^/*TN¯ÐªxóÿyYæoìAoßŒF›'˜äuî~Öü4¯ëjzvU£y>+Þžåãß/ªÅÕ|rŽjŽ/ÊE5ú’—o8÷_‡ošÓ¼¹sžÎ½Ì/Š³ªÈï>5¶_ÆìrêeQÝ?íl¹XMí!õõrë�Žó¸?7ŽiŽZÙƒæï~xÏ—Ôüàö\mÚ)RÏòêb:ßÖ±Ï¦‚"M)µCm°âŠ¬ŸÉóåÎö+WîW®Ú¯Ütuº\Tu•OëmÉ³Å¢,òyP­««bw�Õ8/­‰=t[=îâ|Z×‹G®ÿ</WO¹�ðã›·í¹oîE5�<üâÞ9¢ã,_§“úòô�H�+œý:ÒÙ¿LWÓ³²h»úé¼ìô×ÃœþþoÇÓûöŸ÷´†p¶Îáa¢QˆçWÓI±zÄÌîÓq¦Ëæ°7�=õûÇ=õÁ„Ý¬½D™_Usú»¦GÍ/¸!Î(×Ó/ëOÏdqöÅ¸nnös�Ï'y5½ýVüQn8!‡£éäíáßðÝ§uÿþìÙ,·×rqcSa*ŽA„Ý
+Ûé’8;»¯PÙ›ÈçeqG#ÁDF"ÚIRMÅn¢µ{�˜ü½cºî}„;ÇÝs'>�—«ö7ükñ�«bU�~:©«Ë:;±¿Ü¢þñ¢ÎFËWÇ¯ióóºíjÜÏGçùlZ^Û‹Îç«ÃÑª¾vöd½ÑðO)Ê/E=ç›fÿü+¸,¦—­×pËQŒ4¾ûÅû‰Þ5Ò'ê.Rwáõ€‡‹q?!ë\ÌgEûï³˜_ÍšgùD•V4=ïµùâ/éþ‹s{)�! ü0 jwf‘¾Ì¢Ö#GT"#"RkC‡	‘Ý|TˆàÈPŠ¥K,%ˆ%ÚKc”3K·:Äaéö£,–º-°” –X_,Y[°Ž³@’Æ„ÒZ³lý­R
+h4j7@`Q‚,âýg›¬%$¢N5Y	m]!‘5jR€Wj3>€P‚}!$-Ž�J¡ A<†ÖzÀ!àP‡ýˆ¾?}øhdqT-’}!ÄWÖ
+8b11dUhPÉFäˆâ]©7+êü1M¦ãz·³e1;/ªùvîÏ�ÏÌËø4�íçv“†"‘PÜl|õÐÚ"Ð=1‰Èö0º›X9��Ý¾Ñ"Ü`B$é#æ sUm[D7zž#q>-Ë'HÜMq{žÄêrñõ´%�îñ$¡g?+?¼uÓ
+o¥)´&¬<Gv™O&wÇù-c`‚	Á˜uP£Š)®	¸&D"%Ýˆ¡�üsy'dÞÉy9]ž^.ªé?­9åe$²xë—8[|Xã^Šà³ yuæR‹Ã�5LÌ§úº[†Í#ú[72Ò¾»"ÛPüa;â¿½Æ7j>·ï¯%ÍjëýZÿÍèÒ²©±Ïzá#¿Ñíß¶Hm�´°©û›ÒN6²Á4j°é›
+d”‹6é5iG›=Ú£MÓn ˆDŒ6ÝlÀf`kD›mB´	¾Ð7ó…ŒK 
+& ÞÜC¼Ù#|Q§ép*„�û`âú\kí&ú3¢cÔ«•B¼yòËß³Ñ1ÛjŠr¦X:ƒ˜[�¹*êÒã†áÙÆ'­!-°Ôm‰ ¦dæÂt”¹°[
+~´ñìñš‚½+	GJææé¥"QW¬%Ä)Ùè—fÄ F\ù³³~¦wSvÏõ´˜OüítŸ-‡Dýq;ÂÙÜxyÿRÚZ<kZk>9Í«jñµÛ¾)íyêÓ²˜_<<•ÅºÙ¸›ä£“gÏUÈ½è]g�¯��éXx	é3+5H¬�¢ÝøÀ—H1Èaä ’ È0½ˆ §‹‚¼á¯qi&‘Ë~MDÖÈqèA äk·>€Þ÷ì�uM¶ˆþ
+�»D\a†s:Ü#!˜æ®X„J{š¥íÛŽbîzL°¼Ü	–ÞucÖ�5PFÆ|�nd˜Ê¬acû&	DH
+AÍ§ã“Ï¯?¿?�!>ößn‹0Ê§8çÒ»Â‚".Ž8ÂQ;Ÿ9fÿY#G!Ú µ[p(Eé$êÓö5‰ì J3‚C‚•´a
+ÒÉð�öäµ˜"p)E.õNÆˆYZDD’SHb‘-Ëâ€¡6Ë¥ØžÐ6_7E‘ÈmóB3*æá“NÃ9úøéßÁ=ÚSóü6{:¥H§Þ)¹¯må·Æ$SÐP>wp­Éƒ@£û¥H": ‰¸oÐI"³ˆ7‹ÆFA’Á|6Ð¨Ë�G)ò¨63AÊõ-�šÈì442–E�œ‰Ú­8”"‡È'V~HÒqóø‚®¼‹»u5ÂNF¶�ÝCZñ¶�RäQï¼b"ÕQ[ì42Ô·Ø¡IîEÓè°³Þ½úx1?ŸV³ÑO«:¯¯V@ªøŽS«y«RdÕ iÛD¸j5%)h0,²ð½Df·Fíö$J‘Dý;á»tk	Q£¸µˆ‹âÂ÷2‘PÝ/j1@`QŠ,Òý»yKPQ»…Ò5ß-¨±;àp¨Íø€B‰íÂH{ge»¢VïSÓË Ã­CÄ‘>"™„7ÇèÿÜž²;†A’5[1RÁÇ*âîI¼)ÆìŽñâvÇ °;ø'ß‹bXØ(L»cÀîßÏî÷÷»´ôÔ‚Gu»tp»Œs»˜Koò-ÊL
+ }5z?™Œ.‹|RT#û+ÕU>-‹ê€½ý×UqUŒ–vÈ,,%í+||ü�É­VQc‚]ÍXïzJíøÌÕÅ–'2f9E’cí…¸P.�HÎýÎ„ñ[›uÝfû‘~÷Gèoöbû›±ÞÅn{\áfGdÌ¥òl¬c@#îƒæ)øã2_­F«ÿYæóOùFýØ£~«IÂ¨ŸàŠc¬žKo
+qÏ½Æ~ñÜ¯`Ñ
+XÔn@¢IÄ¨
+cn2ƒD.ó›G‰Pæ¡DPÔe€À¢ÄVÐYÿ*ƒH˜d%Q—Ð�NXr&\dT#í}r�ð"ú �VÑaVÑa¼”®Yi†ŒËè–Ñaý»ZF—8_&zq×÷2Á÷ÒÎ÷Rˆ»Æ}D#“ÄJ:5úµøÇU±ªÝ2ùÁOÓÙÒº2öíþô~ä*b‹ƒY>¾´CÛ«`rôÈ±Õj!vLq«ÿ¾!ØµGw¡œˆ¹â·–qÌ
+3^T¥³æ–üŽW³ü8HEw[í •"¤ô É>Ì™BÔÍ¤ƒˆkpcÕ
+˜lu °(Eõ.Ys›êÚ�‰’¸¹Ókì“§­ý	sdÿä©D|Á[:¹¼þùçƒ“rV�ó&ZEðZMx• ¯xïRfÑáL�E„UÐÀHa‘­õ8¤LŒÚíH”`Éï_²ÁmjXÜ’†Œ2ÄqÁ3+l9ª#°Œ]²Ñq›­G2QßQÅÆªÎ«:VÍÆÆÉ÷Wµ±)ú�Ömp:ÀJ£nÜu(îÌZ»tÄFPÂ	óã|Š`œ7MøuI©‘Áv°—,cQª•›$Ê$�|$Z'IšFÑ ¬èSº­V
+ÈJY½«9¨7uyÉK·¸ä¿3à8‡ZM”"ƒzWrPƒ¤µ…˜{i4ÖKÇC�že�HÔf€@¢I$¨²§ÆFR<n�[ßD#nŒpó¡2‰¤@¹¿}.êß~ý__ì‹Ýû+Éo1V WŠäRC,v{Ÿ&j¦`£B|ªà�$ä
+�:mx”"�z'.3ß±ÒgïÅäQP!¾¶B#åªÃ(C"	7Jßs£&n»Dðžö«6X¥«!2›µãFÔiðµˆ›_Sá £.%È"Ñ;kÙ:3ñY´ñ‹rX,zØ �E)²ˆá‘Q™Èžñ¾¸/‘È0ÇñDâ8õàt8¤5íÑ‡Ú6V WŠäê�NÂ!$¦D¬ÁaßÙ#(RH* u˜ Ð(Áú/Áh™íËGdì–ÙK§#4–¾N…S¶ë1<ríWÛ-¶ÖJ0ûNHØ¨ç>žDô�yÄ~^>@_.Þg;§§½,n‘Rù
+®Ýèmÿ/]Ž}Yvî‰üôBÉ–[lyY(âþ
+ll•þûÒåêöÏžuÉ£çð7"~Â°ù&ÁÑí2@ptStt{çÏ­Eè  b6^ÑaùÞ÷9È¬W©µô#êÎ­øŸ<xwÞcë¡”í.Ló]]pØž2¡í)»Þ¬Þù�„#IõÛ³Q³TÆ*	éÖ*ILæ÷ªä~›JªElÏ¸ó6[cIÌ™	Öq�D^v'Ñ¿×êíŽÜÄõ¦×JÒ;ÑÙæ^àRƒKÝmŠàWïÕ¯¾yPó¹}ƒ-oV[¯ØúoF—–P�‰Ö‹°ÃÙèö¯[´¶Î:€@ ¾v]²w.&aÈ>q“¬¦F‚$4³($”P/«pôe»í;l9H"ìú:ºK4°v÷çŸÅèð,$`mÏíßEâ¦åÒrÖŠ�–E—	‚3‘`’ ¤l®#=(täÝu‚
+ÛëHo}OG]6<J‘GC¤	2_ö9K0T{‰l­'Á5µÛ�(EõÎÁÔz+Œ¸tHF2Ôòhã£$’:¨”"•zgº
+ƒ¨qï$Š¹‰Î†vTºý¨€J@¥NC*}TúðÑÉ×a·©w¾+cÈ—ª¤UÌ6gV†šqêk¨vßzVÔùc,šLÇõŽ«e1;/ªyQE}p^ç‘…�åæö“Z[,º'Æ§fókÇ+§óâñ Ò°Žp{Wdç¬g/æXsUm›D7�ž#q>-Ë'Hœû¯Ó/_OÏòñïÕâj>¹/s¶X”E>BuuUôxV~ ë†ÞZG½ý¥íh|Ë|2¹;âo/
+&cÃ¨bÊ€“N
+SH{Æ*¤þl“ËdnÊy9]ž^.ªé?­Aååƒl9ÏËÕŽpñ2ÖCqæMduu¶²§/wfÔ@¡`ÿv×·Æ-¢®ÞÝIdL¶ùN1± `¶Ó!L&AÑÆ�ß$S[öï²­]¯>¹é¿‘¡ç#-ÿ�~]äKqvÞ€KP—Àô¢]2Õ»f„q$œdÔvo·:X9bê?h’O>¼þüþH�„íÆ L°;�ê]}ÃD¨ã¢Q.ã²I)Cœ1‚gV˜aªürÆ2rM[×m¶IÜE)ÝC^v÷E˜ÛýN###G?�Sn:Fê³Hÿ/‡QñO›)Â¨Ÿâ¨Ïèæò…DäN”kãt¸ÑÆuòà˜�#æúB»¡nÛ=¶æ¯è[÷ÙCïÜ~fƒD!‰ZŠÄ,Ä¶J\)é•¨‹Q)¡hì&��7Ù~(–áÂè®ÏãÏî	Š=x~ûiP®Ä0@µæ"cÕít„ýæÍÓ TL÷Ô{÷Øúî(‘
+Q»\9@\m„ß†�¨®£CN9q¥zX¦àõ›õYŸòñÍNÇ°1Ö¾Â�vó„p ÁeZ¥pÿ¨·…¸Žõ˜Â"[ëAÿ Q‡ý‰R$Qÿä5ZQD�—"Ô�€ÙZPAò ¨Ã �E‰q*3@'ÆÂuÁ¤1÷U`B¡¯§+âô;õ1•tgÏçö”Nƒoj8©à†c±†SÞÔU†/F¡†j8¡†<”o¶’«”
+íÏ”pî¡„sw´¼¨
+N=Dž,uî�@8vž,n„e#,´
+;Lð ûéøä³K–=8 øÕ¨*f‹/Åh–�.‹|RT#û›ÕU>-‹
+x¼‡|Ú6£… 1Á	,Ý?Ÿ–ºýp]ó^wÝïF‡ÑŒ3¤Eè`žÆâß§ñråÖûþsnÒÜW{ütRW?–uvbÝý¢þñ¢ÎFËW@¯èôj·W W‚y�š�µ@´ÃÓ‘ý/C5óBÌ—X?L;³=T´ÜbëqÔ^¡Ûk
+*^x%€f¼XÒZµFÎ
+2XÙ¸ÆebI¦Üg­Rˆk�©?-¦~ŠáÊ‰ßn'EŠ¢néy£BDHþñ,¹�ºlx”"�Ä Í«HˆFã6¯
+"ûîU$Ìœ@2"à¨Ã�F)Ò¨w‡käj+b–ô	‚¸Û˜´Ñ³,µ �è›’(|.óë¢zw>Øÿ.ª|öîà_@“÷€›£ 
\ No newline at end of file
diff -Naur ns-3.19/src/lr-wpan/doc/lr-wpan-primitives.dia ns-3.20/src/lr-wpan/doc/lr-wpan-primitives.dia
--- ns-3.19/src/lr-wpan/doc/lr-wpan-primitives.dia	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.20/src/lr-wpan/doc/lr-wpan-primitives.dia	2014-06-17 10:33:13.894995954 -0700
@@ -0,0 +1,5 @@
+‹     í›]oÛ6†ïó+õf\šß"ë&6`Ø€bÖö: -ÆÑ*KžD;ñÍ~ûHIib[JbËJ«Nò!áø¼$uÎ#òP~ûîv{k�åQšœû@ßÓÉ,£d~îúøËká¿»8{Fê�ý™gjáÙO$¹;;÷¯�Y¾�onn@¼É•I3G+�ëñ¿*ŽÕØ�ý‹3Ï{è TF¹kÕUeLMWF{‰ZèsªfŸçYºJB¿´ªìfiœfÞZÅçþ««âðÇ•›ñ–ŸG|/Õ\O3­>7»†ö�ò×K�íº],Ó<²&f³Ü3iðã~?°©¬rk”Ì/^½×ÆèìUÙ¬êâ½¿ºÆ6
+™…ÊæQ²¯eÇ'.F¤;8Œ@�»q9\nú²rñËÊe/+å—Ë43™ŠÌ¾ä4Mc­’RÕd+}¼N>S±±Çº…Ž÷~“>Ñþ+çÏé@yùKÆš½ó,
+OÞ-‹/7Qh®/o;®Òû¦#ïë(�¦±®k}”˜“¹ßœÆýîÝ)~ÿñ–ÑPzk|D„B3ÍDÌWQ¨ó'ÂlÛ¦ÁÓue6~jÔwíž;0å¥�v!«�Î*÷?Ý?ª½êWÄñÔÌDë»³c’NÿÖ3SuöƒQI¨²Ð{í}Ô·Æ0ñ½(<÷ÿ€Û£µÛ?ëÍ‚po¸–é—˜â ²Ûƒ}‚4	L§»þ3Û•Ìc½¥�›Àv'â#%�‰'Â}Ç¦‰ÞÅü`Ëng:ñ—þg¥sÓ0Ÿx$	›ˆž&¦NÏ]÷®Ô"Š7¶Y*É}/7-v¾Y~ôW¯µ‰fêaPÞ‚kÍ¯kÛpOIÜ>h;Ñí|f#´¦Gf°¶²�ýy²ÐõwS'«E5’ÏT©ÅÎai±.š´›÷M!Od[y±ÄÏñ<Bíydñ @Ð)Ž
+	Ž‚ 8¬8ú9M®¢l1à¨{íFá@£Ò·¥µ`¡NiTI@Â&>Â àŒô Ft¶ŽfÚû”ëìì‡ß_»¿?þÿÐ$¡RŒ#$�„¼k4í‡ä€¦¢‰´E‚€‘€E—k·JŽ'ˆ‚˜%a°O„ú3K×v™_Pê½[ž˜êSõá9 ª‡¨¢­Q I\,Ò)ªîdP0ÁPêP%!&S¥ŠÌ�R=¤kK)]Ò†B—ŒºÁŒMÊÿ1€½(…E§®aT€Š¾e½�ý E°Bo]1€:¤’J‚Ý†K …+<ÒªÚ…‘Ç)ÏÒ$¹ÔIXôã€ÞíHÀ™³9’ŠönÏ–»úu›è‡8µ»TY–Þ4Æ-]_Æ:™›ëý›w%ÖV¢xI¢�ÂiR$h›"06’˜�¦	£‘ œ²@Ø4ár4ruZIHÇiRÓÃ}#›±#9¤É÷š&¢}šÈbŠÙešH ¨ˆ�¹H»v#dç1vÕ=B¨(vž&{=¬5*šó52å4‘ [a8 „7TÄ]îh¹21)îIQ2¦ÂrÌ~pl>;ûXkJ+ƒÃ>FÓð‘Á%vÆÅ9ë6.*ÈAdÁÁ™›é	FEðí/�KB»ö4vø‡Åpç•¹ú ÖÃ}|)�`�S�#F·[•.…!(± h	%úð¾j¾L“\|z��ƒºˆøÔÃzÂ§˜B¹hà ¢Ž§PLräžŠÒÎ«Ÿ(ÜêR$:/Ü5ô²¶’�eiÈ‡"Þw[�@ä{nÌŠ ¨ë¥‡]ZXÂ¥§µ²TÐÎy�¬Í/FKÃ¡öý¤MÓt˜ž m°fÚñN5¶ åFµ“ãÃ>õ0õ­�¾aÚÛÇeyëWf�ÈÕïp§ÏîB„nIt'H(jÀ�E_•Eåyñ-ø‹³­¯É_œý
+B,NG  
\ No newline at end of file
diff -Naur ns-3.19/src/lr-wpan/doc/lr-wpan.rst ns-3.20/src/lr-wpan/doc/lr-wpan.rst
--- ns-3.19/src/lr-wpan/doc/lr-wpan.rst	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.20/src/lr-wpan/doc/lr-wpan.rst	2014-06-17 10:33:13.895995946 -0700
@@ -0,0 +1,258 @@
+PageBreak
+
+Low-Rate Wireless Personal Area Network (LR-WPAN)
+-------------------------------------------------
+
+This chapter describes the implementation of ns-3 models for the
+low-rate, wireless personal area network (LR-WPAN) as specified by
+IEEE standard 802.15.4 (2006).
+
+Model Description
+*****************
+
+The source code for the lr-wpan module lives in the directory ``src/lr-wpan``.
+
+Design
+======
+
+The model design closely follows the standard from an architectural standpoint.
+
+.. _fig-lr-wpan-arch:
+
+.. figure:: figures/lr-wpan-arch.*
+
+    Architecture and scope of lr-wpan models
+
+The grey areas in the figure (adapted from Fig 3. of IEEE Std. 802.15.4-2006)
+show the scope of the model.
+
+The Spectrum NetDevice from Nicola Baldo is the basis for the implementation.
+
+The implementation also plans to borrow from the ns-2 models developed by 
+Zheng and Lee in the future.
+
+APIs
+####
+
+The APIs closely follow the standard, adapted for ns-3 naming conventions
+and idioms.  The APIs are organized around the concept of service primitives
+as shown in the following figure adapted from Figure 14 of 
+IEEE Std. 802.15.4-2006.
+
+.. _fig-lr-wpan-primitives:
+
+.. figure:: figures/lr-wpan-primitives.*
+
+    Service primitives
+
+The APIs are organized around four conceptual services and service access
+points (SAP):
+
+* MAC data service (MCPS)
+* MAC management service  (MLME)
+* PHY data service (PD)
+* PHY management service (PLME)
+
+In general, primitives are standardized as follows (e.g. Sec 7.1.1.1.1
+of IEEE 802.15.4-2006):::
+
+  MCPS-DATA.request      (
+                          SrcAddrMode,
+                          DstAddrMode,
+                          DstPANId,
+                          DstAddr,
+                          msduLength,
+                          msdu,
+                          msduHandle,
+                          TxOptions,
+                          SecurityLevel,
+                          KeyIdMode,
+                          KeySource,
+                          KeyIndex
+                          )
+
+This maps to ns-3 classes and methods such as:::
+
+  struct McpsDataRequestParameters
+  {
+    uint8_t m_srcAddrMode;
+    uint8_t m_dstAddrMode;
+    ...
+  };
+
+  void
+  LrWpanMac::McpsDataRequest (McpsDataRequestParameters params)
+  {
+  ...
+  }
+
+MAC
+###
+
+The MAC at present implements the unslotted CSMA/CA variant, without beaconing.
+Currently there is no support for coordinators and the relavant APIs.
+
+The implemented MAC is similar to Contiki's NullMAC, i.e., a MAC without sleep
+features. The radio is assumed to be always active (receiving or transmitting),
+of completely shut down. Frame reception is not disabled while performing the
+CCA.
+
+The main API supported is the data transfer API
+(McpsDataRequest/Indication/Confirm).  CSMA/CA according to Stc 802.15.4-2006,
+section 7.5.1.4 is supported. Frame reception and rejection according to
+Std 802.15.4-2006, section 7.5.6.2 is supported, including acknowledgements.
+Only short addressing completely implemented. Various trace sources are
+supported, and trace sources can be hooked to sinks.
+
+PHY
+###
+
+The physical layer components consist of a Phy model, an error rate model, 
+and a loss model.  The error rate model presently models the error rate 
+for IEEE 802.15.4 2.4 GHz AWGN channel for OQPSK; the model description can 
+be found in IEEE Std 802.15.4-2006, section E.4.1.7.   The Phy model is 
+based on SpectrumPhy and it follows specification described in section 6 
+of IEEE Std 802.15.4-2006. It models PHY service specifications, PPDU 
+formats, PHY constants and PIB attributes. It currently only supports 
+the transmit power spectral density mask specified in 2.4 GHz per section 
+6.5.3.1. The noise power density assumes uniformly distributed thermal 
+noise across the frequency bands. The loss model can fully utilize all 
+existing simple (non-spectrum phy) loss models. The Phy model uses 
+the existing single spectrum channel model.
+The physical layer is modeled on packet level, that is, no preamble/SFD
+detection is done. Packet reception will be started with the first bit of the
+preamble (which is not modeled), if the SNR is more than -5 dB, see IEEE
+Std 802.15.4-2006, appendix E, Figure E.2. Reception of the packet will finish
+after the packet was completely transmitted. Other packets arriving during
+reception will add up to the interference/noise.
+
+Currently the receiver sensitivity is set to a fixed value of -106.58 dBm. This
+corresponds to a packet error rate of 1% for 20 byte reference packets for this
+signal power, according to IEEE Std 802.15.4-2006, section 6.1.7. In the future
+we will provide support for changing the sensitivity to different values. 
+
+.. _fig-802-15-4-per-sens:
+
+.. figure:: figures/802-15-4-per-sens.*
+
+    Packet error rate vs. signal power
+
+
+NetDevice
+#########
+
+Although it is expected that other technology profiles (such as 
+6LoWPAN and ZigBee) will write their own NetDevice classes, a basic
+LrWpanNetDevice is provided, which encapsulates the common operations
+of creating a generic LrWpan device and hooking things together.
+
+Scope and Limitations
+=====================
+
+Future versions of this document will contain a PICS proforma similar to
+Appendix D of IEEE 802.15.4-2006.  The current emphasis is on the 
+unslotted mode of 802.15.4 operation for use in Zigbee, and the scope
+is limited to enabling a single mode (CSMA/CA) with basic data transfer
+capabilities. Association with PAN coordinators is not yet supported, nor the
+use of extended addressing. Interference is modeled as AWGN but this is
+currently not thoroughly tested.
+
+The NetDevice Tx queue is not limited, i.e., packets are never dropped
+due to queue becoming full. They may be dropped due to excessive transmission 
+retries or channel access failure.
+
+References
+==========
+
+* Wireless Medium Access Control (MAC) and Physical Layer (PHY) Specifications for Low-Rate Wireless Personal Area Networks (WPANs), IEEE Computer Society, IEEE Std 802.15.4-2006, 8 September 2006.
+* J. Zheng and Myung J. Lee, "A comprehensive performance study of IEEE 802.15.4," Sensor Network Operations, IEEE Press, Wiley Interscience, Chapter 4, pp. 218-237, 2006.
+
+Usage
+*****
+
+Enabling lr-wpan
+================
+
+Add ``lr-wpan`` to the list of modules built with ns-3.
+
+Helper
+======
+
+The helper is patterned after other device helpers.  In particular,
+tracing (ascii and pcap) is enabled similarly, and enabling of all
+lr-wpan log components is performed similarly.  Use of the helper
+is exemplified in ``examples/lr-wpan-data.cc``.  For ascii tracing,
+the transmit and receive traces are hooked at the Mac layer.
+
+The default propagation loss model added to the channel, when this helper
+is used, is the LogDistancePropagationLossModel with default parameters.
+
+Examples
+========
+
+The following examples have been written, which can be found in ``src/lr-wpan/examples/``:
+
+* ``lr-wpan-data.cc``:  A simple example showing end-to-end data transfer.
+* ``lr-wpan-error-distance-plot.cc``:  An example to plot variations of the packet success ratio as a function of distance.
+* ``lr-wpan-error-model-plot.cc``:  An example to test the phy.
+* ``lr-wpan-packet-print.cc``:  An example to print out the MAC header fields.
+* ``lr-wpan-phy-test.cc``:  An example to test the phy.
+
+In particular, the module enables a very simplified end-to-end data
+transfer scenario, implemented in ``lr-wpan-data.cc``.  The figure
+shows a sequence of events that are triggered when the MAC receives
+a DataRequest from the higher layer.  It invokes a Clear Channel
+Assessment (CCA) from the PHY, and if successful, sends the frame
+down to the PHY where it is transmitted over the channel and results
+in a DataIndication on the peer node.
+  
+.. _fig-lr-wpan-data:
+
+.. figure:: figures/lr-wpan-data-example.*
+
+    Data example for simple LR-WPAN data transfer end-to-end
+
+The example ``lr-wpan-error-distance-plot.cc`` plots the packet success
+ratio (PSR) as a function of distance, using the default LogDistance
+propagation loss model and the 802.15.4 error model.  The channel (default 11),
+packet size (default 20 bytes) and transmit power (default 0 dBm) can be
+varied by command line arguments.  The program outputs a file named
+``802.15.4-psr-distance.plt``.  Loading this file into gnuplot yields
+a file ``802.15.4-psr-distance.eps``, which can be converted to pdf or
+other formats.  The default output is shown below. 
+
+.. _fig-802-15-4-psr-distance:
+
+.. figure:: figures/802-15-4-psr-distance.*
+
+    Default output of the program ``lr-wpan-error-distance-plot.cc``
+
+Tests
+=====
+
+The following tests have been written, which can be found in ``src/lr-wpan/tests/``:
+
+* ``lr-wpan-ack-test.cc``:  Check that acknowledgments are being used and issued in the correct order.
+* ``lr-wpan-collision-test.cc``:  Test correct reception of packets with interference and collisions.
+* ``lr-wpan-error-model-test.cc``:  Check that the error model gives predictable values.
+* ``lr-wpan-packet-test.cc``:  Test the 802.15.4 MAC header/trailer classes
+* ``lr-wpan-pd-plme-sap-test.cc``:  Test the PLME and PD SAP per IEEE 802.15.4
+* ``lr-wpan-spectrum-value-helper-test.cc``:  Test that the conversion between power (expressed as a scalar quantity) and spectral power, and back again, falls within a 25% tolerance across the range of possible channels and input powers.
+
+Validation
+**********
+
+The model has not been validated against real hardware.  The error model
+has been validated against the data in IEEE Std 802.15.4-2006, 
+section E.4.1.7 (Figure E.2). The MAC behavior (CSMA backoff) has been 
+validated by hand against expected behavior.  The below plot is an example 
+of the error model validation and can be reproduced by running
+``lr-wpan-error-model-plot.cc``:
+
+.. _fig-802-15-4-ber:
+
+.. figure:: figures/802-15-4-ber.*
+
+    Default output of the program ``lr-wpan-error-model-plot.cc`` 
+
+
diff -Naur ns-3.19/src/lr-wpan/examples/lr-wpan-data.cc ns-3.20/src/lr-wpan/examples/lr-wpan-data.cc
--- ns-3.19/src/lr-wpan/examples/lr-wpan-data.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.20/src/lr-wpan/examples/lr-wpan-data.cc	2014-06-17 10:33:13.895995946 -0700
@@ -0,0 +1,163 @@
+/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2011 The Boeing Company
+ *
+ * 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:  Tom Henderson <thomas.r.henderson@boeing.com>
+ */
+
+/*
+ * Try to send data end-to-end through a LrWpanMac <-> LrWpanPhy <->
+ * SpectrumChannel <-> LrWpanPhy <-> LrWpanMac chain
+ *
+ * Trace Phy state changes, and Mac DataIndication and DataConfirm events
+ * to stdout
+ */
+#include <ns3/log.h>
+#include <ns3/core-module.h>
+#include <ns3/lr-wpan-module.h>
+#include <ns3/propagation-loss-model.h>
+#include <ns3/propagation-delay-model.h>
+#include <ns3/simulator.h>
+#include <ns3/single-model-spectrum-channel.h>
+#include <ns3/constant-position-mobility-model.h>
+#include <ns3/packet.h>
+
+#include <iostream>
+
+using namespace ns3;
+
+static void DataIndication (McpsDataIndicationParams params, Ptr<Packet> p)
+{
+  NS_LOG_UNCOND ("Received packet of size " << p->GetSize ());
+}
+
+static void DataConfirm (McpsDataConfirmParams params)
+{
+  NS_LOG_UNCOND ("LrWpanMcpsDataConfirmStatus = " << params.m_status);
+}
+
+static void StateChangeNotification (std::string context, Time now, LrWpanPhyEnumeration oldState, LrWpanPhyEnumeration newState)
+{
+  NS_LOG_UNCOND (context << " state change at " << now.GetSeconds ()
+                         << " from " << LrWpanHelper::LrWpanPhyEnumerationPrinter (oldState)
+                         << " to " << LrWpanHelper::LrWpanPhyEnumerationPrinter (newState));
+}
+
+int main (int argc, char *argv[])
+{
+  bool verbose = false;
+
+  CommandLine cmd;
+
+  cmd.AddValue ("verbose", "turn on all log components", verbose);
+
+  cmd.Parse (argc, argv);
+
+  LrWpanHelper lrWpanHelper;
+  if (verbose)
+    {
+      lrWpanHelper.EnableLogComponents ();
+    }
+
+  // Enable calculation of FCS in the trailers. Only necessary when interacting with real devices or wireshark.
+  // GlobalValue::Bind ("ChecksumEnabled", BooleanValue (true));
+
+  // Create 2 nodes, and a NetDevice for each one
+  Ptr<Node> n0 = CreateObject <Node> ();
+  Ptr<Node> n1 = CreateObject <Node> ();
+
+  Ptr<LrWpanNetDevice> dev0 = CreateObject<LrWpanNetDevice> ();
+  Ptr<LrWpanNetDevice> dev1 = CreateObject<LrWpanNetDevice> ();
+
+  dev0->SetAddress (Mac16Address ("00:01"));
+  dev1->SetAddress (Mac16Address ("00:02"));
+
+  // Each device must be attached to the same channel
+  Ptr<SingleModelSpectrumChannel> channel = CreateObject<SingleModelSpectrumChannel> ();
+  Ptr<LogDistancePropagationLossModel> propModel = CreateObject<LogDistancePropagationLossModel> ();
+  Ptr<ConstantSpeedPropagationDelayModel> delayModel = CreateObject<ConstantSpeedPropagationDelayModel> ();
+  channel->AddPropagationLossModel (propModel);
+  channel->SetPropagationDelayModel (delayModel);
+
+  dev0->SetChannel (channel);
+  dev1->SetChannel (channel);
+
+  // To complete configuration, a LrWpanNetDevice must be added to a node
+  n0->AddDevice (dev0);
+  n1->AddDevice (dev1);
+
+  // Trace state changes in the phy
+  dev0->GetPhy ()->TraceConnect ("TrxState", std::string ("phy0"), MakeCallback (&StateChangeNotification));
+  dev1->GetPhy ()->TraceConnect ("TrxState", std::string ("phy1"), MakeCallback (&StateChangeNotification));
+
+  Ptr<ConstantPositionMobilityModel> sender0Mobility = CreateObject<ConstantPositionMobilityModel> ();
+  sender0Mobility->SetPosition (Vector (0,0,0));
+  dev0->GetPhy ()->SetMobility (sender0Mobility);
+  Ptr<ConstantPositionMobilityModel> sender1Mobility = CreateObject<ConstantPositionMobilityModel> ();
+  // Configure position 10 m distance
+  sender1Mobility->SetPosition (Vector (0,10,0));
+  dev1->GetPhy ()->SetMobility (sender1Mobility);
+
+  McpsDataConfirmCallback cb0;
+  cb0 = MakeCallback (&DataConfirm);
+  dev0->GetMac ()->SetMcpsDataConfirmCallback (cb0);
+
+  McpsDataIndicationCallback cb1;
+  cb1 = MakeCallback (&DataIndication);
+  dev0->GetMac ()->SetMcpsDataIndicationCallback (cb1);
+
+  McpsDataConfirmCallback cb2;
+  cb2 = MakeCallback (&DataConfirm);
+  dev1->GetMac ()->SetMcpsDataConfirmCallback (cb2);
+
+  McpsDataIndicationCallback cb3;
+  cb3 = MakeCallback (&DataIndication);
+  dev1->GetMac ()->SetMcpsDataIndicationCallback (cb3);
+
+  // Tracing
+  lrWpanHelper.EnablePcapAll (std::string ("lr-wpan-data"), true);
+  AsciiTraceHelper ascii;
+  Ptr<OutputStreamWrapper> stream = ascii.CreateFileStream ("lr-wpan-data.tr");
+  lrWpanHelper.EnableAsciiAll (stream);
+
+  // The below should trigger two callbacks when end-to-end data is working
+  // 1) DataConfirm callback is called
+  // 2) DataIndication callback is called with value of 50
+  Ptr<Packet> p0 = Create<Packet> (50);  // 50 bytes of dummy data
+  McpsDataRequestParams params;
+  params.m_srcAddrMode = SHORT_ADDR;
+  params.m_dstAddrMode = SHORT_ADDR;
+  params.m_dstPanId = 0;
+  params.m_dstAddr = Mac16Address ("00:02");
+  params.m_msduHandle = 0;
+  params.m_txOptions = TX_OPTION_ACK;
+//  dev0->GetMac ()->McpsDataRequest (params, p0);
+  Simulator::ScheduleWithContext (1, Seconds (0.0),
+                                  &LrWpanMac::McpsDataRequest,
+                                  dev0->GetMac (), params, p0);
+
+  // Send a packet back at time 2 seconds
+  Ptr<Packet> p2 = Create<Packet> (60);  // 60 bytes of dummy data
+  params.m_dstAddr = Mac16Address ("00:01");
+  Simulator::ScheduleWithContext (2, Seconds (2.0),
+                                  &LrWpanMac::McpsDataRequest,
+                                  dev1->GetMac (), params, p2);
+
+  Simulator::Run ();
+
+  Simulator::Destroy ();
+  return 0;
+}
diff -Naur ns-3.19/src/lr-wpan/examples/lr-wpan-error-distance-plot.cc ns-3.20/src/lr-wpan/examples/lr-wpan-error-distance-plot.cc
--- ns-3.19/src/lr-wpan/examples/lr-wpan-error-distance-plot.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.20/src/lr-wpan/examples/lr-wpan-error-distance-plot.cc	2014-06-17 10:33:13.895995946 -0700
@@ -0,0 +1,162 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2011 The Boeing Company
+ *
+ * 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: Tom Henderson <thomas.r.henderson@boeing.com>
+ */
+
+// This program produces a gnuplot file that plots the packet success rate
+// as a function of distance for the 802.15.4 models, assuming a default
+// LogDistance propagation loss model, the 2.4 GHz OQPSK error model, a
+// default transmit power of 0 dBm, and a default packet size of 20 bytes of
+// 802.15.4 payload.
+#include <ns3/test.h>
+#include <ns3/log.h>
+#include <ns3/callback.h>
+#include <ns3/packet.h>
+#include <ns3/simulator.h>
+#include <ns3/lr-wpan-error-model.h>
+#include <ns3/propagation-loss-model.h>
+#include <ns3/lr-wpan-net-device.h>
+#include <ns3/spectrum-value.h>
+#include <ns3/lr-wpan-spectrum-value-helper.h>
+#include <ns3/lr-wpan-mac.h>
+#include <ns3/node.h>
+#include <ns3/net-device.h>
+#include <ns3/single-model-spectrum-channel.h>
+#include <ns3/mac16-address.h>
+#include <ns3/constant-position-mobility-model.h>
+#include <ns3/uinteger.h>
+#include <ns3/nstime.h>
+#include <ns3/abort.h>
+#include <ns3/command-line.h>
+#include <ns3/gnuplot.h>
+
+#include <fstream>
+#include <iostream>
+#include <string>
+#include <vector>
+
+using namespace ns3;
+using namespace std;
+
+static uint32_t g_received = 0;
+
+NS_LOG_COMPONENT_DEFINE ("LrWpanErrorDistancePlot");
+
+static void
+LrWpanErrorDistanceCallback (McpsDataIndicationParams params, Ptr<Packet> p)
+{
+  g_received++;
+}
+
+int main (int argc, char *argv[])
+{
+  std::ostringstream os;
+  std::ofstream berfile ("802.15.4-psr-distance.plt");
+
+  int minDistance = 1;
+  int maxDistance = 200;  // meters
+  int increment = 1;
+  int maxPackets = 1000;
+  int packetSize = 20;
+  double txPower = 0;
+  uint32_t channelNumber = 11;
+
+  CommandLine cmd;
+
+  cmd.AddValue ("txPower", "transmit power (dBm)", txPower);
+  cmd.AddValue ("packetSize", "packet (MSDU) size (bytes)", packetSize);
+  cmd.AddValue ("channelNumber", "channel number", channelNumber);
+
+  cmd.Parse (argc, argv);
+
+  os << "Packet (MSDU) size = " << packetSize << " bytes; tx power = " << txPower << " dBm; channel = " << channelNumber;
+
+  Gnuplot psrplot = Gnuplot ("802.15.4-psr-distance.eps");
+  Gnuplot2dDataset psrdataset ("802.15.4-psr-vs-distance");
+
+  Ptr<Node> n0 = CreateObject <Node> ();
+  Ptr<Node> n1 = CreateObject <Node> ();
+  Ptr<LrWpanNetDevice> dev0 = CreateObject<LrWpanNetDevice> ();
+  Ptr<LrWpanNetDevice> dev1 = CreateObject<LrWpanNetDevice> ();
+  dev0->SetAddress (Mac16Address ("00:01"));
+  dev1->SetAddress (Mac16Address ("00:02"));
+  Ptr<SingleModelSpectrumChannel> channel = CreateObject<SingleModelSpectrumChannel> ();
+  Ptr<LogDistancePropagationLossModel> model = CreateObject<LogDistancePropagationLossModel> ();
+  channel->AddPropagationLossModel (model);
+  dev0->SetChannel (channel);
+  dev1->SetChannel (channel);
+  n0->AddDevice (dev0);
+  n1->AddDevice (dev1);
+  Ptr<ConstantPositionMobilityModel> mob0 = CreateObject<ConstantPositionMobilityModel> ();
+  dev0->GetPhy ()->SetMobility (mob0);
+  Ptr<ConstantPositionMobilityModel> mob1 = CreateObject<ConstantPositionMobilityModel> ();
+  dev1->GetPhy ()->SetMobility (mob1);
+
+  LrWpanSpectrumValueHelper svh;
+  Ptr<SpectrumValue> psd = svh.CreateTxPowerSpectralDensity (txPower, channelNumber);
+  dev0->GetPhy ()->SetTxPowerSpectralDensity (psd);
+
+  McpsDataIndicationCallback cb0;
+  cb0 = MakeCallback (&LrWpanErrorDistanceCallback);
+  dev1->GetMac ()->SetMcpsDataIndicationCallback (cb0);
+
+  McpsDataRequestParams params;
+  params.m_srcAddrMode = SHORT_ADDR;
+  params.m_dstAddrMode = SHORT_ADDR;
+  params.m_dstPanId = 0;
+  params.m_dstAddr = Mac16Address ("00:02");
+  params.m_msduHandle = 0;
+  params.m_txOptions = 0;
+
+  Ptr<Packet> p;
+  mob0->SetPosition (Vector (0,0,0));
+  mob1->SetPosition (Vector (minDistance,0,0));
+  for (int j = minDistance; j < maxDistance;  )
+    {
+      for (int i = 0; i < maxPackets; i++)
+        {
+          p = Create<Packet> (packetSize);
+          Simulator::Schedule (Seconds (i),
+                               &LrWpanMac::McpsDataRequest,
+                               dev0->GetMac (), params, p);
+        }
+      Simulator::Run ();
+      NS_LOG_DEBUG ("Received " << g_received << " packets for distance " << j);
+      psrdataset.Add (j, g_received / 1000.0);
+      g_received = 0;
+      j += increment;
+      mob1->SetPosition (Vector (j,0,0));
+    }
+
+  psrplot.AddDataset (psrdataset);
+
+  psrplot.SetTitle (os.str ());
+  psrplot.SetTerminal ("postscript eps color enh \"Times-BoldItalic\"");
+  psrplot.SetLegend ("distance (m)", "Packet Success Rate (PSR)");
+  psrplot.SetExtra  ("set xrange [0:200]\n\
+set yrange [0:1]\n\
+set grid\n\
+set style line 1 linewidth 5\n\
+set style increment user");
+  psrplot.GenerateOutput (berfile);
+  berfile.close ();
+
+  Simulator::Destroy ();
+  return 0;
+}
+
diff -Naur ns-3.19/src/lr-wpan/examples/lr-wpan-error-model-plot.cc ns-3.20/src/lr-wpan/examples/lr-wpan-error-model-plot.cc
--- ns-3.19/src/lr-wpan/examples/lr-wpan-error-model-plot.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.20/src/lr-wpan/examples/lr-wpan-error-model-plot.cc	2014-06-17 10:33:13.896995938 -0700
@@ -0,0 +1,84 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2011 The Boeing Company
+ *
+ * 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: Gary Pei <guangyu.pei@boeing.com>
+ */
+#include <ns3/packet.h>
+#include <ns3/uinteger.h>
+#include <ns3/simulator.h>
+#include <ns3/nstime.h>
+#include <ns3/log.h>
+#include <ns3/abort.h>
+#include <ns3/command-line.h>
+#include <ns3/gnuplot.h>
+#include <ns3/lr-wpan-error-model.h>
+
+#include <fstream>
+#include <iostream>
+#include <string>
+#include <vector>
+
+using namespace ns3;
+using namespace std;
+
+NS_LOG_COMPONENT_DEFINE ("LrWpanErrorModelPlot");
+
+//
+// Plot 802.15.4 BER curve (compare against Figure E.2 of IEEE-802.15.4-2006)
+//
+int main (int argc, char *argv[])
+{
+  std::ofstream berfile ("802.15.4-ber.plt");
+  Ptr<LrWpanErrorModel>  lrWpanError = CreateObject<LrWpanErrorModel> ();
+
+  double increment = 0.1;
+  double minSnr = -10;  //dB
+  double maxSnr = 5;
+
+  Gnuplot berplot = Gnuplot ("802.15.4-ber.eps");
+  Gnuplot2dDataset berdataset ("802.15.4");
+
+  for (double snr = minSnr; snr <= maxSnr; snr += increment)
+    {
+      double ber = 1.0 - lrWpanError->GetChunkSuccessRate (pow (10.0,snr / 10.0), 1);
+      NS_LOG_DEBUG (snr << "(dB) " << ber << " (BER)");
+      berdataset.Add (snr, ber);
+    }
+
+  berplot.AddDataset (berdataset);
+
+  berplot.SetTerminal ("postscript eps color enh \"Times-BoldItalic\"");
+  berplot.SetLegend ("SNR (dB)", "Bit Error Rate (BER)");
+  berplot.SetExtra  ("set xrange [-10:15]\n\
+set yrange [1e-9:1]\n\
+set log y\n\
+set grid\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 increment user");
+  berplot.GenerateOutput (berfile);
+  berfile.close ();
+
+  return 0;
+}
+
diff -Naur ns-3.19/src/lr-wpan/examples/lr-wpan-packet-print.cc ns-3.20/src/lr-wpan/examples/lr-wpan-packet-print.cc
--- ns-3.19/src/lr-wpan/examples/lr-wpan-packet-print.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.20/src/lr-wpan/examples/lr-wpan-packet-print.cc	2014-06-17 10:33:13.896995938 -0700
@@ -0,0 +1,52 @@
+/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2011 The Boeing Company
+ *
+ * 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:  Tom Henderson <thomas.r.henderson@boeing.com>
+ */
+#include <ns3/core-module.h>
+#include <ns3/lr-wpan-module.h>
+
+#include <iostream>
+
+using namespace ns3;
+
+int main (int argc, char *argv[])
+{
+  Packet::EnablePrinting ();
+  Packet::EnableChecking ();
+  LrWpanMacHeader macHdr (LrWpanMacHeader::LRWPAN_MAC_BEACON, 0);        //sequence number set to 0
+  macHdr.SetSrcAddrMode (2);                                             // short addr
+  macHdr.SetDstAddrMode (0);                                             // no addr
+  // ... other setters
+
+  uint16_t srcPanId = 100;
+  Mac16Address srcWpanAddr ("00:11");
+
+  macHdr.SetSrcAddrFields (srcPanId,srcWpanAddr );
+
+  LrWpanMacTrailer macTrailer;
+
+  Ptr<Packet> p = Create<Packet> (20);  // 20 bytes of dummy data
+
+  p->AddHeader (macHdr);
+  p->AddTrailer (macTrailer);
+
+  p->Print (std::cout);
+  std::cout << std::endl;
+  return 0;
+
+}
diff -Naur ns-3.19/src/lr-wpan/examples/lr-wpan-phy-test.cc ns-3.20/src/lr-wpan/examples/lr-wpan-phy-test.cc
--- ns-3.19/src/lr-wpan/examples/lr-wpan-phy-test.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.20/src/lr-wpan/examples/lr-wpan-phy-test.cc	2014-06-17 10:33:13.896995938 -0700
@@ -0,0 +1,94 @@
+/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2011 The Boeing Company
+ *
+ * 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: Gary Pei <guangyu.pei@boeing.com>
+ */
+#include <ns3/log.h>
+#include <ns3/test.h>
+#include <ns3/packet.h>
+#include <ns3/lr-wpan-phy.h>
+#include <ns3/lr-wpan-mac.h>
+#include <ns3/simulator.h>
+#include <ns3/single-model-spectrum-channel.h>
+#include <ns3/constant-position-mobility-model.h>
+
+using namespace ns3;
+
+void GetSetTRXStateConfirm (LrWpanPhyEnumeration status)
+{
+  NS_LOG_UNCOND ("At: " << Simulator::Now ()
+                        << " Received Set TRX Confirm: " << status);
+}
+
+void
+ReceivePdDataIndication (uint32_t psduLength,
+                         Ptr<Packet> p,
+                         uint8_t lqi)
+{
+  NS_LOG_UNCOND ("At: " << Simulator::Now ()
+                        << " Received frame size: " << psduLength << " LQI: " <<
+                 lqi);
+}
+
+void SendOnePacket (Ptr<LrWpanPhy> sender, Ptr<LrWpanPhy> receiver)
+{
+  uint32_t n = 10;
+  Ptr<Packet> p = Create<Packet> (n);
+  sender->PdDataRequest (p->GetSize (), p);
+}
+
+
+int main (int argc, char *argv[])
+{
+  LogComponentEnableAll (LOG_PREFIX_FUNC);
+  LogComponentEnable ("LrWpanPhy", LOG_LEVEL_ALL);
+  LogComponentEnable ("SingleModelSpectrumChannel", LOG_LEVEL_ALL);
+
+  Ptr<LrWpanPhy> sender = CreateObject<LrWpanPhy> ();
+  Ptr<LrWpanPhy> receiver = CreateObject<LrWpanPhy> ();
+
+  Ptr<SingleModelSpectrumChannel> channel = CreateObject<SingleModelSpectrumChannel> ();
+  sender->SetChannel (channel);
+  receiver->SetChannel (channel);
+  channel->AddRx (sender);
+  channel->AddRx (receiver);
+
+  // CONFIGURE MOBILITY
+  Ptr<ConstantPositionMobilityModel> senderMobility = CreateObject<ConstantPositionMobilityModel> ();
+  sender->SetMobility (senderMobility);
+  Ptr<ConstantPositionMobilityModel> receiverMobility = CreateObject<ConstantPositionMobilityModel> ();
+  receiver->SetMobility (senderMobility);
+
+
+  sender->SetPlmeSetTRXStateConfirmCallback (MakeCallback (&GetSetTRXStateConfirm));
+  receiver->SetPlmeSetTRXStateConfirmCallback (MakeCallback (&GetSetTRXStateConfirm));
+
+  sender->PlmeSetTRXStateRequest (IEEE_802_15_4_PHY_TX_ON);
+  receiver->PlmeSetTRXStateRequest (IEEE_802_15_4_PHY_RX_ON);
+
+  receiver->SetPdDataIndicationCallback (MakeCallback (&ReceivePdDataIndication));
+
+  Simulator::Schedule (Seconds (1.0), &SendOnePacket, sender, receiver);
+
+  Simulator::Stop (Seconds (10.0));
+
+  Simulator::Run ();
+
+  Simulator::Destroy ();
+
+  return 0;
+}
diff -Naur ns-3.19/src/lr-wpan/examples/wscript ns-3.20/src/lr-wpan/examples/wscript
--- ns-3.19/src/lr-wpan/examples/wscript	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.20/src/lr-wpan/examples/wscript	2014-06-17 10:33:13.897995931 -0700
@@ -0,0 +1,17 @@
+## -*- Mode: python; py-indent-offset: 4; indent-tabs-mode: nil; coding: utf-8; -*-
+
+def build(bld):
+    obj = bld.create_ns3_program('lr-wpan-packet-print', ['lr-wpan'])
+    obj.source = 'lr-wpan-packet-print.cc'
+
+    obj = bld.create_ns3_program('lr-wpan-phy-test', ['lr-wpan'])
+    obj.source = 'lr-wpan-phy-test.cc'
+
+    obj = bld.create_ns3_program('lr-wpan-data', ['lr-wpan'])
+    obj.source = 'lr-wpan-data.cc'
+
+    obj = bld.create_ns3_program('lr-wpan-error-model-plot', ['lr-wpan', 'stats'])
+    obj.source = 'lr-wpan-error-model-plot.cc'
+
+    obj = bld.create_ns3_program('lr-wpan-error-distance-plot', ['lr-wpan', 'stats'])
+    obj.source = 'lr-wpan-error-distance-plot.cc'
diff -Naur ns-3.19/src/lr-wpan/helper/lr-wpan-helper.cc ns-3.20/src/lr-wpan/helper/lr-wpan-helper.cc
--- ns-3.19/src/lr-wpan/helper/lr-wpan-helper.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.20/src/lr-wpan/helper/lr-wpan-helper.cc	2014-06-17 10:33:13.897995931 -0700
@@ -0,0 +1,357 @@
+/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2011 The Boeing Company
+ *
+ * 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:
+ *  Gary Pei <guangyu.pei@boeing.com>
+ *  Tom Henderson <thomas.r.henderson@boeing.com>
+ */
+#include "lr-wpan-helper.h"
+#include <ns3/lr-wpan-csmaca.h>
+#include <ns3/lr-wpan-error-model.h>
+#include <ns3/lr-wpan-net-device.h>
+#include <ns3/mobility-model.h>
+#include <ns3/single-model-spectrum-channel.h>
+#include <ns3/propagation-loss-model.h>
+#include <ns3/log.h>
+
+NS_LOG_COMPONENT_DEFINE ("LrWpanHelper");
+
+namespace ns3 {
+
+static void
+AsciiLrWpanMacTransmitSinkWithContext (
+  Ptr<OutputStreamWrapper> stream,
+  std::string context,
+  Ptr<const Packet> p)
+{
+  *stream->GetStream () << "t " << Simulator::Now ().GetSeconds () << " " << context << " " << *p << std::endl;
+}
+
+static void
+AsciiLrWpanMacTransmitSinkWithoutContext (
+  Ptr<OutputStreamWrapper> stream,
+  Ptr<const Packet> p)
+{
+  *stream->GetStream () << "t " << Simulator::Now ().GetSeconds () << " " << *p << std::endl;
+}
+
+LrWpanHelper::LrWpanHelper (void)
+{
+  m_channel = CreateObject<SingleModelSpectrumChannel> ();
+  Ptr<LogDistancePropagationLossModel> model = CreateObject<LogDistancePropagationLossModel> ();
+  m_channel->AddPropagationLossModel (model);
+}
+
+LrWpanHelper::~LrWpanHelper (void)
+{
+  m_channel->Dispose ();
+  m_channel = 0;
+}
+
+void
+LrWpanHelper::EnableLogComponents (void)
+{
+  LogComponentEnableAll (LOG_PREFIX_TIME);
+  LogComponentEnableAll (LOG_PREFIX_FUNC);
+  LogComponentEnable ("LrWpanCsmaCa", LOG_LEVEL_ALL);
+  LogComponentEnable ("LrWpanErrorModel", LOG_LEVEL_ALL);
+  LogComponentEnable ("LrWpanInterferenceHelper", LOG_LEVEL_ALL);
+  LogComponentEnable ("LrWpanMac", LOG_LEVEL_ALL);
+  LogComponentEnable ("LrWpanNetDevice", LOG_LEVEL_ALL);
+  LogComponentEnable ("LrWpanPhy", LOG_LEVEL_ALL);
+  LogComponentEnable ("LrWpanSpectrumSignalParameters", LOG_LEVEL_ALL);
+  LogComponentEnable ("LrWpanSpectrumValueHelper", LOG_LEVEL_ALL);
+}
+
+std::string
+LrWpanHelper::LrWpanPhyEnumerationPrinter (LrWpanPhyEnumeration e)
+{
+  switch (e)
+    {
+    case IEEE_802_15_4_PHY_BUSY:
+      return std::string ("BUSY");
+    case IEEE_802_15_4_PHY_BUSY_RX:
+      return std::string ("BUSY_RX");
+    case IEEE_802_15_4_PHY_BUSY_TX:
+      return std::string ("BUSY_TX");
+    case IEEE_802_15_4_PHY_FORCE_TRX_OFF:
+      return std::string ("FORCE_TRX_OFF");
+    case IEEE_802_15_4_PHY_IDLE:
+      return std::string ("IDLE");
+    case IEEE_802_15_4_PHY_INVALID_PARAMETER:
+      return std::string ("INVALID_PARAMETER");
+    case IEEE_802_15_4_PHY_RX_ON:
+      return std::string ("RX_ON");
+    case IEEE_802_15_4_PHY_SUCCESS:
+      return std::string ("SUCCESS");
+    case IEEE_802_15_4_PHY_TRX_OFF:
+      return std::string ("TRX_OFF");
+    case IEEE_802_15_4_PHY_TX_ON:
+      return std::string ("TX_ON");
+    case IEEE_802_15_4_PHY_UNSUPPORTED_ATTRIBUTE:
+      return std::string ("UNSUPPORTED_ATTRIBUTE");
+    case IEEE_802_15_4_PHY_READ_ONLY:
+      return std::string ("READ_ONLY");
+    case IEEE_802_15_4_PHY_UNSPECIFIED:
+      return std::string ("UNSPECIFIED");
+    default:
+      return std::string ("INVALID");
+    }
+}
+
+std::string
+LrWpanHelper::LrWpanMacStatePrinter (LrWpanMacState e)
+{
+  switch (e)
+    {
+    case MAC_IDLE:
+      return std::string ("MAC_IDLE");
+    case CHANNEL_ACCESS_FAILURE:
+      return std::string ("CHANNEL_ACCESS_FAILURE");
+    case CHANNEL_IDLE:
+      return std::string ("CHANNEL_IDLE");
+    case SET_PHY_TX_ON:
+      return std::string ("SET_PHY_TX_ON");
+    default:
+      return std::string ("INVALID");
+    }
+}
+
+void
+LrWpanHelper::AddMobility (Ptr<LrWpanPhy> phy, Ptr<MobilityModel> m)
+{
+  phy->SetMobility (m);
+}
+
+NetDeviceContainer
+LrWpanHelper::Install (NodeContainer c)
+{
+  NetDeviceContainer devices;
+  for (NodeContainer::Iterator i = c.Begin (); i != c.End (); i++)
+    {
+      Ptr<Node> node = *i;
+
+      Ptr<LrWpanNetDevice> netDevice = CreateObject<LrWpanNetDevice> ();
+      netDevice->SetChannel (m_channel);
+      node->AddDevice (netDevice);
+      netDevice->SetNode (node);
+      // \todo add the capability to change short address, extended
+      // address and panId. Right now they are hardcoded in LrWpanMac::LrWpanMac ()
+      devices.Add (netDevice);
+    }
+  return devices;
+}
+
+int64_t
+LrWpanHelper::AssignStreams (NetDeviceContainer c, int64_t stream)
+{
+  int64_t currentStream = stream;
+  Ptr<NetDevice> netDevice;
+  for (NetDeviceContainer::Iterator i = c.Begin (); i != c.End (); ++i)
+    {
+      netDevice = (*i);
+      Ptr<LrWpanNetDevice> lrwpan = DynamicCast<LrWpanNetDevice> (netDevice);
+      if (lrwpan)
+        {
+          currentStream += lrwpan->AssignStreams (currentStream);
+        }
+    }
+  return (currentStream - stream);
+}
+
+void
+LrWpanHelper::AssociateToPan (NetDeviceContainer c, uint16_t panId)
+{
+  NetDeviceContainer devices;
+  uint16_t id = 1;
+  uint8_t idBuf[2];
+
+  for (NetDeviceContainer::Iterator i = c.Begin (); i != c.End (); i++)
+    {
+      Ptr<LrWpanNetDevice> device = DynamicCast<LrWpanNetDevice> (*i);
+      if (device)
+        {
+          idBuf[0] = (id >> 8) & 0xff;
+          idBuf[1] = (id >> 0) & 0xff;
+          Mac16Address address;
+          address.CopyFrom (idBuf);
+
+          device->GetMac ()->SetPanId (panId);
+          device->GetMac ()->SetShortAddress (address);
+          id++;
+        }
+    }
+  return;
+}
+
+static void
+PcapSniffLrWpan (Ptr<PcapFileWrapper> file, Ptr<const Packet> packet)
+{
+  file->Write (Simulator::Now (), packet);
+}
+
+void
+LrWpanHelper::EnablePcapInternal (std::string prefix, Ptr<NetDevice> nd, bool promiscuous, bool explicitFilename)
+{
+  NS_LOG_FUNCTION (this << prefix << nd << promiscuous << explicitFilename);
+  //
+  // All of the Pcap enable functions vector through here including the ones
+  // that are wandering through all of devices on perhaps all of the nodes in
+  // the system.
+  //
+
+  // In the future, if we create different NetDevice types, we will
+  // have to switch on each type below and insert into the right
+  // NetDevice type
+  //
+  Ptr<LrWpanNetDevice> device = nd->GetObject<LrWpanNetDevice> ();
+  if (device == 0)
+    {
+      NS_LOG_INFO ("LrWpanHelper::EnablePcapInternal(): Device " << device << " not of type ns3::LrWpanNetDevice");
+      return;
+    }
+
+  PcapHelper pcapHelper;
+
+  std::string filename;
+  if (explicitFilename)
+    {
+      filename = prefix;
+    }
+  else
+    {
+      filename = pcapHelper.GetFilenameFromDevice (prefix, device);
+    }
+
+  Ptr<PcapFileWrapper> file = pcapHelper.CreateFile (filename, std::ios::out,
+                                                     PcapHelper::DLT_IEEE802_15_4);
+
+  if (promiscuous == true)
+    {
+      device->GetMac ()->TraceConnectWithoutContext ("PromiscSniffer", MakeBoundCallback (&PcapSniffLrWpan, file));
+
+    }
+  else
+    {
+      device->GetMac ()->TraceConnectWithoutContext ("Sniffer", MakeBoundCallback (&PcapSniffLrWpan, file));
+    }
+}
+
+void
+LrWpanHelper::EnableAsciiInternal (
+  Ptr<OutputStreamWrapper> stream,
+  std::string prefix,
+  Ptr<NetDevice> nd,
+  bool explicitFilename)
+{
+  uint32_t nodeid = nd->GetNode ()->GetId ();
+  uint32_t deviceid = nd->GetIfIndex ();
+  std::ostringstream oss;
+
+  Ptr<LrWpanNetDevice> device = nd->GetObject<LrWpanNetDevice> ();
+  if (device == 0)
+    {
+      NS_LOG_INFO ("LrWpanHelper::EnableAsciiInternal(): Device " << device << " not of type ns3::LrWpanNetDevice");
+      return;
+    }
+
+  //
+  // Our default trace sinks are going to use packet printing, so we have to
+  // make sure that is turned on.
+  //
+  Packet::EnablePrinting ();
+
+  //
+  // If we are not provided an OutputStreamWrapper, we are expected to create
+  // one using the usual trace filename conventions and do a Hook*WithoutContext
+  // since there will be one file per context and therefore the context would
+  // be redundant.
+  //
+  if (stream == 0)
+    {
+      //
+      // Set up an output stream object to deal with private ofstream copy
+      // constructor and lifetime issues.  Let the helper decide the actual
+      // name of the file given the prefix.
+      //
+      AsciiTraceHelper asciiTraceHelper;
+
+      std::string filename;
+      if (explicitFilename)
+        {
+          filename = prefix;
+        }
+      else
+        {
+          filename = asciiTraceHelper.GetFilenameFromDevice (prefix, device);
+        }
+
+      Ptr<OutputStreamWrapper> theStream = asciiTraceHelper.CreateFileStream (filename);
+
+      // Ascii traces typically have "+", '-", "d", "r", and sometimes "t"
+      // The Mac and Phy objects have the trace sources for these
+      //
+
+      asciiTraceHelper.HookDefaultReceiveSinkWithoutContext<LrWpanNetDevice> (device, "MacRx", theStream);
+
+      device->GetMac ()->TraceConnectWithoutContext ("MacTx", MakeBoundCallback (&AsciiLrWpanMacTransmitSinkWithoutContext, theStream));
+
+      asciiTraceHelper.HookDefaultEnqueueSinkWithoutContext<LrWpanNetDevice> (device, "MacTxEnqueue", theStream);
+      asciiTraceHelper.HookDefaultDequeueSinkWithoutContext<LrWpanNetDevice> (device, "MacTxDequeue", theStream);
+      asciiTraceHelper.HookDefaultDropSinkWithoutContext<LrWpanNetDevice> (device, "MacTxDrop", theStream);
+
+      return;
+    }
+
+  //
+  // If we are provided an OutputStreamWrapper, we are expected to use it, and
+  // to provide a context.  We are free to come up with our own context if we
+  // want, and use the AsciiTraceHelper Hook*WithContext functions, but for
+  // compatibility and simplicity, we just use Config::Connect and let it deal
+  // with the context.
+  //
+  // Note that we are going to use the default trace sinks provided by the
+  // ascii trace helper.  There is actually no AsciiTraceHelper in sight here,
+  // but the default trace sinks are actually publicly available static
+  // functions that are always there waiting for just such a case.
+  //
+
+
+  oss.str ("");
+  oss << "/NodeList/" << nodeid << "/DeviceList/" << deviceid << "/$ns3::LrWpanNetDevice/Mac/MacRx";
+  device->GetMac ()->TraceConnect ("MacRx", oss.str (), MakeBoundCallback (&AsciiTraceHelper::DefaultReceiveSinkWithContext, stream));
+
+  oss.str ("");
+  oss << "/NodeList/" << nodeid << "/DeviceList/" << deviceid << "/$ns3::LrWpanNetDevice/Mac/MacTx";
+  device->GetMac ()->TraceConnect ("MacTx", oss.str (), MakeBoundCallback (&AsciiLrWpanMacTransmitSinkWithContext, stream));
+
+  oss.str ("");
+  oss << "/NodeList/" << nodeid << "/DeviceList/" << deviceid << "/$ns3::LrWpanNetDevice/Mac/MacTxEnqueue";
+  device->GetMac ()->TraceConnect ("MacTxEnqueue", oss.str (), MakeBoundCallback (&AsciiTraceHelper::DefaultEnqueueSinkWithContext, stream));
+
+  oss.str ("");
+  oss << "/NodeList/" << nodeid << "/DeviceList/" << deviceid << "/$ns3::LrWpanNetDevice/Mac/MacTxDequeue";
+  device->GetMac ()->TraceConnect ("MacTxDequeue", oss.str (), MakeBoundCallback (&AsciiTraceHelper::DefaultDequeueSinkWithContext, stream));
+
+  oss.str ("");
+  oss << "/NodeList/" << nodeid << "/DeviceList/" << deviceid << "/$ns3::LrWpanNetDevice/Mac/MacTxDrop";
+  device->GetMac ()->TraceConnect ("MacTxDrop", oss.str (), MakeBoundCallback (&AsciiTraceHelper::DefaultDropSinkWithContext, stream));
+
+}
+
+} // namespace ns3
+
diff -Naur ns-3.19/src/lr-wpan/helper/lr-wpan-helper.h ns-3.20/src/lr-wpan/helper/lr-wpan-helper.h
--- ns-3.19/src/lr-wpan/helper/lr-wpan-helper.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.20/src/lr-wpan/helper/lr-wpan-helper.h	2014-06-17 10:33:13.898995923 -0700
@@ -0,0 +1,139 @@
+/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2011 The Boeing Company
+ *
+ * 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:
+ *  Gary Pei <guangyu.pei@boeing.com>
+ *  Tom Henderson <thomas.r.henderson@boeing.com>
+ */
+#ifndef LR_WPAN_HELPER_H
+#define LR_WPAN_HELPER_H
+
+#include <ns3/node-container.h>
+#include <ns3/lr-wpan-phy.h>
+#include <ns3/lr-wpan-mac.h>
+#include <ns3/trace-helper.h>
+
+namespace ns3 {
+
+class SingleModelSpectrumChannel;
+class MobilityModel;
+
+/**
+ * \ingroup lr-wpan
+ *
+ * \brief helps to manage and create IEEE 802.15.4 NetDevice objects
+ *
+ * This class can help to create IEEE 802.15.4 NetDevice objects
+ * and to configure their attributes during creation.  It also contains
+ * additional helper functions used by client code.
+ */
+
+class LrWpanHelper : public PcapHelperForDevice,
+                     public AsciiTraceHelperForDevice
+{
+public:
+  /**
+   * \brief Create a LrWpan helper in an empty state.
+   */
+  LrWpanHelper (void);
+  virtual ~LrWpanHelper (void);
+
+  /**
+  * \brief Add mobility model to a physical device
+  * \param phy the physical device
+  * \param m the mobility model
+  */
+  void AddMobility (Ptr<LrWpanPhy> phy, Ptr<MobilityModel> m);
+
+  /**
+   * \param c a set of nodes
+   */
+  NetDeviceContainer Install (NodeContainer c);
+
+  /**
+   * \brief Associate the nodes to the same PAN
+   *
+   * \param c a set of nodes
+   * \param panId the PAN Id
+   */
+  void AssociateToPan (NetDeviceContainer c, uint16_t panId);
+
+  /**
+   * Helper to enable all LrWpan log components with one statement
+   */
+  void EnableLogComponents (void);
+
+  static std::string LrWpanPhyEnumerationPrinter (LrWpanPhyEnumeration);
+  static std::string LrWpanMacStatePrinter (LrWpanMacState e);
+
+  /**
+   * Assign a fixed random variable stream number to the random variables
+   * used by this model. Return the number of streams that 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
+   *          CsmaNetDevice 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
+   */
+  int64_t AssignStreams (NetDeviceContainer c, int64_t stream);
+
+private:
+  // Disable implicit constructors
+  LrWpanHelper (LrWpanHelper const &);
+  LrWpanHelper& operator= (LrWpanHelper const &);
+  /**
+   * \internal
+   *
+   * \brief Enable pcap output on the indicated net device.
+   * \internal
+   *
+   * NetDevice-specific implementation mechanism for hooking the trace and
+   * writing to the trace file.
+   *
+   * \param prefix Filename prefix to use for pcap files.
+   * \param nd Net device for which you want to enable tracing.
+   * \param promiscuous If true capture all possible packets available at the device.
+   * \param explicitFilename Treat the prefix as an explicit filename if true
+   */
+  virtual void EnablePcapInternal (std::string prefix, Ptr<NetDevice> nd, bool promiscuous, bool explicitFilename);
+
+  /**
+   * \brief Enable ascii trace output on the indicated net device.
+   * \internal
+   *
+   * NetDevice-specific implementation mechanism for hooking the trace and
+   * writing to the trace file.
+   *
+   * \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.
+   */
+  virtual void EnableAsciiInternal (Ptr<OutputStreamWrapper> stream,
+                                    std::string prefix,
+                                    Ptr<NetDevice> nd,
+                                    bool explicitFilename);
+
+private:
+  Ptr<SingleModelSpectrumChannel> m_channel;
+
+};
+
+}
+
+#endif /* LR_WPAN_HELPER_H */
diff -Naur ns-3.19/src/lr-wpan/model/lr-wpan-csmaca.cc ns-3.20/src/lr-wpan/model/lr-wpan-csmaca.cc
--- ns-3.19/src/lr-wpan/model/lr-wpan-csmaca.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.20/src/lr-wpan/model/lr-wpan-csmaca.cc	2014-06-17 10:33:13.898995923 -0700
@@ -0,0 +1,387 @@
+/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2011 The Boeing Company
+ *
+ * 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:
+ *  kwong yin <kwong-sang.yin@boeing.com>
+ *  Sascha Alexander Jopen <jopen@cs.uni-bonn.de>
+ */
+
+#include "lr-wpan-csmaca.h"
+#include <ns3/random-variable-stream.h>
+#include <ns3/simulator.h>
+#include <ns3/log.h>
+#include <algorithm>
+
+NS_LOG_COMPONENT_DEFINE ("LrWpanCsmaCa");
+
+namespace ns3 {
+
+NS_OBJECT_ENSURE_REGISTERED (LrWpanCsmaCa);
+
+TypeId
+LrWpanCsmaCa::GetTypeId (void)
+{
+  static TypeId tid = TypeId ("ns3::LrWpanCsmaCa")
+    .SetParent<Object> ()
+    .AddConstructor<LrWpanCsmaCa> ()
+  ;
+  return tid;
+}
+
+LrWpanCsmaCa::LrWpanCsmaCa ()
+{
+  // TODO-- make these into ns-3 attributes
+
+  m_isSlotted = false;
+  m_NB = 0;
+  m_CW = 2;
+  m_BLE = false;
+  m_macMinBE = 3;
+  m_macMaxBE = 5;
+  m_macMaxCSMABackoffs = 4;
+  m_aUnitBackoffPeriod = 20; //20 symbols
+  m_random = CreateObject<UniformRandomVariable> ();
+  m_BE = m_macMinBE;
+  m_ccaRequestRunning = false;
+}
+
+LrWpanCsmaCa::~LrWpanCsmaCa ()
+{
+  m_mac = 0;
+}
+
+void
+LrWpanCsmaCa::DoDispose ()
+{
+  m_lrWpanMacStateCallback = MakeNullCallback< void, LrWpanMacState> ();
+  Cancel ();
+  m_mac = 0;
+}
+
+void
+LrWpanCsmaCa::SetMac (Ptr<LrWpanMac> mac)
+{
+  m_mac = mac;
+}
+
+Ptr<LrWpanMac>
+LrWpanCsmaCa::GetMac (void) const
+{
+  return m_mac;
+}
+
+void
+LrWpanCsmaCa::SetSlottedCsmaCa (void)
+{
+  NS_LOG_FUNCTION (this);
+  m_isSlotted = true;
+}
+
+void
+LrWpanCsmaCa::SetUnSlottedCsmaCa (void)
+{
+  NS_LOG_FUNCTION (this);
+  m_isSlotted = false;
+}
+
+bool
+LrWpanCsmaCa::IsSlottedCsmaCa (void) const
+{
+  NS_LOG_FUNCTION (this);
+  return (m_isSlotted);
+}
+
+bool
+LrWpanCsmaCa::IsUnSlottedCsmaCa (void) const
+{
+  NS_LOG_FUNCTION (this);
+  return (!m_isSlotted);
+}
+
+void
+LrWpanCsmaCa::SetMacMinBE (uint8_t macMinBE)
+{
+  NS_LOG_FUNCTION (this << macMinBE);
+  m_macMinBE = macMinBE;
+}
+
+uint8_t
+LrWpanCsmaCa::GetMacMinBE (void) const
+{
+  NS_LOG_FUNCTION (this);
+  return m_macMinBE;
+}
+
+void
+LrWpanCsmaCa::SetMacMaxBE (uint8_t macMaxBE)
+{
+  NS_LOG_FUNCTION (this << macMaxBE);
+  m_macMinBE = macMaxBE;
+}
+
+uint8_t
+LrWpanCsmaCa::GetMacMaxBE (void) const
+{
+  NS_LOG_FUNCTION (this);
+  return m_macMaxBE;
+}
+
+void
+LrWpanCsmaCa::SetMacMaxCSMABackoffs (uint8_t macMaxCSMABackoffs)
+{
+  NS_LOG_FUNCTION (this << macMaxCSMABackoffs);
+  m_macMaxCSMABackoffs = macMaxCSMABackoffs;
+}
+
+uint8_t
+LrWpanCsmaCa::GetMacMaxCSMABackoffs (void) const
+{
+  NS_LOG_FUNCTION (this);
+  return m_macMaxCSMABackoffs;
+}
+
+void
+LrWpanCsmaCa::SetUnitBackoffPeriod (uint64_t unitBackoffPeriod)
+{
+  NS_LOG_FUNCTION (this << unitBackoffPeriod);
+  m_aUnitBackoffPeriod = unitBackoffPeriod;
+}
+
+uint64_t
+LrWpanCsmaCa::GetUnitBackoffPeriod (void) const
+{
+  NS_LOG_FUNCTION (this);
+  return m_aUnitBackoffPeriod;
+}
+
+Time
+LrWpanCsmaCa::GetTimeToNextSlot (void) const
+{
+  NS_LOG_FUNCTION (this);
+
+  // TODO: Calculate the offset to the next slot.
+
+  return Seconds (0);
+
+}
+void
+LrWpanCsmaCa::Start ()
+
+{
+  NS_LOG_FUNCTION (this);
+  m_NB = 0;
+  if (IsSlottedCsmaCa ())
+    {
+      m_CW = 2;
+      if (m_BLE)
+        {
+          m_BE = std::min (static_cast<uint8_t> (2), m_macMinBE);
+        }
+      else
+        {
+          m_BE = m_macMinBE;
+        }
+      //TODO: for slotted, locate backoff period boundary. i.e. delay to the next slot boundary
+      Time backoffBoundary = GetTimeToNextSlot ();
+      m_randomBackoffEvent = Simulator::Schedule (backoffBoundary, &LrWpanCsmaCa::RandomBackoffDelay, this);
+    }
+  else
+    {
+      m_BE = m_macMinBE;
+      m_randomBackoffEvent = Simulator::ScheduleNow (&LrWpanCsmaCa::RandomBackoffDelay, this);
+    }
+  /*
+  *  TODO: If using Backoff.cc (will need to modify Backoff::GetBackoffTime)
+  *        Backoff.m_minSlots = 0;
+  *        Backoff.m_ceiling = m_BE;
+  *        Backoff.ResetBackoffTime(); //m_NB is same as m_numBackoffRetries in Backoff.h
+  *        Backoff.m_maxRetries = macMaxCSMABackoffs;
+  *        Backoff.m_slotTime = m_backoffPeriod;
+  */
+}
+
+void
+LrWpanCsmaCa::Cancel ()
+{
+  m_randomBackoffEvent.Cancel ();
+  m_requestCcaEvent.Cancel ();
+  m_canProceedEvent.Cancel ();
+}
+
+/*
+ * Delay for backoff period in the range 0 to 2^BE -1 units
+ * TODO: If using Backoff.cc (Backoff::GetBackoffTime) will need to be slightly modified
+ */
+void
+LrWpanCsmaCa::RandomBackoffDelay ()
+{
+  NS_LOG_FUNCTION (this);
+
+  uint64_t upperBound = (uint64_t) pow (2, m_BE) - 1;
+  uint64_t backoffPeriod;
+  Time randomBackoff;
+  uint64_t symbolRate;
+  bool isData = false;
+
+
+  symbolRate = (uint64_t) m_mac->GetPhy ()->GetDataOrSymbolRate (isData); //symbols per second
+  backoffPeriod = (uint64_t)m_random->GetValue (0, upperBound); //num backoff periods
+  randomBackoff = MicroSeconds (backoffPeriod * GetUnitBackoffPeriod () * 1000 * 1000 / symbolRate);
+
+  if (IsUnSlottedCsmaCa ())
+    {
+      NS_LOG_LOGIC ("Unslotted:  requesting CCA after backoff of " << randomBackoff.GetMicroSeconds () << " us");
+      m_requestCcaEvent = Simulator::Schedule (randomBackoff, &LrWpanCsmaCa::RequestCCA, this);
+    }
+  else
+    {
+      NS_LOG_LOGIC ("Slotted:  proceeding after backoff of " << randomBackoff.GetMicroSeconds () << " us");
+      m_canProceedEvent = Simulator::Schedule (randomBackoff, &LrWpanCsmaCa::CanProceed, this);
+    }
+}
+
+// TODO : Determine if transmission can be completed before end of CAP for the slotted csmaca
+//        If not delay to the next CAP
+void
+LrWpanCsmaCa::CanProceed ()
+{
+  NS_LOG_FUNCTION (this);
+
+  bool canProceed = true;
+
+  if (m_BLE)
+    {
+    }
+  else
+    {
+    }
+
+  if (canProceed)
+    {
+      // TODO: For slotted, Perform CCA on backoff period boundary i.e. delay to next slot boundary
+      Time backoffBoundary = GetTimeToNextSlot ();
+      m_requestCcaEvent = Simulator::Schedule (backoffBoundary, &LrWpanCsmaCa::RequestCCA, this);
+    }
+  else
+    {
+      Time nextCap = Seconds (0);
+      m_randomBackoffEvent = Simulator::Schedule (nextCap, &LrWpanCsmaCa::RandomBackoffDelay, this);
+    }
+}
+
+void
+LrWpanCsmaCa::RequestCCA ()
+{
+  NS_LOG_FUNCTION (this);
+  m_ccaRequestRunning = true;
+  m_mac->GetPhy ()->PlmeCcaRequest ();
+}
+
+/*
+ * This function is called when the phy calls back after completing a PlmeCcaRequest
+ */
+void
+LrWpanCsmaCa::PlmeCcaConfirm (LrWpanPhyEnumeration status)
+{
+  NS_LOG_FUNCTION (this << status);
+
+  // Only react on this event, if we are actually waiting for a CCA.
+  // If the CSMA algorithm was canceled, we could still receive this event from
+  // the PHY. In this case we ignore the event.
+  if (m_ccaRequestRunning)
+    {
+      m_ccaRequestRunning = false;
+      if (status == IEEE_802_15_4_PHY_IDLE)
+        {
+          if (IsSlottedCsmaCa ())
+            {
+              m_CW--;
+              if (m_CW == 0)
+                {
+                  // inform MAC channel is idle
+                  if (!m_lrWpanMacStateCallback.IsNull ())
+                    {
+                      NS_LOG_LOGIC ("Notifying MAC of idle channel");
+                      m_lrWpanMacStateCallback (CHANNEL_IDLE);
+                    }
+                }
+              else
+                {
+                  NS_LOG_LOGIC ("Perform CCA again, m_CW = " << m_CW);
+                  m_requestCcaEvent = Simulator::ScheduleNow (&LrWpanCsmaCa::RequestCCA, this); // Perform CCA again
+                }
+            }
+          else
+            {
+              // inform MAC, channel is idle
+              if (!m_lrWpanMacStateCallback.IsNull ())
+                {
+                  NS_LOG_LOGIC ("Notifying MAC of idle channel");
+                  m_lrWpanMacStateCallback (CHANNEL_IDLE);
+                }
+            }
+        }
+      else
+        {
+          if (IsSlottedCsmaCa ())
+            {
+              m_CW = 2;
+            }
+          m_BE = std::min (static_cast<uint16_t> (m_BE + 1), static_cast<uint16_t> (m_macMaxBE));
+          m_NB++;
+          if (m_NB > m_macMaxCSMABackoffs)
+            {
+              // no channel found so cannot send pkt
+              NS_LOG_DEBUG ("Channel access failure");
+              if (!m_lrWpanMacStateCallback.IsNull ())
+                {
+                  NS_LOG_LOGIC ("Notifying MAC of Channel access failure");
+                  m_lrWpanMacStateCallback (CHANNEL_ACCESS_FAILURE);
+                }
+              return;
+            }
+          else
+            {
+              NS_LOG_DEBUG ("Perform another backoff; m_NB = " << static_cast<uint16_t> (m_NB));
+              m_randomBackoffEvent = Simulator::ScheduleNow (&LrWpanCsmaCa::RandomBackoffDelay, this); //Perform another backoff (step 2)
+            }
+        }
+    }
+}
+
+void
+LrWpanCsmaCa::SetLrWpanMacStateCallback (LrWpanMacStateCallback c)
+{
+  NS_LOG_FUNCTION (this);
+  m_lrWpanMacStateCallback = c;
+}
+
+int64_t
+LrWpanCsmaCa::AssignStreams (int64_t stream)
+{
+  NS_LOG_FUNCTION (this);
+  m_random->SetStream (stream);
+  return 1;
+}
+
+uint8_t
+LrWpanCsmaCa::GetNB (void)
+{
+  return m_NB;
+}
+
+} //namespace ns3
diff -Naur ns-3.19/src/lr-wpan/model/lr-wpan-csmaca.h ns-3.20/src/lr-wpan/model/lr-wpan-csmaca.h
--- ns-3.19/src/lr-wpan/model/lr-wpan-csmaca.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.20/src/lr-wpan/model/lr-wpan-csmaca.h	2014-06-17 10:33:13.899995915 -0700
@@ -0,0 +1,335 @@
+/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2011 The Boeing Company
+ *
+ * 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:
+ *  kwong yin <kwong-sang.yin@boeing.com>
+ *  Sascha Alexander Jopen <jopen@cs.uni-bonn.de>
+ */
+
+#ifndef LR_WPAN_CSMACA_H
+#define LR_WPAN_CSMACA_H
+
+#include <ns3/object.h>
+#include <ns3/event-id.h>
+#include <ns3/lr-wpan-mac.h>
+
+namespace ns3 {
+
+class UniformRandomVariable;
+
+/**
+ * This method informs the MAC  whether the channel is idle or busy.
+ */
+typedef Callback<void, LrWpanMacState> LrWpanMacStateCallback;
+
+/**
+ * \ingroup lr-wpan
+ *
+ * This class is a helper for the LrWpanMac to manage the Csma/CA
+ * state machine according to IEEE 802.15.4-2006, section 7.5.1.4.
+ */
+class LrWpanCsmaCa : public Object
+{
+
+public:
+  /**
+   * Get the type ID.
+   *
+   * \return the object TypeId
+   */
+  static TypeId GetTypeId (void);
+
+  /**
+   * Default constructor.
+   */
+  LrWpanCsmaCa (void);
+  virtual ~LrWpanCsmaCa (void);
+
+  /**
+   * Set the MAC to which this CSMA/CA implementation is attached to.
+   *
+   * \param mac the used MAC
+   */
+  void SetMac (Ptr<LrWpanMac> mac);
+
+  /**
+   * Get the MAC to which this CSMA/CA implementation is attached to.
+   *
+   * \return the used MAC
+   */
+  Ptr<LrWpanMac> GetMac (void) const;
+
+  /**
+   * Configure for the use of the slotted CSMA/CA version.
+   */
+  void SetSlottedCsmaCa (void);
+
+  /**
+   * Configure for the use of the unslotted CSMA/CA version.
+   */
+  void SetUnSlottedCsmaCa (void);
+
+  /**
+   * Check if the slotted CSMA/CA version is being used.
+   *
+   * \return true, if slotted CSMA/CA is used, false otherwise.
+   */
+  bool IsSlottedCsmaCa (void) const;
+
+  /**
+   * Check if the unslotted CSMA/CA version is being used.
+   *
+   * \return true, if unslotted CSMA/CA is used, false otherwise.
+   */
+  bool IsUnSlottedCsmaCa (void) const;
+
+  /**
+   * Set the minimum backoff exponent value.
+   * See IEEE 802.15.4-2006, section 7.4.2, Table 86.
+   *
+   * \param macMinBE the minimum backoff exponent value
+   */
+  void SetMacMinBE (uint8_t macMinBE);
+
+  /**
+   * Get the minimum backoff exponent value.
+   * See IEEE 802.15.4-2006, section 7.4.2, Table 86.
+   *
+   * \return the minimum backoff exponent value
+   */
+  uint8_t GetMacMinBE (void) const;
+
+  /**
+   * Set the maximum backoff exponent value.
+   * See IEEE 802.15.4-2006, section 7.4.2, Table 86.
+   *
+   * \param macMaxBE the maximum backoff exponent value
+   */
+  void SetMacMaxBE (uint8_t macMaxBE);
+
+  /**
+   * Get the maximum backoff exponent value.
+   * See IEEE 802.15.4-2006, section 7.4.2, Table 86.
+   *
+   * \return the maximum backoff exponent value
+   */
+  uint8_t GetMacMaxBE (void) const;
+
+  /**
+   * Set the maximum number of backoffs.
+   * See IEEE 802.15.4-2006, section 7.4.2, Table 86.
+   *
+   * \param macMaxCSMABackoffs the maximum number of backoffs
+   */
+  void SetMacMaxCSMABackoffs (uint8_t macMaxCSMABackoffs);
+
+  /**
+   * Get the maximum number of backoffs.
+   * See IEEE 802.15.4-2006, section 7.4.2, Table 86.
+   *
+   * \return the maximum number of backoffs
+   */
+  uint8_t GetMacMaxCSMABackoffs (void) const;
+
+  /**
+   * Set the number of symbols forming the basic time period used by the
+   * CSMA-CA algorithm.
+   * See IEEE 802.15.4-2006, section 7.4.1, Table 85.
+   *
+   * \param unitBackoffPeriod the period length in symbols
+   */
+  void SetUnitBackoffPeriod (uint64_t unitBackoffPeriod);
+
+  /**
+   * Get the number of symbols forming the basic time period used by the
+   * CSMA-CA algorithm.
+   * See IEEE 802.15.4-2006, section 7.4.1, Table 85.
+   *
+   * \return the period length in symbols
+   */
+  uint64_t GetUnitBackoffPeriod (void) const;
+
+  /**
+   * Get the amount of time from now to the beginning of the next slot.
+   *
+   * \return time offset to the next slot
+   */
+  Time GetTimeToNextSlot (void) const;
+
+  /**
+   * Start CSMA-CA algorithm (step 1), initialize NB, BE for both slotted and unslotted
+   * CSMA-CA. For the slotted intialize CW plus also start on the backoff boundary
+   */
+  void Start (void);
+
+  /**
+   * Cancel CSMA-CA algorithm.
+   */
+  void Cancel (void);
+
+  /**
+   * In step 2 of the CSMA-CA, perform a random backoff in the range of 0 to 2^BE -1
+   */
+  void RandomBackoffDelay (void);
+
+  /**
+   * In the slotted CSMA-CA, after random backoff, determine if the remaining
+   * CSMA-CA operation can proceed, i.e. can the entire transactions can be
+   * transmitted before the end of the CAP. This step is performed between step
+   * 2 and 3. This step is NOT performed for the unslotted CSMA-CA. If it can
+   * proceed function RequestCCA() is called.
+   */
+  void CanProceed (void);
+
+  /**
+   * Request the Phy to perform CCA (Step 3)
+   */
+  void RequestCCA (void);
+
+  /**
+   *  IEEE 802.15.4-2006 section 6.2.2.2
+   *  PLME-CCA.confirm status
+   *  @param status TRX_OFF, BUSY or IDLE
+   *
+   * When Phy has completed CCA, it calls back here which in turn execute the final steps
+   * of the CSMA-CA algorithm.
+   * It checks to see if the Channel is idle, if so check the Contention window  before
+   * permitting transmission (step 5). If channel is busy, either backoff and perform CCA again or
+   * treat as channel access failure (step 4).
+   */
+  void PlmeCcaConfirm (LrWpanPhyEnumeration status);
+
+  /**
+   * Set the callback function to the MAC. Used at the end of a Channel Assessment, as part of the
+   * interconnections between the CSMA-CA and the MAC. The callback
+   * lets MAC know a channel is either idle or busy.
+   *
+   * \param macState the mac state callback
+   */
+  void SetLrWpanMacStateCallback (LrWpanMacStateCallback macState);
+
+  /**
+   * Assign a fixed random variable stream number to the random variables
+   * used by this model.  Return the number of streams that have been assigned.
+   *
+   * \param stream first stream index to use
+   * \return the number of stream indices assigned by this model
+   */
+  int64_t AssignStreams (int64_t stream);
+
+  /**
+   * Get the number of CSMA retries
+   *
+   * \returns the number of CSMA retries
+   */
+  uint8_t GetNB (void);
+
+private:
+  // Disable implicit copy constructors
+  LrWpanCsmaCa (LrWpanCsmaCa const &);
+  LrWpanCsmaCa& operator= (LrWpanCsmaCa const &);
+ 
+  virtual void DoDispose (void);
+
+  /**
+   * The callback to inform the configured MAC of the CSMA/CA result.
+   */
+  LrWpanMacStateCallback m_lrWpanMacStateCallback;
+
+  /**
+   * Beacon-enabled slotted or nonbeacon-enabled unslotted CSMA-CA.
+   */
+  bool m_isSlotted;
+
+  /**
+   * The MAC instance for which this CSMAÃ„/CA implemenation is configured.
+   */
+  Ptr<LrWpanMac> m_mac;
+
+  /**
+   * Number of backoffs for the current transmission.
+   */
+  uint8_t m_NB;
+
+  /**
+   * Contention window length (used in slotted ver only).
+   */
+  uint8_t m_CW;
+
+  /**
+   * Backoff exponent.
+   */
+  uint8_t m_BE;
+
+  /**
+   * Battery Life Extension.
+   */
+  bool m_BLE;
+
+  /**
+   * Minimum backoff exponent. 0 - macMaxBE, default 3
+   */
+  uint8_t m_macMinBE;                   //
+
+  /**
+   * Maximum backoff exponent. 3 - 8, default 5
+   */
+  uint8_t m_macMaxBE;
+
+  /**
+   * Maximum number of backoffs. 0 - 5, default 4
+   */
+  uint8_t m_macMaxCSMABackoffs;
+
+  /**
+   * Number of symbols per CSMA/CA time unit, default 20 symbols.
+   */
+  uint64_t m_aUnitBackoffPeriod;
+
+  /**
+   * Uniform random variable stream.
+   */
+  Ptr<UniformRandomVariable> m_random;
+
+  /**
+   * Scheduler event for the start of the next random backoff/slot.
+   */
+  EventId m_randomBackoffEvent;
+
+  /**
+   * Scheduler event when to start the CCA after a random backoff.
+   */
+  EventId m_requestCcaEvent;
+
+  /**
+   * Scheduler event for checking if we can complete the transmission before the
+   * end of the CAP.
+   */
+  EventId m_canProceedEvent;
+
+  /**
+   * Flag indicating that the PHY is currently running a CCA. Used to prevent
+   * reporting the channel status to the MAC while canceling the CSMA algorithm.
+   */
+  bool m_ccaRequestRunning;
+};
+
+}
+
+// namespace ns-3
+
+#endif /* LR_WPAN_CSMACA_H */
diff -Naur ns-3.19/src/lr-wpan/model/lr-wpan-error-model.cc ns-3.20/src/lr-wpan/model/lr-wpan-error-model.cc
--- ns-3.19/src/lr-wpan/model/lr-wpan-error-model.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.20/src/lr-wpan/model/lr-wpan-error-model.cc	2014-06-17 10:33:13.899995915 -0700
@@ -0,0 +1,79 @@
+/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2011 The Boeing Company
+ *
+ * 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: Gary Pei <guangyu.pei@boeing.com>
+ */
+#include "lr-wpan-error-model.h"
+#include <ns3/log.h>
+
+#include <cmath>
+
+NS_LOG_COMPONENT_DEFINE ("LrWpanErrorModel");
+
+namespace ns3 {
+
+NS_OBJECT_ENSURE_REGISTERED (LrWpanErrorModel);
+
+TypeId
+LrWpanErrorModel::GetTypeId (void)
+{
+  static TypeId tid = TypeId ("ns3::LrWpanErrorModel")
+    .SetParent<Object> ()
+    .AddConstructor<LrWpanErrorModel> ()
+  ;
+  return tid;
+}
+
+LrWpanErrorModel::LrWpanErrorModel (void)
+{
+  m_binomialCoefficients[0]  = 1;
+  m_binomialCoefficients[1]  = -16;
+  m_binomialCoefficients[2]  = 120;
+  m_binomialCoefficients[3]  = -560;
+  m_binomialCoefficients[4]  = 1820;
+  m_binomialCoefficients[5]  = -4368;
+  m_binomialCoefficients[6]  = 8008;
+  m_binomialCoefficients[7]  = -11440;
+  m_binomialCoefficients[8]  = 12870;
+  m_binomialCoefficients[9]  = -11440;
+  m_binomialCoefficients[10] = 8008;
+  m_binomialCoefficients[11] = -4368;
+  m_binomialCoefficients[12] = 1820;
+  m_binomialCoefficients[13] = -560;
+  m_binomialCoefficients[14] = 120;
+  m_binomialCoefficients[15] = -16;
+  m_binomialCoefficients[16] = 1;
+}
+
+double
+LrWpanErrorModel::GetChunkSuccessRate (double snr, uint32_t nbits) const
+{
+  double ber = 0.0;
+
+  for (uint32_t k = 2; k <= 16; k++)
+    {
+      ber += m_binomialCoefficients[k] * exp (20.0 * snr * (1.0 / k - 1.0));
+    }
+
+  ber = ber * 8.0 / 15.0 / 16.0;
+
+  ber = std::min (ber, 1.0);
+  double retval = pow (1.0 - ber, nbits);
+  return retval;
+}
+
+} // namespace ns3
diff -Naur ns-3.19/src/lr-wpan/model/lr-wpan-error-model.h ns-3.20/src/lr-wpan/model/lr-wpan-error-model.h
--- ns-3.19/src/lr-wpan/model/lr-wpan-error-model.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.20/src/lr-wpan/model/lr-wpan-error-model.h	2014-06-17 10:33:13.899995915 -0700
@@ -0,0 +1,66 @@
+/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2011 The Boeing Company
+ *
+ * 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: Gary Pei <guangyu.pei@boeing.com>
+ */
+#ifndef LR_WPAN_ERROR_MODEL_H
+#define LR_WPAN_ERROR_MODEL_H
+
+#include <ns3/object.h>
+
+namespace ns3 {
+
+/**
+ * \ingroup lr-wpan
+ *
+ * Model the error rate for IEEE 802.15.4 2.4 GHz AWGN channel for OQPSK
+ * the model description can be found in IEEE Std 802.15.4-2006, section
+ * E.4.1.7
+ */
+class LrWpanErrorModel : public Object
+{
+public:
+  /**
+   * Get the type ID.
+   *
+   * \return the object TypeId
+   */
+  static TypeId GetTypeId (void);
+
+  LrWpanErrorModel (void);
+
+  /**
+   * Return chunk success rate for given SNR.
+   *
+   * \return success rate (i.e. 1 - chunk error rate)
+   * \param snr SNR expressed as a power ratio (i.e. not in dB)
+   * \param nbits number of bits in the chunk
+   */
+  double GetChunkSuccessRate (double snr, uint32_t nbits) const;
+
+private:
+  /**
+   * Array of precalculated binomial coefficients.
+   */
+  double m_binomialCoefficients[17];
+
+};
+
+
+} // namespace ns3
+
+#endif /* LR_WPAN_ERROR_MODEL_H */
diff -Naur ns-3.19/src/lr-wpan/model/lr-wpan-interference-helper.cc ns-3.20/src/lr-wpan/model/lr-wpan-interference-helper.cc
--- ns-3.19/src/lr-wpan/model/lr-wpan-interference-helper.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.20/src/lr-wpan/model/lr-wpan-interference-helper.cc	2014-06-17 10:33:13.900995908 -0700
@@ -0,0 +1,109 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2013 Fraunhofer FKIE
+ *
+ * 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:
+ *  Sascha Alexander Jopen <jopen@cs.uni-bonn.de>
+ */
+#include "lr-wpan-interference-helper.h"
+#include <ns3/spectrum-value.h>
+#include <ns3/spectrum-model.h>
+#include <ns3/log.h>
+
+NS_LOG_COMPONENT_DEFINE ("LrWpanInterferenceHelper");
+
+namespace ns3 {
+
+LrWpanInterferenceHelper::LrWpanInterferenceHelper (Ptr<const SpectrumModel> spectrumModel)
+  : m_spectrumModel (spectrumModel),
+    m_dirty (false)
+{
+  m_signal = Create<SpectrumValue> (m_spectrumModel);
+}
+
+LrWpanInterferenceHelper::~LrWpanInterferenceHelper (void)
+{
+  m_spectrumModel = 0;
+  m_signal = 0;
+  m_signals.clear ();
+}
+
+bool
+LrWpanInterferenceHelper::AddSignal (Ptr<const SpectrumValue> signal)
+{
+  NS_LOG_FUNCTION (this << signal);
+
+  bool result = false;
+
+  if (signal->GetSpectrumModel () == m_spectrumModel)
+    {
+      result = m_signals.insert (signal).second;
+      if (result && !m_dirty)
+        {
+          *m_signal += *signal;
+        }
+    }
+  return result;
+}
+
+bool
+LrWpanInterferenceHelper::RemoveSignal (Ptr<const SpectrumValue> signal)
+{
+  NS_LOG_FUNCTION (this << signal);
+
+  bool result = false;
+
+  if (signal->GetSpectrumModel () == m_spectrumModel)
+    {
+      result = (m_signals.erase (signal) == 1);
+      if (result)
+        {
+          m_dirty = true;
+        }
+    }
+  return result;
+}
+
+void
+LrWpanInterferenceHelper::ClearSignals (void)
+{
+  NS_LOG_FUNCTION (this);
+
+  m_signals.clear ();
+  m_dirty = true;
+}
+
+Ptr<SpectrumValue>
+LrWpanInterferenceHelper::GetSignalPsd (void) const
+{
+  NS_LOG_FUNCTION (this);
+
+  if (m_dirty)
+    {
+      // Sum up the current interference PSD.
+      std::set<Ptr<const SpectrumValue> >::const_iterator it;
+      m_signal = Create<SpectrumValue> (m_spectrumModel);
+      for (it = m_signals.begin (); it != m_signals.end (); ++it)
+        {
+          *m_signal += *(*it);
+        }
+      m_dirty = false;
+    }
+
+  return m_signal->Copy ();
+}
+
+}
diff -Naur ns-3.19/src/lr-wpan/model/lr-wpan-interference-helper.h ns-3.20/src/lr-wpan/model/lr-wpan-interference-helper.h
--- ns-3.19/src/lr-wpan/model/lr-wpan-interference-helper.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.20/src/lr-wpan/model/lr-wpan-interference-helper.h	2014-06-17 10:33:13.900995908 -0700
@@ -0,0 +1,116 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2013 Fraunhofer FKIE
+ *
+ * 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:
+ *  Sascha Alexander Jopen <jopen@cs.uni-bonn.de>
+ */
+#ifndef LR_WPAN_INTERFERENCE_HELPER_H
+#define LR_WPAN_INTERFERENCE_HELPER_H
+
+#include <ns3/simple-ref-count.h>
+#include <ns3/ptr.h>
+#include <set>
+
+namespace ns3 {
+
+class SpectrumValue;
+class SpectrumModel;
+
+/**
+ * \ingroup lr-wpan
+ *
+ * \brief This class provides helper functions for LrWpan interference handling.
+ */
+class LrWpanInterferenceHelper : public SimpleRefCount<LrWpanInterferenceHelper>
+{
+public:
+  /**
+   * Create a new interference helper for the given SpectrumModel.
+   *
+   * \param spectrumModel the SpectrumModel to be used
+   */
+  LrWpanInterferenceHelper (Ptr<const SpectrumModel> spectrumModel);
+
+  ~LrWpanInterferenceHelper (void);
+
+  /**
+   * Add the given signal to the set of accumulated signals. Never add the same
+   * signal more than once. The SpectrumModels of the signal and the one used
+   * for instantiation of the helper have to be the same.
+   *
+   * \param signal the signal to be added
+   * \return false, if the signal was not added because the SpectrumModel of the
+   * signal does not match the one of the helper, true otherwise.
+   */
+  bool AddSignal (Ptr<const SpectrumValue> signal);
+
+  /**
+   * Remove the given signal to the set of accumulated signals.
+   *
+   * \param signal the signal to be removed
+   * \return false, if the signal was not removed (because it was not added
+   * before), true otherwise.
+   */
+  bool RemoveSignal (Ptr<const SpectrumValue> signal);
+
+  /**
+   * Remove all currently accumulated signals.
+   */
+  void ClearSignals (void);
+
+  /**
+   * Get the sum of all accumulated signals.
+   *
+   * \return the sum of the signals
+   */
+  Ptr<SpectrumValue> GetSignalPsd (void) const;
+
+  /**
+   * Get the SpectrumModel used by the helper.
+   *
+   * \return the helpers SpectrumModel
+   */
+  Ptr<const SpectrumModel> GetSpectrumModel (void) const;
+private:
+  // Disable implicit copy constructors
+  LrWpanInterferenceHelper (LrWpanInterferenceHelper const &);
+  LrWpanInterferenceHelper& operator= (LrWpanInterferenceHelper const &);
+  /**
+   * The helpers SpectrumModel.
+   */
+  Ptr<const SpectrumModel> m_spectrumModel;
+
+  /**
+   * The set of accumulated signals.
+   */
+  std::set<Ptr<const SpectrumValue> > m_signals;
+
+  /**
+   * The precomputed sum of all accumulated signals.
+   */
+  mutable Ptr<SpectrumValue> m_signal;
+
+  /**
+   * Mark m_signal as dirty, whenever a signal is added or removed. m_signal has
+   * to be recomputed before next use.
+   */
+  mutable bool m_dirty;
+};
+
+}
+
+#endif /* LR_WPAN_INTERFERENCE_HELPER_H */
diff -Naur ns-3.19/src/lr-wpan/model/lr-wpan-lqi-tag.cc ns-3.20/src/lr-wpan/model/lr-wpan-lqi-tag.cc
--- ns-3.19/src/lr-wpan/model/lr-wpan-lqi-tag.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.20/src/lr-wpan/model/lr-wpan-lqi-tag.cc	2014-06-17 10:33:13.900995908 -0700
@@ -0,0 +1,94 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2013 Fraunhofer FKIE
+ *
+ * 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:
+ *  Sascha Alexander Jopen <jopen@cs.uni-bonn.de>
+ */
+#include "lr-wpan-lqi-tag.h"
+#include <ns3/integer.h>
+
+namespace ns3 {
+
+NS_OBJECT_ENSURE_REGISTERED (LrWpanLqiTag);
+
+TypeId
+LrWpanLqiTag::GetTypeId (void)
+{
+  static TypeId tid = TypeId ("ns3::LrWpanLqiTag")
+    .SetParent<Tag> ()
+    .AddConstructor<LrWpanLqiTag> ()
+    .AddAttribute ("Lqi", "The lqi of the last packet received",
+                   IntegerValue (0),
+                   MakeIntegerAccessor (&LrWpanLqiTag::Get),
+                   MakeIntegerChecker<uint8_t> ())
+  ;
+  return tid;
+}
+
+TypeId
+LrWpanLqiTag::GetInstanceTypeId (void) const
+{
+  return GetTypeId ();
+}
+
+LrWpanLqiTag::LrWpanLqiTag (void)
+  : m_lqi (0)
+{
+}
+
+LrWpanLqiTag::LrWpanLqiTag (uint8_t lqi)
+  : m_lqi (lqi)
+{
+}
+
+uint32_t
+LrWpanLqiTag::GetSerializedSize (void) const
+{
+  return sizeof (uint8_t);
+}
+
+void
+LrWpanLqiTag::Serialize (TagBuffer i) const
+{
+  i.WriteU8 (m_lqi);
+}
+
+void
+LrWpanLqiTag::Deserialize (TagBuffer i)
+{
+  m_lqi = i.ReadU8 ();
+}
+
+void
+LrWpanLqiTag::Print (std::ostream &os) const
+{
+  os << "Lqi = " << m_lqi;
+}
+
+void
+LrWpanLqiTag::Set (uint8_t lqi)
+{
+  m_lqi = lqi;
+}
+
+uint8_t
+LrWpanLqiTag::Get (void) const
+{
+  return m_lqi;
+}
+
+}
diff -Naur ns-3.19/src/lr-wpan/model/lr-wpan-lqi-tag.h ns-3.20/src/lr-wpan/model/lr-wpan-lqi-tag.h
--- ns-3.19/src/lr-wpan/model/lr-wpan-lqi-tag.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.20/src/lr-wpan/model/lr-wpan-lqi-tag.h	2014-06-17 10:33:13.901995900 -0700
@@ -0,0 +1,77 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2013 Fraunhofer FKIE
+ *
+ * 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:
+ *  Sascha Alexander Jopen <jopen@cs.uni-bonn.de>
+ */
+#ifndef LR_WPAN_LQI_TAG_H
+#define LR_WPAN_LQI_TAG_H
+
+#include <ns3/tag.h>
+
+namespace ns3 {
+
+class LrWpanLqiTag : public Tag
+{
+public:
+  /**
+   * Get the type ID.
+   *
+   * \return the object TypeId
+   */
+  static TypeId GetTypeId (void);
+
+  virtual TypeId GetInstanceTypeId (void) const;
+
+  /**
+   * Create a LrWpanLqiTag with the default LQI 0.
+   */
+  LrWpanLqiTag (void);
+
+  /**
+   * Create a LrWpanLqiTag with the given LQI value.
+   */
+  LrWpanLqiTag (uint8_t lqi);
+
+  virtual uint32_t GetSerializedSize (void) const;
+  virtual void Serialize (TagBuffer i) const;
+  virtual void Deserialize (TagBuffer i);
+  virtual void Print (std::ostream &os) const;
+
+  /**
+   * Set the LQI to the given value.
+   *
+   * \param lqi the value of the LQI to set
+   */
+  void Set (uint8_t lqi);
+
+  /**
+   * Get the LQI value.
+   *
+   * \return the LQI value
+   */
+  uint8_t Get (void) const;
+private:
+  /**
+   * The current LQI value of the tag.
+   */
+  uint8_t m_lqi;
+};
+
+
+}
+#endif /* LR_WPAN_LQI_TAG_H */
diff -Naur ns-3.19/src/lr-wpan/model/lr-wpan-mac.cc ns-3.20/src/lr-wpan/model/lr-wpan-mac.cc
--- ns-3.19/src/lr-wpan/model/lr-wpan-mac.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.20/src/lr-wpan/model/lr-wpan-mac.cc	2014-06-17 10:33:13.903995884 -0700
@@ -0,0 +1,1015 @@
+/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2011 The Boeing Company
+ *
+ * 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:
+ *  Gary Pei <guangyu.pei@boeing.com>
+ *  kwong yin <kwong-sang.yin@boeing.com>
+ *  Tom Henderson <thomas.r.henderson@boeing.com>
+ *  Sascha Alexander Jopen <jopen@cs.uni-bonn.de>
+ *  Erwan Livolant <erwan.livolant@inria.fr>
+ */
+#include "lr-wpan-mac.h"
+#include "lr-wpan-csmaca.h"
+#include "lr-wpan-mac-header.h"
+#include "lr-wpan-mac-trailer.h"
+#include <ns3/simulator.h>
+#include <ns3/log.h>
+#include <ns3/uinteger.h>
+#include <ns3/node.h>
+#include <ns3/packet.h>
+#include <ns3/random-variable-stream.h>
+#include <ns3/double.h>
+
+NS_LOG_COMPONENT_DEFINE ("LrWpanMac");
+
+#undef NS_LOG_APPEND_CONTEXT
+#define NS_LOG_APPEND_CONTEXT                                   \
+  std::clog << "[address " << m_shortAddress << "] ";
+
+namespace ns3 {
+
+NS_OBJECT_ENSURE_REGISTERED (LrWpanMac);
+
+const uint32_t LrWpanMac::aMinMPDUOverhead = 9; // Table 85
+
+TypeId
+LrWpanMac::GetTypeId (void)
+{
+  static TypeId tid = TypeId ("ns3::LrWpanMac")
+    .SetParent<Object> ()
+    .AddConstructor<LrWpanMac> ()
+    .AddAttribute ("PanId", "16-bit identifier of the associated PAN",
+                   UintegerValue (),
+                   MakeUintegerAccessor (&LrWpanMac::m_macPanId),
+                   MakeUintegerChecker<uint16_t> ())
+    .AddTraceSource ("MacTxEnqueue",
+                     "Trace source indicating a packet has was enqueued in the transaction queue",
+                     MakeTraceSourceAccessor (&LrWpanMac::m_macTxEnqueueTrace))
+    .AddTraceSource ("MacTxDequeue",
+                     "Trace source indicating a packet has was dequeued from the transaction queue",
+                     MakeTraceSourceAccessor (&LrWpanMac::m_macTxDequeueTrace))
+    .AddTraceSource ("MacTx",
+                     "Trace source indicating a packet has arrived for transmission by this device",
+                     MakeTraceSourceAccessor (&LrWpanMac::m_macTxTrace))
+    .AddTraceSource ("MacTxOk",
+                     "Trace source indicating a packet has been successfully sent",
+                     MakeTraceSourceAccessor (&LrWpanMac::m_macTxOkTrace))
+    .AddTraceSource ("MacTxDrop",
+                     "Trace source indicating a packet has been dropped during transmission",
+                     MakeTraceSourceAccessor (&LrWpanMac::m_macTxDropTrace))
+    .AddTraceSource ("MacPromiscRx",
+                     "A packet has been received by this device, has been passed up from the physical layer "
+                     "and is being forwarded up the local protocol stack.  This is a promiscuous trace,",
+                     MakeTraceSourceAccessor (&LrWpanMac::m_macPromiscRxTrace))
+    .AddTraceSource ("MacRx",
+                     "A packet has been received by this device, has been passed up from the physical layer "
+                     "and is being forwarded up the local protocol stack.  This is a non-promiscuous trace,",
+                     MakeTraceSourceAccessor (&LrWpanMac::m_macRxTrace))
+    .AddTraceSource ("MacRxDrop",
+                     "Trace source indicating a packet was received, but dropped before being forwarded up the stack",
+                     MakeTraceSourceAccessor (&LrWpanMac::m_macRxDropTrace))
+    .AddTraceSource ("Sniffer",
+                     "Trace source simulating a non-promiscuous packet sniffer attached to the device",
+                     MakeTraceSourceAccessor (&LrWpanMac::m_snifferTrace))
+    .AddTraceSource ("PromiscSniffer",
+                     "Trace source simulating a promiscuous packet sniffer attached to the device",
+                     MakeTraceSourceAccessor (&LrWpanMac::m_promiscSnifferTrace))
+    .AddTraceSource ("MacState",
+                     "The state of LrWpan Mac",
+                     MakeTraceSourceAccessor (&LrWpanMac::m_macStateLogger))
+    .AddTraceSource ("MacSentPkt",
+                     "Trace source reporting some information about the sent packet",
+                     MakeTraceSourceAccessor (&LrWpanMac::m_sentPktTrace))
+  ;
+  return tid;
+}
+
+LrWpanMac::LrWpanMac ()
+{
+
+  // First set the state to a known value, call ChangeMacState to fire trace source.
+  m_lrWpanMacState = MAC_IDLE;
+  ChangeMacState (MAC_IDLE);
+
+  m_macRxOnWhenIdle = true;
+  m_macPanId = 0;
+  m_associationStatus = ASSOCIATED;
+  m_selfExt = Mac64Address::Allocate ();
+  m_macPromiscuousMode = false;
+  m_macMaxFrameRetries = 3;
+  m_retransmission = 0;
+  m_numCsmacaRetry = 0;
+  m_txPkt = 0;
+
+  Ptr<UniformRandomVariable> uniformVar = CreateObject<UniformRandomVariable> ();
+  uniformVar->SetAttribute ("Min", DoubleValue (0.0));
+  uniformVar->SetAttribute ("Max", DoubleValue (255.0));
+  m_macDsn = SequenceNumber8 (uniformVar->GetValue ());
+  m_shortAddress = Mac16Address ("00:00");
+}
+
+LrWpanMac::~LrWpanMac ()
+{
+}
+
+void
+LrWpanMac::DoInitialize ()
+{
+  if (m_macRxOnWhenIdle)
+    {
+      m_phy->PlmeSetTRXStateRequest (IEEE_802_15_4_PHY_RX_ON);
+    }
+  else
+    {
+      m_phy->PlmeSetTRXStateRequest (IEEE_802_15_4_PHY_TRX_OFF);
+    }
+
+  Object::DoInitialize ();
+}
+
+void
+LrWpanMac::DoDispose ()
+{
+  if (m_csmaCa != 0)
+    {
+      m_csmaCa->Dispose ();
+      m_csmaCa = 0;
+    }
+  m_txPkt = 0;
+  for (uint32_t i = 0; i < m_txQueue.size (); i++)
+    {
+      m_txQueue[i]->txQPkt = 0;
+      delete m_txQueue[i];
+    }
+  m_txQueue.clear ();
+  m_phy = 0;
+  m_mcpsDataIndicationCallback = MakeNullCallback< void, McpsDataIndicationParams, Ptr<Packet> > ();
+  m_mcpsDataConfirmCallback = MakeNullCallback< void, McpsDataConfirmParams > ();
+
+  Object::DoDispose ();
+}
+
+bool
+LrWpanMac::GetRxOnWhenIdle ()
+{
+  return m_macRxOnWhenIdle;
+}
+
+void
+LrWpanMac::SetRxOnWhenIdle (bool rxOnWhenIdle)
+{
+  NS_LOG_FUNCTION (this << rxOnWhenIdle);
+  m_macRxOnWhenIdle = rxOnWhenIdle;
+
+  if (m_lrWpanMacState == MAC_IDLE)
+    {
+      if (m_macRxOnWhenIdle)
+        {
+          m_phy->PlmeSetTRXStateRequest (IEEE_802_15_4_PHY_RX_ON);
+        }
+      else
+        {
+          m_phy->PlmeSetTRXStateRequest (IEEE_802_15_4_PHY_TRX_OFF);
+        }
+    }
+}
+
+void
+LrWpanMac::SetShortAddress (Mac16Address address)
+{
+  //NS_LOG_FUNCTION (this << address);
+  m_shortAddress = address;
+}
+
+void
+LrWpanMac::SetExtendedAddress (Mac64Address address)
+{
+  //NS_LOG_FUNCTION (this << address);
+  m_selfExt = address;
+}
+
+
+Mac16Address
+LrWpanMac::GetShortAddress () const
+{
+  NS_LOG_FUNCTION (this);
+  return m_shortAddress;
+}
+
+Mac64Address
+LrWpanMac::GetExtendedAddress () const
+{
+  NS_LOG_FUNCTION (this);
+  return m_selfExt;
+}
+void
+LrWpanMac::McpsDataRequest (McpsDataRequestParams params, Ptr<Packet> p)
+{
+  NS_LOG_FUNCTION (this << p);
+
+  McpsDataConfirmParams confirmParams;
+  confirmParams.m_msduHandle = params.m_msduHandle;
+
+  // TODO: We need a drop trace for the case that the packet is too large or the request parameters are maleformed.
+  //       The current tx drop trace is not suitable, because packets dropped using this trace carry the mac header
+  //       and footer, while packets being dropped here do not have them.
+
+  LrWpanMacHeader macHdr (LrWpanMacHeader::LRWPAN_MAC_DATA, m_macDsn.GetValue ());
+  m_macDsn++;
+
+  if (p->GetSize () > LrWpanPhy::aMaxPhyPacketSize - aMinMPDUOverhead)
+    {
+      // Note, this is just testing maximum theoretical frame size per the spec
+      // The frame could still be too large once headers are put on
+      // in which case the phy will reject it instead
+      NS_LOG_ERROR (this << " packet too big: " << p->GetSize ());
+      confirmParams.m_status = IEEE_802_15_4_FRAME_TOO_LONG;
+      if (!m_mcpsDataConfirmCallback.IsNull ())
+        {
+          m_mcpsDataConfirmCallback (confirmParams);
+        }
+      return;
+    }
+
+  if ((params.m_srcAddrMode == NO_PANID_ADDR)
+      && (params.m_dstAddrMode == NO_PANID_ADDR))
+    {
+      NS_LOG_ERROR (this << " Can not send packet with no Address field" );
+      confirmParams.m_status = IEEE_802_15_4_INVALID_ADDRESS;
+      if (!m_mcpsDataConfirmCallback.IsNull ())
+        {
+          m_mcpsDataConfirmCallback (confirmParams);
+        }
+      return;
+    }
+  switch (params.m_srcAddrMode)
+    {
+    case NO_PANID_ADDR:
+      macHdr.SetSrcAddrMode (params.m_srcAddrMode);
+      macHdr.SetNoPanIdComp ();
+      break;
+    case ADDR_MODE_RESERVED:
+      macHdr.SetSrcAddrMode (params.m_srcAddrMode);
+      break;
+    case SHORT_ADDR:
+      macHdr.SetSrcAddrMode (params.m_srcAddrMode);
+      macHdr.SetSrcAddrFields (GetPanId (), GetShortAddress ());
+      break;
+    case EXT_ADDR:
+      macHdr.SetSrcAddrMode (params.m_srcAddrMode);
+      macHdr.SetSrcAddrFields (GetPanId (), GetExtendedAddress ());
+      break;
+    default:
+      NS_LOG_ERROR (this << " Can not send packet with incorrect Source Address mode = " << params.m_srcAddrMode);
+      confirmParams.m_status = IEEE_802_15_4_INVALID_ADDRESS;
+      if (!m_mcpsDataConfirmCallback.IsNull ())
+        {
+          m_mcpsDataConfirmCallback (confirmParams);
+        }
+      return;
+    }
+
+  macHdr.SetDstAddrMode (params.m_dstAddrMode);
+  // TODO: Add field for EXT_ADDR destination address (and use it here).
+  macHdr.SetDstAddrFields (params.m_dstPanId, params.m_dstAddr);
+  macHdr.SetSecDisable ();
+  //extract the last 3 bits in TxOptions and map to macHdr
+  int b0 = params.m_txOptions & TX_OPTION_ACK;
+  int b1 = params.m_txOptions & TX_OPTION_GTS;
+  int b2 = params.m_txOptions & TX_OPTION_INDIRECT;
+  if (b0 == TX_OPTION_ACK)
+    {
+      // Set AckReq bit only if the destination is not the broadcast address.
+      if (!(macHdr.GetDstAddrMode () == SHORT_ADDR && macHdr.GetShortDstAddr () == "ff:ff"))
+        {
+          macHdr.SetAckReq ();
+        }
+    }
+  else if (b0 == 0)
+    {
+      macHdr.SetNoAckReq ();
+    }
+  else
+    {
+      confirmParams.m_status = IEEE_802_15_4_INVALID_PARAMETER;
+      NS_LOG_ERROR (this << "Incorrect TxOptions bit 0 not 0/1");
+      if (!m_mcpsDataConfirmCallback.IsNull ())
+        {
+          m_mcpsDataConfirmCallback (confirmParams);
+        }
+      return;
+    }
+
+  //if is Slotted CSMA means its beacon enabled
+  if (m_csmaCa->IsSlottedCsmaCa ())
+    {
+      if (b1 == TX_OPTION_GTS)
+        {
+          //TODO:GTS Transmission
+        }
+      else if (b1 == 0)
+        {
+          //TODO:CAP Transmission
+        }
+      else
+        {
+          NS_LOG_ERROR (this << "Incorrect TxOptions bit 1 not 0/1");
+          confirmParams.m_status = IEEE_802_15_4_INVALID_PARAMETER;
+          if (!m_mcpsDataConfirmCallback.IsNull ())
+            {
+              m_mcpsDataConfirmCallback (confirmParams);
+            }
+          return;
+        }
+    }
+  else
+    {
+      if (b1 != 0)
+        {
+          NS_LOG_ERROR (this << "for non-beacon-enables PAN, bit 1 should always be set to 0");
+          confirmParams.m_status = IEEE_802_15_4_INVALID_PARAMETER;
+          if (!m_mcpsDataConfirmCallback.IsNull ())
+            {
+              m_mcpsDataConfirmCallback (confirmParams);
+            }
+          return;
+        }
+    }
+
+  if (b2 == TX_OPTION_INDIRECT)
+    {
+      //TODO :indirect tx
+    }
+  else if (b2 == 0)
+    {
+      //TODO :direct tx
+    }
+  else
+    {
+      NS_LOG_ERROR (this << "Incorrect TxOptions bit 2 not 0/1");
+      confirmParams.m_status = IEEE_802_15_4_INVALID_PARAMETER;
+      if (!m_mcpsDataConfirmCallback.IsNull ())
+        {
+          m_mcpsDataConfirmCallback (confirmParams);
+        }
+      return;
+    }
+
+  p->AddHeader (macHdr);
+
+  LrWpanMacTrailer macTrailer;
+  // Calculate FCS if the global attribute ChecksumEnable is set.
+  if (Node::ChecksumEnabled ())
+    {
+      macTrailer.EnableFcs (true);
+      macTrailer.SetFcs (p);
+    }
+  p->AddTrailer (macTrailer);
+
+  m_macTxEnqueueTrace (p);
+
+  TxQueueElement *txQElement = new TxQueueElement;
+  txQElement->txQMsduHandle = params.m_msduHandle;
+  txQElement->txQPkt = p;
+  m_txQueue.push_back (txQElement);
+
+  CheckQueue ();
+}
+
+void
+LrWpanMac::CheckQueue ()
+{
+  NS_LOG_FUNCTION (this);
+
+  // Pull a packet from the queue and start sending, if we are not already sending.
+  if (m_lrWpanMacState == MAC_IDLE && !m_txQueue.empty () && m_txPkt == 0 && !m_setMacState.IsRunning ())
+    {
+      TxQueueElement *txQElement = m_txQueue.front ();
+      m_txPkt = txQElement->txQPkt;
+      m_setMacState = Simulator::ScheduleNow (&LrWpanMac::SetLrWpanMacState, this, MAC_CSMA);
+    }
+}
+
+void
+LrWpanMac::SetCsmaCa (Ptr<LrWpanCsmaCa> csmaCa)
+{
+  m_csmaCa = csmaCa;
+}
+
+void
+LrWpanMac::SetPhy (Ptr<LrWpanPhy> phy)
+{
+  m_phy = phy;
+}
+
+Ptr<LrWpanPhy>
+LrWpanMac::GetPhy (void)
+{
+  return m_phy;
+}
+
+void
+LrWpanMac::SetMcpsDataIndicationCallback (McpsDataIndicationCallback c)
+{
+  m_mcpsDataIndicationCallback = c;
+}
+
+void
+LrWpanMac::SetMcpsDataConfirmCallback (McpsDataConfirmCallback c)
+{
+  m_mcpsDataConfirmCallback = c;
+}
+
+void
+LrWpanMac::PdDataIndication (uint32_t psduLength, Ptr<Packet> p, uint8_t lqi)
+{
+  NS_ASSERT (m_lrWpanMacState == MAC_IDLE || m_lrWpanMacState == MAC_ACK_PENDING || m_lrWpanMacState == MAC_CSMA);
+
+  NS_LOG_FUNCTION (this << psduLength << p << lqi);
+
+  bool acceptFrame;
+
+  // from sec 7.5.6.2 Reception and rejection, Std802.15.4-2006
+  // level 1 filtering, test FCS field and reject if frame fails
+  // level 2 filtering if promiscuous mode pass frame to higher layer otherwise perform level 3 filtering
+  // level 3 filtering accept frame
+  // if Frame type and version is not reserved, and
+  // if there is a dstPanId then dstPanId=m_macPanId or broadcastPanI, and
+  // if there is a shortDstAddr then shortDstAddr =shortMacAddr or broadcastAddr, and
+  // if beacon frame then srcPanId = m_macPanId
+  // if only srcAddr field in Data or Command frame,accept frame if srcPanId=m_macPanId
+
+  Ptr<Packet> originalPkt = p->Copy (); // because we will strip headers
+
+  m_promiscSnifferTrace (originalPkt);
+
+  m_macPromiscRxTrace (originalPkt);
+  // XXX no rejection tracing (to macRxDropTrace) being performed below
+
+  LrWpanMacTrailer receivedMacTrailer;
+  p->RemoveTrailer (receivedMacTrailer);
+  if (Node::ChecksumEnabled ())
+    {
+      receivedMacTrailer.EnableFcs (true);
+    }
+
+  // level 1 filtering
+  if (!receivedMacTrailer.CheckFcs (p))
+    {
+      m_macRxDropTrace (originalPkt);
+    }
+  else
+    {
+      LrWpanMacHeader receivedMacHdr;
+      p->RemoveHeader (receivedMacHdr);
+
+      McpsDataIndicationParams params;
+      params.m_dsn = receivedMacHdr.GetSeqNum ();
+      params.m_mpduLinkQuality = lqi;
+      params.m_srcPanId = receivedMacHdr.GetSrcPanId ();
+      params.m_srcAddrMode = receivedMacHdr.GetSrcAddrMode ();
+      // TODO: Add field for EXT_ADDR source address.
+      if (params.m_srcAddrMode == SHORT_ADDR)
+        {
+          params.m_srcAddr = receivedMacHdr.GetShortSrcAddr ();
+        }
+      params.m_dstPanId = receivedMacHdr.GetDstPanId ();
+      params.m_dstAddrMode = receivedMacHdr.GetDstAddrMode ();
+      // TODO: Add field for EXT_ADDR destination address.
+      if (params.m_dstAddrMode == SHORT_ADDR)
+        {
+          params.m_dstAddr = receivedMacHdr.GetShortDstAddr ();
+        }
+
+      NS_LOG_DEBUG ("Packet from " << params.m_srcAddr << " to " << params.m_dstAddr);
+
+      if (m_macPromiscuousMode)
+        {
+          //level 2 filtering
+          if (!m_mcpsDataIndicationCallback.IsNull ())
+            {
+              NS_LOG_DEBUG ("promiscuous mode, forwarding up");
+              m_mcpsDataIndicationCallback (params, p);
+            }
+          else
+            {
+              NS_LOG_ERROR (this << " Data Indication Callback not initialised");
+            }
+        }
+      else
+        {
+          //level 3 frame filtering
+          acceptFrame = (receivedMacHdr.GetType () != LrWpanMacHeader::LRWPAN_MAC_RESERVED);
+
+          if (acceptFrame)
+            {
+              acceptFrame = (receivedMacHdr.GetFrameVer () <= 1);
+            }
+
+          if (acceptFrame
+              && (receivedMacHdr.GetDstAddrMode () > 1))
+            {
+              acceptFrame = receivedMacHdr.GetDstPanId () == m_macPanId
+                || receivedMacHdr.GetDstPanId () == 0xffff;
+            }
+
+          if (acceptFrame
+              && (receivedMacHdr.GetDstAddrMode () == 2))
+            {
+              acceptFrame = receivedMacHdr.GetShortDstAddr () == m_shortAddress
+                || receivedMacHdr.GetShortDstAddr () == Mac16Address ("ff:ff");        // check for broadcast addrs
+            }
+
+          if (acceptFrame
+              && (receivedMacHdr.GetDstAddrMode () == 3))
+            {
+              acceptFrame = (receivedMacHdr.GetExtDstAddr () == m_selfExt);
+            }
+
+          if (acceptFrame
+              && (receivedMacHdr.GetType () == LrWpanMacHeader::LRWPAN_MAC_BEACON))
+            {
+              if (m_macPanId == 0xffff)
+                {
+                  // TODO: Accept only if the frame version field is valid
+                  acceptFrame = true;
+                }
+              else
+                {
+                  acceptFrame = receivedMacHdr.GetSrcPanId () == m_macPanId;
+                }
+            }
+
+          if (acceptFrame
+              && ((receivedMacHdr.GetType () == LrWpanMacHeader::LRWPAN_MAC_DATA)
+                  || (receivedMacHdr.GetType () == LrWpanMacHeader::LRWPAN_MAC_COMMAND))
+              && (receivedMacHdr.GetSrcAddrMode () > 1))
+            {
+              acceptFrame = receivedMacHdr.GetSrcPanId () == m_macPanId; // \todo need to check if PAN coord
+            }
+
+          if (acceptFrame)
+            {
+              m_macRxTrace (originalPkt);
+              // \todo: What should we do if we receive a frame while waiting for an ACK?
+              //        Especially if this frame has the ACK request bit set, should we reply with an ACK, possibly missing the pending ACK?
+
+              // If the received frame is a frame with the ACK request bit set, we immediately send back an ACK.
+              // If we are currently waiting for a pending ACK, we assume the ACK was lost and trigger a retransmission after sending the ACK.
+              if ((receivedMacHdr.IsData () || receivedMacHdr.IsCommand ()) && receivedMacHdr.IsAckReq ()
+                  && !(receivedMacHdr.GetDstAddrMode () == SHORT_ADDR && receivedMacHdr.GetShortDstAddr () == "ff:ff"))
+                {
+                  // If this is a data or mac command frame, which is not a broadcast,
+                  // with ack req set, generate and send an ack frame.
+                  // If there is a CSMA medium access in progress we cancel the medium access
+                  // for sending the ACK frame. A new transmission attempt will be started
+                  // after the ACK was send.
+                  if (m_lrWpanMacState == MAC_ACK_PENDING)
+                    {
+                      m_ackWaitTimeout.Cancel ();
+                      PrepareRetransmission ();
+                    }
+                  else if (m_lrWpanMacState == MAC_CSMA)
+                    {
+                      // \todo: If we receive a packet while doing CSMA/CA, should  we drop the packet because of channel busy,
+                      //        or should we restart CSMA/CA for the packet after sending the ACK?
+                      // Currently we simply restart CSMA/CA after sending the ACK.
+                      m_csmaCa->Cancel ();
+                    }
+                  // Cancel any pending MAC state change, ACKs have higher priority.
+                  m_setMacState.Cancel ();
+                  ChangeMacState (MAC_IDLE);
+                  m_setMacState = Simulator::ScheduleNow (&LrWpanMac::SendAck, this, receivedMacHdr.GetSeqNum ());
+                }
+
+              if (receivedMacHdr.IsData () && !m_mcpsDataIndicationCallback.IsNull ())
+                {
+                  // If it is a data frame, push it up the stack.
+                  NS_LOG_DEBUG ("PdDataIndication():  Packet is for me; forwarding up");
+                  m_mcpsDataIndicationCallback (params, p);
+                }
+              else if (receivedMacHdr.IsAcknowledgment () && m_txPkt && m_lrWpanMacState == MAC_ACK_PENDING)
+                {
+                  LrWpanMacHeader macHdr;
+                  m_txPkt->PeekHeader (macHdr);
+                  if (receivedMacHdr.GetSeqNum () == macHdr.GetSeqNum ())
+                    {
+                      m_macTxOkTrace (m_txPkt);
+                      // If it is an ACK with the expected sequence number, finish the transmission
+                      // and notify the upper layer.
+                      m_ackWaitTimeout.Cancel ();
+                      if (!m_mcpsDataConfirmCallback.IsNull ())
+                        {
+                          TxQueueElement *txQElement = m_txQueue.front ();
+                          McpsDataConfirmParams confirmParams;
+                          confirmParams.m_msduHandle = txQElement->txQMsduHandle;
+                          confirmParams.m_status = IEEE_802_15_4_SUCCESS;
+                          m_mcpsDataConfirmCallback (confirmParams);
+                        }
+                      RemoveFirstTxQElement ();
+                      m_setMacState.Cancel ();
+                      m_setMacState = Simulator::ScheduleNow (&LrWpanMac::SetLrWpanMacState, this, MAC_IDLE);
+                    }
+                  else
+                    {
+                      // If it is an ACK with an unexpected sequence number, mark the current transmission as failed and start a retransmit. (cf 7.5.6.4.3)
+                      m_ackWaitTimeout.Cancel ();
+                      if (!PrepareRetransmission ())
+                        {
+                          m_setMacState.Cancel ();
+                          m_setMacState = Simulator::ScheduleNow (&LrWpanMac::SetLrWpanMacState, this, MAC_IDLE);
+                        }
+                      else
+                        {
+                          m_setMacState.Cancel ();
+                          m_setMacState = Simulator::ScheduleNow (&LrWpanMac::SetLrWpanMacState, this, MAC_CSMA);
+                        }
+                    }
+                }
+            }
+          else
+            {
+              m_macRxDropTrace (originalPkt);
+            }
+        }
+    }
+}
+
+void
+LrWpanMac::SendAck (uint8_t seqno)
+{
+  NS_LOG_FUNCTION (this << static_cast<uint32_t> (seqno));
+
+  NS_ASSERT (m_lrWpanMacState == MAC_IDLE);
+
+  // Generate a corresponding ACK Frame.
+  LrWpanMacHeader macHdr (LrWpanMacHeader::LRWPAN_MAC_ACKNOWLEDGMENT, seqno);
+  LrWpanMacTrailer macTrailer;
+  Ptr<Packet> ackPacket = Create<Packet> (0);
+  ackPacket->AddHeader (macHdr);
+  // Calculate FCS if the global attribute ChecksumEnable is set.
+  if (Node::ChecksumEnabled ())
+    {
+      macTrailer.EnableFcs (true);
+      macTrailer.SetFcs (ackPacket);
+    }
+  ackPacket->AddTrailer (macTrailer);
+
+  // Enqueue the ACK packet for further processing
+  // when the transmitter is activated.
+  m_txPkt = ackPacket;
+
+  // Switch transceiver to TX mode. Proceed sending the Ack on confirm.
+  ChangeMacState (MAC_SENDING);
+  m_phy->PlmeSetTRXStateRequest (IEEE_802_15_4_PHY_TX_ON);
+}
+
+void
+LrWpanMac::RemoveFirstTxQElement ()
+{
+  TxQueueElement *txQElement = m_txQueue.front ();
+  Ptr<const Packet> p = txQElement->txQPkt;
+  m_numCsmacaRetry += m_csmaCa->GetNB () + 1;
+
+  Ptr<Packet> pkt = p->Copy ();
+  LrWpanMacHeader hdr;
+  pkt->RemoveHeader (hdr);
+  if (hdr.GetShortDstAddr () != Mac16Address ("ff:ff"))
+    {
+      m_sentPktTrace (p, m_retransmission + 1, m_numCsmacaRetry);
+    }
+
+  txQElement->txQPkt = 0;
+  delete txQElement;
+  m_txQueue.pop_front ();
+  m_txPkt = 0;
+  m_retransmission = 0;
+  m_numCsmacaRetry = 0;
+  m_macTxDequeueTrace (p);
+}
+
+void
+LrWpanMac::AckWaitTimeout (void)
+{
+  NS_LOG_FUNCTION (this);
+
+  // TODO: If we are a PAN coordinator and this was an indirect transmission,
+  //       we will not initiate a retransmission. Instead we wait for the data
+  //       being extracted after a new data request command.
+  if (!PrepareRetransmission ())
+    {
+      SetLrWpanMacState (MAC_IDLE);
+    }
+  else
+    {
+      SetLrWpanMacState (MAC_CSMA);
+    }
+}
+
+bool
+LrWpanMac::PrepareRetransmission (void)
+{
+  NS_LOG_FUNCTION (this);
+
+  if (m_retransmission >= m_macMaxFrameRetries)
+    {
+      // Maximum number of retransmissions has been reached.
+      // remove the copy of the packet that was just sent
+      TxQueueElement *txQElement = m_txQueue.front ();
+      m_macTxDropTrace (txQElement->txQPkt);
+      if (!m_mcpsDataConfirmCallback.IsNull ())
+        {
+          McpsDataConfirmParams confirmParams;
+          confirmParams.m_msduHandle = txQElement->txQMsduHandle;
+          confirmParams.m_status = IEEE_802_15_4_NO_ACK;
+          m_mcpsDataConfirmCallback (confirmParams);
+        }
+      RemoveFirstTxQElement ();
+      return false;
+    }
+  else
+    {
+      m_retransmission++;
+      m_numCsmacaRetry += m_csmaCa->GetNB () + 1;
+      // Start next CCA process for this packet.
+      return true;
+    }
+}
+
+void
+LrWpanMac::PdDataConfirm (LrWpanPhyEnumeration status)
+{
+  NS_ASSERT (m_lrWpanMacState == MAC_SENDING);
+
+  NS_LOG_FUNCTION (this << status << m_txQueue.size ());
+
+  LrWpanMacHeader macHdr;
+  m_txPkt->PeekHeader (macHdr);
+  if (status == IEEE_802_15_4_PHY_SUCCESS)
+    {
+      if (!macHdr.IsAcknowledgment ())
+        {
+          // We have just send a regular data packet, check if we have to wait
+          // for an ACK.
+          if (macHdr.IsAckReq ())
+            {
+              // wait for the ack or the next retransmission timeout
+              // start retransmission timer
+              Time waitTime = MicroSeconds (GetMacAckWaitDuration () * 1000 * 1000 / m_phy->GetDataOrSymbolRate (false));
+              NS_ASSERT (m_ackWaitTimeout.IsExpired ());
+              m_ackWaitTimeout = Simulator::Schedule (waitTime, &LrWpanMac::AckWaitTimeout, this);
+              m_setMacState.Cancel ();
+              m_setMacState = Simulator::ScheduleNow (&LrWpanMac::SetLrWpanMacState, this, MAC_ACK_PENDING);
+              return;
+            }
+          else
+            {
+              m_macTxOkTrace (m_txPkt);
+              // remove the copy of the packet that was just sent
+              if (!m_mcpsDataConfirmCallback.IsNull ())
+                {
+                  McpsDataConfirmParams confirmParams;
+                  NS_ASSERT_MSG (m_txQueue.size () > 0, "TxQsize = 0");
+                  TxQueueElement *txQElement = m_txQueue.front ();
+                  confirmParams.m_msduHandle = txQElement->txQMsduHandle;
+                  confirmParams.m_status = IEEE_802_15_4_SUCCESS;
+                  m_mcpsDataConfirmCallback (confirmParams);
+                }
+              RemoveFirstTxQElement ();
+            }
+        }
+      else
+        {
+          // We have send an ACK. Clear the packet buffer.
+          m_txPkt = 0;
+        }
+    }
+  else if (status == IEEE_802_15_4_PHY_UNSPECIFIED)
+    {
+
+      if (!macHdr.IsAcknowledgment ())
+        {
+          NS_ASSERT_MSG (m_txQueue.size () > 0, "TxQsize = 0");
+          TxQueueElement *txQElement = m_txQueue.front ();
+          m_macTxDropTrace (txQElement->txQPkt);
+          if (!m_mcpsDataConfirmCallback.IsNull ())
+            {
+              McpsDataConfirmParams confirmParams;
+              confirmParams.m_msduHandle = txQElement->txQMsduHandle;
+              confirmParams.m_status = IEEE_802_15_4_FRAME_TOO_LONG;
+              m_mcpsDataConfirmCallback (confirmParams);
+            }
+          RemoveFirstTxQElement ();
+        }
+      else
+        {
+          NS_LOG_ERROR ("Unable to send ACK");
+        }
+    }
+  else
+    {
+      // Something went really wrong. The PHY is not in the correct state for
+      // data transmission.
+      NS_FATAL_ERROR ("Transmission attempt failed with PHY status " << status);
+    }
+
+  m_setMacState.Cancel ();
+  m_setMacState = Simulator::ScheduleNow (&LrWpanMac::SetLrWpanMacState, this, MAC_IDLE);
+}
+
+void
+LrWpanMac::PlmeCcaConfirm (LrWpanPhyEnumeration status)
+{
+  NS_LOG_FUNCTION (this << status);
+  // Direct this call through the csmaCa object
+  m_csmaCa->PlmeCcaConfirm (status);
+}
+
+void
+LrWpanMac::PlmeEdConfirm (LrWpanPhyEnumeration status, uint8_t energyLevel)
+{
+  NS_LOG_FUNCTION (this << status << energyLevel);
+
+}
+
+void
+LrWpanMac::PlmeGetAttributeConfirm (LrWpanPhyEnumeration status,
+                                    LrWpanPibAttributeIdentifier id,
+                                    LrWpanPhyPibAttributes* attribute)
+{
+  NS_LOG_FUNCTION (this << status << id << attribute);
+}
+
+void
+LrWpanMac::PlmeSetTRXStateConfirm (LrWpanPhyEnumeration status)
+{
+  NS_LOG_FUNCTION (this << status);
+
+  if (m_lrWpanMacState == MAC_SENDING && (status == IEEE_802_15_4_PHY_TX_ON || status == IEEE_802_15_4_PHY_SUCCESS))
+    {
+      NS_ASSERT (m_txPkt);
+
+      // Start sending if we are in state SENDING and the PHY transmitter was enabled.
+      m_promiscSnifferTrace (m_txPkt);
+      m_snifferTrace (m_txPkt);
+      m_macTxTrace (m_txPkt);
+      m_phy->PdDataRequest (m_txPkt->GetSize (), m_txPkt);
+    }
+  else if (m_lrWpanMacState == MAC_CSMA && (status == IEEE_802_15_4_PHY_RX_ON || status == IEEE_802_15_4_PHY_SUCCESS))
+    {
+      // Start the CSMA algorithm as soon as the receiver is enabled.
+      m_csmaCa->Start ();
+    }
+  else if (m_lrWpanMacState == MAC_IDLE)
+    {
+      NS_ASSERT (status == IEEE_802_15_4_PHY_RX_ON || status == IEEE_802_15_4_PHY_SUCCESS || status == IEEE_802_15_4_PHY_TRX_OFF);
+      // Do nothing special when going idle.
+    }
+  else if (m_lrWpanMacState == MAC_ACK_PENDING)
+    {
+      NS_ASSERT (status == IEEE_802_15_4_PHY_RX_ON || status == IEEE_802_15_4_PHY_SUCCESS);
+    }
+  else
+    {
+      // TODO: What to do when we receive an error?
+      // If we want to transmit a packet, but switching the transceiver on results
+      // in an error, we have to recover somehow (and start sending again).
+      NS_FATAL_ERROR ("Error changing transceiver state");
+    }
+}
+
+void
+LrWpanMac::PlmeSetAttributeConfirm (LrWpanPhyEnumeration status,
+                                    LrWpanPibAttributeIdentifier id)
+{
+  NS_LOG_FUNCTION (this << status << id);
+}
+
+void
+LrWpanMac::SetLrWpanMacState (LrWpanMacState macState)
+{
+  NS_LOG_FUNCTION (this << "mac state = " << macState);
+
+  McpsDataConfirmParams confirmParams;
+
+  if (macState == MAC_IDLE)
+    {
+      ChangeMacState (MAC_IDLE);
+
+      if (m_macRxOnWhenIdle)
+        {
+          m_phy->PlmeSetTRXStateRequest (IEEE_802_15_4_PHY_RX_ON);
+        }
+      else
+        {
+          m_phy->PlmeSetTRXStateRequest (IEEE_802_15_4_PHY_TRX_OFF);
+        }
+
+      CheckQueue ();
+    }
+  else if (macState == MAC_ACK_PENDING)
+    {
+      ChangeMacState (MAC_ACK_PENDING);
+      m_phy->PlmeSetTRXStateRequest (IEEE_802_15_4_PHY_RX_ON);
+    }
+  else if (macState == MAC_CSMA)
+    {
+      NS_ASSERT (m_lrWpanMacState == MAC_IDLE || m_lrWpanMacState == MAC_ACK_PENDING);
+
+      ChangeMacState (MAC_CSMA);
+      m_phy->PlmeSetTRXStateRequest (IEEE_802_15_4_PHY_RX_ON);
+    }
+  else if (m_lrWpanMacState == MAC_CSMA && macState == CHANNEL_IDLE)
+    {
+      // Channel is idle, set transmitter to TX_ON
+      ChangeMacState (MAC_SENDING);
+      m_phy->PlmeSetTRXStateRequest (IEEE_802_15_4_PHY_TX_ON);
+    }
+  else if (m_lrWpanMacState == MAC_CSMA && macState == CHANNEL_ACCESS_FAILURE)
+    {
+      NS_ASSERT (m_txPkt);
+
+      // cannot find a clear channel, drop the current packet.
+      NS_LOG_DEBUG ( this << " cannot find clear channel");
+      confirmParams.m_msduHandle = m_txQueue.front ()->txQMsduHandle;
+      confirmParams.m_status = IEEE_802_15_4_CHANNEL_ACCESS_FAILURE;
+      m_macTxDropTrace (m_txPkt);
+      if (!m_mcpsDataConfirmCallback.IsNull ())
+        {
+          m_mcpsDataConfirmCallback (confirmParams);
+        }
+      // remove the copy of the packet that was just sent
+      RemoveFirstTxQElement ();
+
+      ChangeMacState (MAC_IDLE);
+    }
+}
+
+LrWpanAssociationStatus
+LrWpanMac::GetAssociationStatus (void) const
+{
+  return m_associationStatus;
+}
+
+void
+LrWpanMac::SetAssociationStatus (LrWpanAssociationStatus status)
+{
+  m_associationStatus = status;
+}
+
+uint16_t
+LrWpanMac::GetPanId (void) const
+{
+  return m_macPanId;
+}
+
+void
+LrWpanMac::SetPanId (uint16_t panId)
+{
+  m_macPanId = panId;
+}
+
+void
+LrWpanMac::ChangeMacState (LrWpanMacState newState)
+{
+  NS_LOG_LOGIC (this << " change lrwpan mac state from "
+                     << m_lrWpanMacState << " to "
+                     << newState);
+  m_macStateLogger (m_lrWpanMacState, newState);
+  m_lrWpanMacState = newState;
+}
+
+uint64_t
+LrWpanMac::GetMacAckWaitDuration (void) const
+{
+  return m_csmaCa->GetUnitBackoffPeriod () + m_phy->aTurnaroundTime + m_phy->GetPhySHRDuration ()
+         + ceil (6 * m_phy->GetPhySymbolsPerOctet ());
+}
+
+uint8_t
+LrWpanMac::GetMacMaxFrameRetries (void) const
+{
+  return m_macMaxFrameRetries;
+}
+
+void
+LrWpanMac::SetMacMaxFrameRetries (uint8_t retries)
+{
+  m_macMaxFrameRetries = retries;
+}
+
+} // namespace ns3
diff -Naur ns-3.19/src/lr-wpan/model/lr-wpan-mac.h ns-3.20/src/lr-wpan/model/lr-wpan-mac.h
--- ns-3.19/src/lr-wpan/model/lr-wpan-mac.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.20/src/lr-wpan/model/lr-wpan-mac.h	2014-06-17 10:33:13.904995877 -0700
@@ -0,0 +1,743 @@
+/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2011 The Boeing Company
+ *
+ * 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:
+ *  Gary Pei <guangyu.pei@boeing.com>
+ *  kwong yin <kwong-sang.yin@boeing.com>
+ *  Tom Henderson <thomas.r.henderson@boeing.com>
+ *  Sascha Alexander Jopen <jopen@cs.uni-bonn.de>
+ */
+#ifndef LR_WPAN_MAC_H
+#define LR_WPAN_MAC_H
+
+#include <ns3/object.h>
+#include <ns3/traced-callback.h>
+#include <ns3/mac16-address.h>
+#include <ns3/mac64-address.h>
+#include <ns3/sequence-number.h>
+#include <ns3/lr-wpan-phy.h>
+#include <ns3/event-id.h>
+#include <deque>
+
+
+namespace ns3 {
+
+class Packet;
+class LrWpanCsmaCa;
+
+/**
+ * \defgroup lr-wpan LR-WPAN models
+ *
+ * This section documents the API of the IEEE 802.15.4-related models.  For a generic functional description, please refer to the ns-3 manual.
+ */
+typedef enum
+{
+  TX_OPTION_NONE = 0,
+  TX_OPTION_ACK = 1,
+  TX_OPTION_GTS = 2,
+  TX_OPTION_INDIRECT = 4
+} LrWpanTxOption;
+
+typedef enum
+{
+  MAC_IDLE,
+  MAC_CSMA,
+  MAC_SENDING,
+  MAC_ACK_PENDING,
+  CHANNEL_ACCESS_FAILURE,
+  CHANNEL_IDLE,
+  SET_PHY_TX_ON
+} LrWpanMacState;
+
+/**
+ * table 80 of 802.15.4
+ */
+typedef enum
+{
+  NO_PANID_ADDR = 0,
+  ADDR_MODE_RESERVED = 1,
+  SHORT_ADDR = 2,
+  EXT_ADDR = 3
+} LrWpanAddressMode;
+
+/**
+ * table 83 of 802.15.4
+ */
+typedef enum
+{
+  ASSOCIATED = 0,
+  PAN_AT_CAPACITY = 1,
+  PAN_ACCESS_DENIED = 2,
+  ASSOCIATED_WITHOUT_ADDRESS = 0xfe,
+  DISASSOCIATED = 0xff
+} LrWpanAssociationStatus;
+
+/*
+ * Table 42 of 802.15.4-2006
+ */
+typedef enum
+{
+  IEEE_802_15_4_SUCCESS                = 0,
+  IEEE_802_15_4_TRANSACTION_OVERFLOW   = 1,
+  IEEE_802_15_4_TRANSACTION_EXPIRED    = 2,
+  IEEE_802_15_4_CHANNEL_ACCESS_FAILURE = 3,
+  IEEE_802_15_4_INVALID_ADDRESS        = 4,
+  IEEE_802_15_4_INVALID_GTS            = 5,
+  IEEE_802_15_4_NO_ACK                 = 6,
+  IEEE_802_15_4_COUNTER_ERROR          = 7,
+  IEEE_802_15_4_FRAME_TOO_LONG         = 8,
+  IEEE_802_15_4_UNAVAILABLE_KEY        = 9,
+  IEEE_802_15_4_UNSUPPORTED_SECURITY   = 10,
+  IEEE_802_15_4_INVALID_PARAMETER      = 11
+} LrWpanMcpsDataConfirmStatus;
+
+struct McpsDataRequestParams
+{
+  McpsDataRequestParams ()
+    : m_srcAddrMode (SHORT_ADDR),
+      m_dstAddrMode (SHORT_ADDR),
+      m_dstPanId (0),
+      m_dstAddr (),
+      m_msduHandle (0),
+      m_txOptions (0)
+  {
+  }
+  LrWpanAddressMode m_srcAddrMode;
+  LrWpanAddressMode m_dstAddrMode;
+  uint16_t m_dstPanId;
+  Mac16Address m_dstAddr;
+  uint8_t m_msduHandle;
+  uint8_t m_txOptions;  // bitmap
+};
+
+struct McpsDataConfirmParams
+{
+  uint8_t m_msduHandle;
+  LrWpanMcpsDataConfirmStatus m_status;
+};
+
+struct McpsDataIndicationParams
+{
+  uint8_t m_srcAddrMode;
+  uint16_t m_srcPanId;
+  Mac16Address m_srcAddr;
+  uint8_t m_dstAddrMode;
+  uint16_t m_dstPanId;
+  Mac16Address m_dstAddr;
+  uint8_t m_mpduLinkQuality;
+  uint8_t m_dsn;
+};
+
+// This callback is called after a McpsDataRequest has been called from
+// the higher layer.  It returns a status of the outcome of the
+// transmission request
+typedef Callback<void, McpsDataConfirmParams> McpsDataConfirmCallback;
+
+// This callback is called after a Mcps has successfully received a
+// frame and wants to deliver it to the higher layer.
+//
+// XXX for now, we do not deliver all of the parameters in section
+// 7.1.1.3.1 but just send up the packet.
+typedef Callback<void, McpsDataIndicationParams, Ptr<Packet> > McpsDataIndicationCallback;
+
+
+/**
+ * \ingroup lr-wpan
+ *
+ * Class that implements the LR-WPAN Mac state machine
+ */
+class LrWpanMac : public Object
+{
+public:
+  /**
+   * Get the type ID.
+   *
+   * \return the object TypeId
+   */
+  static TypeId GetTypeId (void);
+
+  /**
+   * The minimum number of octets added by the MAC sublayer to the PSDU.
+   * See IEEE 802.15.4-2006, section 7.4.1, Table 85
+   */
+  static const uint32_t aMinMPDUOverhead;
+
+  /**
+   * Default constructor.
+   */
+  LrWpanMac (void);
+  virtual ~LrWpanMac (void);
+
+  /**
+   * Check if the receiver will be enabled when the MAC is idle.
+   *
+   * \return true, if the receiver is enabled during idle periods, false otherwise
+   */
+  bool GetRxOnWhenIdle (void);
+
+  /**
+   * Set if the receiver should be enabled when the MAC is idle.
+   *
+   * \param rxOnWhenIdle set to true to enable the receiver during idle periods
+   */
+  void SetRxOnWhenIdle (bool rxOnWhenIdle);
+
+  // XXX these setters will become obsolete if we use the attribute system
+  /**
+   * Set the short address of this MAC.
+   *
+   * \param address the new address
+   */
+  void SetShortAddress (Mac16Address address);
+
+  /**
+   * Get the short address of this MAC.
+   *
+   * \return the short address
+   */
+  Mac16Address GetShortAddress (void) const;
+
+  /**
+   * Set the extended address of this MAC.
+   *
+   * \param address the new address
+   */
+  void SetExtendedAddress (Mac64Address address);
+
+  /**
+   * Get the extended address of this MAC.
+   *
+   * \return the extended address
+   */
+  Mac64Address GetExtendedAddress (void) const;
+
+  /**
+   * Set the PAN id used by this MAC.
+   *
+   * \param panId the new PAN id.
+   */
+  void SetPanId (uint16_t panId);
+
+  /**
+   * Get the PAN id used by this MAC.
+   *
+   * \return the PAN id.
+   */
+  uint16_t GetPanId (void) const;
+
+  /**
+   *  IEEE 802.15.4-2006, section 7.1.1.1
+   *  MCPS-DATA.request
+   *  Request to transfer a MSDU.
+   *
+   *  \param params the request parameters
+   *  \param p the packet to be transmitted
+   */
+  void McpsDataRequest (McpsDataRequestParams params, Ptr<Packet> p);
+
+  /**
+   * Set the CSMA/CA implementation to be used by the MAC.
+   *
+   * \param csmaCa the CSMA/CA implementation
+   */
+  void SetCsmaCa (Ptr<LrWpanCsmaCa> csmaCa);
+
+  /**
+   * Set the underlying PHY for the MAC.
+   *
+   * \param phy the PHY
+   */
+  void SetPhy (Ptr<LrWpanPhy> phy);
+
+  /**
+   * Get the underlying PHY of the MAC.
+   *
+   * \return the PHY
+   */
+  Ptr<LrWpanPhy> GetPhy (void);
+
+  /**
+   * Set the callback for the indication of an incoming data packet.
+   * The callback implements MCPS-DATA.indication SAP of IEEE 802.15.4-2006,
+   * section 7.1.1.3.
+   *
+   * \param c the callback
+   */
+  void SetMcpsDataIndicationCallback (McpsDataIndicationCallback c);
+
+  /**
+   * Set the callback for the confirmation of a data transmission request.
+   * The callback implements MCPS-DATA.confirm SAP of IEEE 802.15.4-2006,
+   * section 7.1.1.2.
+   *
+   * \param c the callback
+   */
+  void SetMcpsDataConfirmCallback (McpsDataConfirmCallback c);
+
+  // interfaces between MAC and PHY
+  /**
+   *  IEEE 802.15.4-2006 section 6.2.1.3
+   *  PD-DATA.indication
+   *  Indicates the transfer of an MPDU from PHY to MAC (receiving)
+   *  @param psduLength number of bytes in the PSDU
+   *  @param p the packet to be transmitted
+   *  @param lqi Link quality (LQI) value measured during reception of the PPDU
+   */
+  void PdDataIndication (uint32_t psduLength, Ptr<Packet> p, uint8_t lqi);
+
+  /**
+   *  IEEE 802.15.4-2006 section 6.2.1.2
+   *  Confirm the end of transmission of an MPDU to MAC
+   *  @param status to report to MAC
+   *  PHY PD-DATA.confirm status
+   */
+  void PdDataConfirm (LrWpanPhyEnumeration status);
+
+  /**
+   *  IEEE 802.15.4-2006 section 6.2.2.2
+   *  PLME-CCA.confirm status
+   *  @param status TRX_OFF, BUSY or IDLE
+   */
+  void PlmeCcaConfirm (LrWpanPhyEnumeration status);
+
+  /**
+   *  IEEE 802.15.4-2006 section 6.2.2.4
+   *  PLME-ED.confirm status and energy level
+   *  @param status SUCCESS, TRX_OFF or TX_ON
+   *  @param energyLevel 0x00-0xff ED level for the channel
+   */
+  void PlmeEdConfirm (LrWpanPhyEnumeration status, uint8_t energyLevel);
+
+  /**
+   *  IEEE 802.15.4-2006 section 6.2.2.6
+   *  PLME-GET.confirm
+   *  Get attributes per definition from Table 23 in section 6.4.2
+   *  @param status SUCCESS or UNSUPPORTED_ATTRIBUTE
+   *  @param id the attributed identifier
+   *  @param attribute the attribute value
+   */
+  void PlmeGetAttributeConfirm (LrWpanPhyEnumeration status,
+                                LrWpanPibAttributeIdentifier id,
+                                LrWpanPhyPibAttributes* attribute);
+
+  /**
+   *  IEEE 802.15.4-2006 section 6.2.2.8
+   *  PLME-SET-TRX-STATE.confirm
+   *  Set PHY state
+   *  @param status in RX_ON,TRX_OFF,FORCE_TRX_OFF,TX_ON
+   */
+  void PlmeSetTRXStateConfirm (LrWpanPhyEnumeration status);
+
+  /**
+   *  IEEE 802.15.4-2006 section 6.2.2.10
+   *  PLME-SET.confirm
+   *  Set attributes per definition from Table 23 in section 6.4.2
+   *  @param status SUCCESS, UNSUPPORTED_ATTRIBUTE, INVALID_PARAMETER, or READ_ONLY
+   *  @param id the attributed identifier
+   */
+  void PlmeSetAttributeConfirm (LrWpanPhyEnumeration status,
+                                LrWpanPibAttributeIdentifier id);
+
+  /**
+   * CSMA-CA algorithm calls back the MAC after executing channel assessment.
+   *
+   * \param macState indicate BUSY oder IDLE channel condition
+   */
+  void SetLrWpanMacState (LrWpanMacState macState);
+
+  /**
+   * Get the current association status.
+   *
+   * \return current association status
+   */
+  LrWpanAssociationStatus GetAssociationStatus (void) const;
+
+  /**
+   * Set the current association status.
+   *
+   * \param status new association status
+   */
+  void SetAssociationStatus (LrWpanAssociationStatus status);
+
+  //MAC sublayer constants
+  /**
+   * Length of a superframe slot in symbols. Defaults to 60 symbols in each
+   * superframe slot.
+   * See IEEE 802.15.4-2006, section 7.4.1, Table 85.
+   */
+  uint64_t m_aBaseSlotDuration;
+
+  /**
+   * Number of a superframe slots per superframe. Defaults to 16.
+   * See IEEE 802.15.4-2006, section 7.4.1, Table 85.
+   */
+  uint64_t m_aNumSuperframeSlots;
+
+  /**
+   * Length of a superframe in symbols. Defaults to
+   * aBaseSlotDuration * aNumSuperframeSlots in symbols.
+   * See IEEE 802.15.4-2006, section 7.4.1, Table 85.
+   */
+  uint64_t m_aBaseSuperframeDuration;
+
+  //MAC PIB attributes
+  /**
+   * The time that the device transmitted its last beacon frame, in symbol
+   * periods. Only 24 bits used.
+   * See IEEE 802.15.4-2006, section 7.4.2, Table 86.
+   */
+  uint64_t m_macBeaconTxTime;
+
+  /**
+   * Symbol boundary is same as m_macBeaconTxTime.
+   * See IEEE 802.15.4-2006, section 7.4.2, Table 86.
+   */
+  uint64_t m_macSyncSymbolOffset;
+
+  /**
+   * Specification of how often the coordinator transmits its beacon.
+   * 0 - 15 with 15 means no beacons are being sent.
+   * See IEEE 802.15.4-2006, section 7.4.2, Table 86.
+   */
+  uint64_t m_macBeaconOrder;
+
+  /**
+   * The length of the active portion of the outgoing superframe, including the
+   * beacon frame.
+   * 0 - 15 with 15 means the superframe will not be active after the beacon.
+   * See IEEE 802.15.4-2006, section 7.4.2, Table 86.
+   */
+  uint64_t m_macSuperframeOrder;
+
+  /**
+   * Indicates if MAC sublayer is in receive all mode. True mean accept all
+   * frames from PHY.
+   * See IEEE 802.15.4-2006, section 7.4.2, Table 86.
+   */
+  bool m_macPromiscuousMode;
+
+  /**
+   * 16 bits id of PAN on which this device is operating. 0xffff means not
+   * asscoiated.
+   * See IEEE 802.15.4-2006, section 7.4.2, Table 86.
+   */
+  uint16_t m_macPanId;
+
+  /**
+   * Sequence number added to transmitted data or MAC command frame, 00-ff.
+   * See IEEE 802.15.4-2006, section 7.4.2, Table 86.
+   */
+  SequenceNumber8 m_macDsn;
+
+  /**
+   * The maximum number of retries allowed after a transmission failure.
+   * See IEEE 802.15.4-2006, section 7.4.2, Table 86.
+   */
+  uint8_t m_macMaxFrameRetries;
+
+  /**
+   * Indication of whether the MAC sublayer is to enable its receiver during
+   * idle periods.
+   * See IEEE 802.15.4-2006, section 7.4.2, Table 86.
+   */
+  bool m_macRxOnWhenIdle;
+
+  /**
+   * Get the macAckWaitDuration attribute value.
+   *
+   * \return the maximum number symbols to wait for an acknowledgment frame
+   */
+  uint64_t GetMacAckWaitDuration (void) const;
+
+  /**
+   * Get the macMaxFrameRetries attribute value.
+   *
+   * \return the maximum number of retries
+   */
+  uint8_t GetMacMaxFrameRetries (void) const;
+
+  /**
+   * Set the macMaxFrameRetries attribute value.
+   *
+   * \param retries the maximum number of retries
+   */
+  void SetMacMaxFrameRetries (uint8_t retries);
+
+protected:
+  // Inherited from Object.
+  virtual void DoInitialize (void);
+  virtual void DoDispose (void);
+
+private:
+  /**
+   * Helper structure for managing transmission queue elements.
+   */
+  struct TxQueueElement
+  {
+    uint8_t txQMsduHandle;
+    Ptr<Packet> txQPkt;
+  };
+
+  /**
+   * Send an acknowledgment packet for the given sequence number.
+   *
+   * \param seqno the sequence number for the ACK
+   */
+  void SendAck (uint8_t seqno);
+
+  /**
+   * Remove the tip of the transmission queue, including clean up related to the
+   * last packet transmission.
+   */
+  void RemoveFirstTxQElement ();
+
+  /**
+   * Change the current MAC state to the given new state.
+   *
+   * \param newState the new state
+   */
+  void ChangeMacState (LrWpanMacState newState);
+
+  /**
+   * Handle an ACK timeout with a packet retransmission, if there are
+   * retransmission left, or a packet drop.
+   */
+  void AckWaitTimeout (void);
+
+  /**
+   * Check for remaining retransmissions for the packet currently being sent.
+   * Drop the packet, if there are no retransmissions left.
+   *
+   * \return true, if the packet should be retransmitted, false otherwise.
+   */
+  bool PrepareRetransmission (void);
+
+  /**
+   * Check the transmission queue. If there are packets in the transmission
+   * queue and the MAC is idle, pick the first one and initiate a packet
+   * transmission.
+   */
+  void CheckQueue (void);
+
+  /**
+   * The trace source fired when packets are considered as successfully sent
+   * or the transmission has been given up.
+   * Only non-broadcast packets are traced.
+   *
+   * The data should represent:
+   * packet, number of retries, total number of csma backoffs
+   *
+   * \see class CallBackTraceSource
+   */
+  TracedCallback<Ptr<const Packet>, uint8_t, uint8_t > m_sentPktTrace;
+
+  /**
+   * The trace source fired when packets come into the "top" of the device
+   * at the L3/L2 transition, when being queued for transmission.
+   *
+   * \see class CallBackTraceSource
+   */
+  TracedCallback<Ptr<const Packet> > m_macTxEnqueueTrace;
+
+  /**
+   * The trace source fired when packets are dequeued from the
+   * L3/l2 transmission queue.
+   *
+   * \see class CallBackTraceSource
+   */
+  TracedCallback<Ptr<const Packet> > m_macTxDequeueTrace;
+
+  /**
+   * The trace source fired when packets are being sent down to L1.
+   *
+   * \see class CallBackTraceSource
+   */
+  TracedCallback<Ptr<const Packet> > m_macTxTrace;
+
+  /**
+   * The trace source fired when packets where successfully transmitted, that is
+   * an acknowledgment was received, if requested, or the packet was
+   * successfully sent by L1, if no ACK was requested.
+   *
+   * \see class CallBackTraceSource
+   */
+  TracedCallback<Ptr<const Packet> > m_macTxOkTrace;
+
+  /**
+   * The trace source fired when packets are dropped due to missing ACKs or
+   * because of transmission failures in L1.
+   *
+   * \see class CallBackTraceSource
+   */
+  TracedCallback<Ptr<const Packet> > m_macTxDropTrace;
+
+  /**
+   * The trace source fired for packets successfully received by the device
+   * immediately before being forwarded up to higher layers (at the L2/L3
+   * transition).  This is a promiscuous trace.
+   *
+   * \see class CallBackTraceSource
+   */
+  TracedCallback<Ptr<const Packet> > m_macPromiscRxTrace;
+
+  /**
+   * The trace source fired for packets successfully received by the device
+   * immediately before being forwarded up to higher layers (at the L2/L3
+   * transition).  This is a non-promiscuous trace.
+   *
+   * \see class CallBackTraceSource
+   */
+  TracedCallback<Ptr<const Packet> > m_macRxTrace;
+
+  /**
+   * The trace source fired for packets successfully received by the device
+   * but dropped before being forwarded up to higher layers (at the L2/L3
+   * transition).
+   *
+   * \see class CallBackTraceSource
+   */
+  TracedCallback<Ptr<const Packet> > m_macRxDropTrace;
+
+  /**
+   * A trace source that emulates a non-promiscuous protocol sniffer connected
+   * to the device.  Unlike your average everyday sniffer, this trace source
+   * will not fire on PACKET_OTHERHOST events.
+   *
+   * On the transmit size, this trace hook will fire after a packet is dequeued
+   * from the device queue for transmission.  In Linux, for example, this would
+   * correspond to the point just before a device hard_start_xmit where
+   * dev_queue_xmit_nit is called to dispatch the packet to the PF_PACKET
+   * ETH_P_ALL handlers.
+   *
+   * On the receive side, this trace hook will fire when a packet is received,
+   * just before the receive callback is executed.  In Linux, for example,
+   * this would correspond to the point at which the packet is dispatched to
+   * packet sniffers in netif_receive_skb.
+   *
+   * \see class CallBackTraceSource
+   */
+  TracedCallback<Ptr<const Packet> > m_snifferTrace;
+
+  /**
+   * A trace source that emulates a promiscuous mode protocol sniffer connected
+   * to the device.  This trace source fire on packets destined for any host
+   * just like your average everyday packet sniffer.
+   *
+   * On the transmit size, this trace hook will fire after a packet is dequeued
+   * from the device queue for transmission.  In Linux, for example, this would
+   * correspond to the point just before a device hard_start_xmit where
+   * dev_queue_xmit_nit is called to dispatch the packet to the PF_PACKET
+   * ETH_P_ALL handlers.
+   *
+   * On the receive side, this trace hook will fire when a packet is received,
+   * just before the receive callback is executed.  In Linux, for example,
+   * this would correspond to the point at which the packet is dispatched to
+   * packet sniffers in netif_receive_skb.
+   *
+   * \see class CallBackTraceSource
+   */
+  TracedCallback<Ptr<const Packet> > m_promiscSnifferTrace;
+
+  /*
+   * A trace source that fires when the LrWpanMac changes states.
+   * Parameters are the old mac state and the new mac state.
+   */
+  TracedCallback<LrWpanMacState, LrWpanMacState> m_macStateLogger;
+
+  /**
+   * The PHY associated with this MAC.
+   */
+  Ptr<LrWpanPhy> m_phy;
+
+  /**
+   * The CSMA/CA implementation used by this MAC.
+   */
+  Ptr<LrWpanCsmaCa> m_csmaCa;
+
+  /**
+   * This callback is used to notify incoming packets to the upper layers.
+   * See IEEE 802.15.4-2006, section 7.1.1.3.
+   */
+  McpsDataIndicationCallback m_mcpsDataIndicationCallback;
+
+  /**
+   * This callback is used to report data transmission request status to the
+   * upper layers.
+   * See IEEE 802.15.4-2006, section 7.1.1.2.
+   */
+  McpsDataConfirmCallback m_mcpsDataConfirmCallback;
+
+  /**
+   * The current state of the MAC layer.
+   */
+  LrWpanMacState m_lrWpanMacState;
+
+  /**
+   * The current association status of the MAC layer.
+   */
+  LrWpanAssociationStatus m_associationStatus;
+
+  /**
+   * The packet which is currently being sent by the MAC layer.
+   */
+  Ptr<Packet> m_txPkt;  // XXX need packet buffer instead of single packet
+
+  /**
+   * The short address used by this MAC. Currently we do not have complete
+   * extended address support in the MAC, nor do we have the association
+   * primitives, so this address has to be configured manually.
+   */
+  Mac16Address m_shortAddress;
+
+  /**
+   * The extended address used by this MAC. Extended addresses are currently not
+   * really supported.
+   */
+  Mac64Address m_selfExt;
+
+  /**
+   * The transmit queue used by the MAC.
+   */
+  std::deque<TxQueueElement*> m_txQueue;
+
+  /**
+   * The number of already used retransmission for the currently transmitted
+   * packet.
+   */
+  uint8_t m_retransmission;
+
+  /**
+   * The number of CSMA/CA retries used for sending the current packet.
+   */
+  uint8_t m_numCsmacaRetry;
+
+  /**
+   * Scheduler event for the ACK timeout of the currently transmitted data
+   * packet.
+   */
+  EventId m_ackWaitTimeout;
+
+  /**
+   * Scheduler event for a deferred MAC state change.
+   */
+  EventId m_setMacState;
+};
+
+
+} // namespace ns3
+
+#endif /* LR_WPAN_MAC_H */
diff -Naur ns-3.19/src/lr-wpan/model/lr-wpan-mac-header.cc ns-3.20/src/lr-wpan/model/lr-wpan-mac-header.cc
--- ns-3.19/src/lr-wpan/model/lr-wpan-mac-header.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.20/src/lr-wpan/model/lr-wpan-mac-header.cc	2014-06-17 10:33:13.901995900 -0700
@@ -0,0 +1,831 @@
+/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2011 The Boeing Company
+ *
+ * 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: kwong yin <kwong-sang.yin@boeing.com>
+ */
+#include "lr-wpan-mac-header.h"
+#include <ns3/address-utils.h>
+
+namespace ns3 {
+
+NS_OBJECT_ENSURE_REGISTERED (LrWpanMacHeader);
+
+// TODO: Test Compressed PAN Id, Security Enabled, different size Key
+
+LrWpanMacHeader::LrWpanMacHeader ()
+{
+  SetType (LRWPAN_MAC_DATA);     // Assume Data frame
+  SetSecDisable ();              // Assume there is No Aux Sec but
+  SetNoFrmPend ();               // No Frame Pending
+  SetNoAckReq ();                // No Ack Frame will be expected from recepient
+  SetNoPanIdComp ();             // No PAN Id Compression since no addresses
+  SetFrmCtrlRes (0);             // Initialize the 3 reserved bits to 0
+  SetDstAddrMode (NOADDR);       // Assume there will be no src and dst address
+  SetSrcAddrMode (NOADDR);
+  SetFrameVer (1);               //Indicates an IEEE 802.15.4 frame
+}
+
+
+LrWpanMacHeader::LrWpanMacHeader (enum LrWpanMacType wpanMacType,
+                                  uint8_t seqNum)
+{
+  SetType (wpanMacType);
+  SetSeqNum (seqNum);
+  SetSecDisable ();              // Assume there is No Aux Sec but
+  SetNoFrmPend ();               // No Frame Pending
+  SetNoAckReq ();                // No Ack Frame will be expected from recepient
+  SetNoPanIdComp ();             // No PAN Id Compression since no addresses
+  SetFrmCtrlRes (0);             // Initialize the 3 reserved bits to 0
+  SetDstAddrMode (NOADDR);       // Assume there will be no src and dst address
+  SetSrcAddrMode (NOADDR);
+  SetFrameVer (1);               //Indicates an IEEE 802.15.4 frame
+}
+
+
+LrWpanMacHeader::~LrWpanMacHeader ()
+{
+}
+
+
+enum LrWpanMacHeader::LrWpanMacType
+LrWpanMacHeader::GetType (void) const
+{
+  switch (m_fctrlFrmType)
+    {
+    case 0:
+      return LRWPAN_MAC_BEACON;
+      break;
+    case 1:
+      return LRWPAN_MAC_DATA;
+      break;
+    case 2:
+      return LRWPAN_MAC_ACKNOWLEDGMENT;
+      break;
+    case 3:
+      return LRWPAN_MAC_COMMAND;
+      break;
+    default:
+      return LRWPAN_MAC_RESERVED;
+    }
+}
+
+
+
+uint16_t
+LrWpanMacHeader::GetFrameControl (void) const
+{
+  uint16_t val = 0;
+
+  val = m_fctrlFrmType & (0x07);                 // Bit 0-2
+  val |= (m_fctrlSecU << 3) & (0x01 << 3);         // Bit 3
+  val |= (m_fctrlFrmPending << 4) & (0x01 << 4);   // Bit 4
+  val |= (m_fctrlAckReq << 5) & (0x01 << 5);        // Bit 5
+  val |= (m_fctrlPanIdComp << 6) & (0x01 << 6);    // Bit 6
+  val |= (m_fctrlReserved << 7) & (0x07 << 7);     // Bit 7-9
+  val |= (m_fctrlDstAddrMode << 10) & (0x03 << 10); // Bit 10-11
+  val |= (m_fctrlFrmVer << 12) & (0x03 << 12);     // Bit 12-13
+  val |= (m_fctrlSrcAddrMode << 14) & (0x03 << 14); // Bit 14-15
+  return val;
+
+}
+
+bool
+LrWpanMacHeader::IsSecEnable (void) const
+{
+  return (m_fctrlSecU == 1);
+}
+
+bool
+LrWpanMacHeader::IsSecDisable (void) const
+{
+  return (m_fctrlSecU == 0);
+}
+
+bool
+LrWpanMacHeader::IsFrmPend (void) const
+{
+  return (m_fctrlFrmPending == 1);
+}
+
+bool
+LrWpanMacHeader::IsNoFrmPend (void) const
+{
+  return (m_fctrlFrmPending == 0);
+}
+
+bool
+LrWpanMacHeader::IsAckReq (void) const
+{
+  return (m_fctrlAckReq == 1);
+}
+
+bool
+LrWpanMacHeader::IsNoAckReq (void) const
+{
+  return (m_fctrlAckReq == 0);
+}
+
+bool
+LrWpanMacHeader::IsPanIdComp (void) const
+{
+  return (m_fctrlPanIdComp == 1);
+}
+
+bool
+LrWpanMacHeader::IsNoPanIdComp (void) const
+{
+  return (m_fctrlPanIdComp == 0);
+}
+
+uint8_t
+LrWpanMacHeader::GetFrmCtrlRes (void) const
+{
+  return (m_fctrlReserved);
+}
+
+uint8_t
+LrWpanMacHeader::GetDstAddrMode (void) const
+{
+  return m_fctrlDstAddrMode;
+}
+
+uint8_t
+LrWpanMacHeader::GetFrameVer (void) const
+{
+  return m_fctrlFrmVer;
+}
+
+uint8_t
+LrWpanMacHeader::GetSrcAddrMode (void) const
+{
+  return m_fctrlSrcAddrMode;
+}
+
+
+uint8_t
+LrWpanMacHeader::GetSeqNum (void) const
+{
+  return(m_SeqNum);
+}
+
+
+uint16_t
+LrWpanMacHeader::GetDstPanId (void) const
+{
+  return(m_addrDstPanId);
+}
+
+
+Mac16Address
+LrWpanMacHeader::GetShortDstAddr (void) const
+{
+  return(m_addrShortDstAddr);
+}
+Mac64Address
+LrWpanMacHeader::GetExtDstAddr (void) const
+{
+  return(m_addrExtDstAddr);
+}
+
+uint16_t
+LrWpanMacHeader::GetSrcPanId (void) const
+{
+  return(m_addrSrcPanId);
+}
+
+
+
+Mac16Address
+LrWpanMacHeader::GetShortSrcAddr (void) const
+{
+  return(m_addrShortSrcAddr);
+}
+Mac64Address
+LrWpanMacHeader::GetExtSrcAddr (void) const
+{
+  return(m_addrExtSrcAddr);
+}
+
+
+uint8_t
+LrWpanMacHeader::GetSecControl (void) const
+{
+  uint8_t val = 0;
+
+  val = m_secctrlSecLevel & (0x7);              // Bit 0-2
+  val |= (m_secctrlKeyIdMode << 3) & (0x3 << 3);  // Bit 3-4
+  val |= (m_secctrlReserved << 5) & (0x7 << 5);   // Bit 5-7
+
+  return(val);
+}
+
+uint32_t
+LrWpanMacHeader::GetFrmCounter (void) const
+{
+  return(m_auxFrmCntr);
+}
+
+uint8_t
+LrWpanMacHeader::GetSecLevel (void) const
+{
+  return (m_secctrlSecLevel);
+}
+
+uint8_t
+LrWpanMacHeader::GetKeyIdMode (void) const
+{
+  return(m_secctrlKeyIdMode);
+}
+
+uint8_t
+LrWpanMacHeader::GetsecctrlReserved (void) const
+{
+  return (m_secctrlReserved);
+}
+
+uint32_t
+LrWpanMacHeader::GetKeyIdSrc32 (void) const
+{
+  return(m_auxKeyIdKeySrc32);
+}
+
+uint64_t
+LrWpanMacHeader::GetKeyIdSrc64 (void) const
+{
+
+  return(m_auxKeyIdKeySrc64);
+}
+
+uint8_t
+LrWpanMacHeader::GetKeyIdIndex (void) const
+{
+  return(m_auxKeyIdKeyIndex);
+}
+
+
+bool
+LrWpanMacHeader::IsBeacon (void) const
+{
+  return(m_fctrlFrmType == LRWPAN_MAC_BEACON);
+}
+
+
+
+bool
+LrWpanMacHeader::IsData (void) const
+{
+  return(m_fctrlFrmType == LRWPAN_MAC_DATA);
+}
+
+
+
+bool
+LrWpanMacHeader::IsAcknowledgment (void) const
+{
+  return(m_fctrlFrmType == LRWPAN_MAC_ACKNOWLEDGMENT);
+}
+
+
+
+bool
+LrWpanMacHeader::IsCommand (void) const
+{
+  return(m_fctrlFrmType == LRWPAN_MAC_COMMAND);
+}
+
+
+
+void
+LrWpanMacHeader::SetType (enum LrWpanMacType wpanMacType)
+{
+  m_fctrlFrmType = wpanMacType;
+}
+
+
+void
+LrWpanMacHeader::SetFrameControl (uint16_t frameControl)
+{
+  m_fctrlFrmType = (frameControl) & (0x07);             // Bit 0-2
+  m_fctrlSecU = (frameControl >> 3) & (0x01);           // Bit 3
+  m_fctrlFrmPending = (frameControl >> 4) & (0x01);     // Bit 4
+  m_fctrlAckReq = (frameControl >> 5) & (0x01);         // Bit 5
+  m_fctrlPanIdComp = (frameControl >> 6) & (0x01);      // Bit 6
+  m_fctrlReserved = (frameControl >> 7) & (0x07);       // Bit 7-9
+  m_fctrlDstAddrMode = (frameControl >> 10) & (0x03);   // Bit 10-11
+  m_fctrlFrmVer = (frameControl >> 12) & (0x03);        // Bit 12-13
+  m_fctrlSrcAddrMode = (frameControl >> 14) & (0x03);   // Bit 14-15
+}
+
+
+void
+LrWpanMacHeader::SetSecEnable (void)
+{
+  m_fctrlSecU = 1;
+}
+
+
+void
+LrWpanMacHeader::SetSecDisable (void)
+{
+  m_fctrlSecU = 0;
+}
+
+
+void
+LrWpanMacHeader::SetFrmPend (void)
+{
+  m_fctrlFrmPending = 1;
+}
+
+
+void
+LrWpanMacHeader::SetNoFrmPend (void)
+{
+  m_fctrlFrmPending = 0;
+}
+
+
+void
+LrWpanMacHeader::SetAckReq (void)
+{
+  m_fctrlAckReq = 1;
+}
+
+
+void
+LrWpanMacHeader::SetNoAckReq (void)
+{
+  m_fctrlAckReq = 0;
+}
+
+
+void
+LrWpanMacHeader::SetPanIdComp (void)
+{
+  m_fctrlPanIdComp = 1;
+}
+
+
+void LrWpanMacHeader::SetNoPanIdComp (void)
+{
+  m_fctrlPanIdComp = 0;
+}
+
+void
+LrWpanMacHeader::SetFrmCtrlRes (uint8_t res)
+{
+  m_fctrlReserved = res;
+}
+
+void
+LrWpanMacHeader::SetDstAddrMode (uint8_t addrMode)
+{
+  m_fctrlDstAddrMode = addrMode;
+}
+
+
+void
+LrWpanMacHeader::SetFrameVer (uint8_t ver)
+{
+  m_fctrlFrmVer = ver;
+}
+
+
+void
+LrWpanMacHeader::SetSrcAddrMode (uint8_t addrMode)
+{
+  m_fctrlSrcAddrMode = addrMode;
+}
+
+
+void
+LrWpanMacHeader::SetSeqNum (uint8_t seqNum)
+{
+  m_SeqNum = seqNum;
+}
+
+void
+LrWpanMacHeader::SetSrcAddrFields (uint16_t panId,
+                                   Mac16Address addr)
+{
+  m_addrSrcPanId = panId;
+  m_addrShortSrcAddr = addr;
+}
+
+void
+LrWpanMacHeader::SetSrcAddrFields (uint16_t panId,
+                                   Mac64Address addr)
+{
+  m_addrSrcPanId = panId;
+  m_addrExtSrcAddr = addr;
+}
+
+void
+LrWpanMacHeader::SetDstAddrFields (uint16_t panId,
+                                   Mac16Address addr)
+{
+  m_addrDstPanId = panId;
+  m_addrShortDstAddr = addr;
+}
+void
+LrWpanMacHeader::SetDstAddrFields (uint16_t panId,
+                                   Mac64Address addr)
+{
+  m_addrDstPanId = panId;
+  m_addrExtDstAddr = addr;
+}
+void
+LrWpanMacHeader::SetSecControl (uint8_t secControl)
+{
+  m_secctrlSecLevel = (secControl) & (0x07);            // Bit 0-2
+  m_secctrlKeyIdMode = (secControl >> 3) & (0x03);      // Bit 3-4
+  m_secctrlReserved = (secControl >> 5) & (0x07);       // Bit 5-7
+}
+
+void
+LrWpanMacHeader::SetFrmCounter (uint32_t frmCntr)
+{
+  m_auxFrmCntr = frmCntr;
+}
+
+void
+LrWpanMacHeader::SetSecLevel (uint8_t secLevel)
+{
+  m_secctrlSecLevel = secLevel;
+}
+
+void
+LrWpanMacHeader::SetKeyIdMode (uint8_t keyIdMode)
+{
+  m_secctrlKeyIdMode = keyIdMode;
+}
+
+void
+LrWpanMacHeader::SetsecctrlReserved (uint8_t res)
+{
+  m_secctrlReserved = res;
+}
+
+void
+LrWpanMacHeader::SetKeyId (uint8_t keyIndex)
+{
+  m_auxKeyIdKeyIndex = keyIndex;
+}
+
+
+void
+LrWpanMacHeader::SetKeyId (uint32_t keySrc,
+                           uint8_t keyIndex)
+{
+  m_auxKeyIdKeyIndex = keyIndex;
+  m_auxKeyIdKeySrc32 = keySrc;
+}
+
+
+void
+LrWpanMacHeader::SetKeyId (uint64_t keySrc,
+                           uint8_t keyIndex)
+{
+  m_auxKeyIdKeyIndex = keyIndex;
+  m_auxKeyIdKeySrc64 = keySrc;
+}
+
+
+std::string
+LrWpanMacHeader::GetName (void) const
+{
+  return "LrWpan MAC Header";
+}
+
+TypeId
+LrWpanMacHeader::GetTypeId (void)
+{
+  static TypeId tid = TypeId ("ns3::LrWpanMacHeader")
+    .SetParent<Header> ()
+    .AddConstructor<LrWpanMacHeader> ();
+  return tid;
+}
+
+
+TypeId
+LrWpanMacHeader::GetInstanceTypeId (void) const
+{
+  return GetTypeId ();
+}
+
+void
+LrWpanMacHeader::PrintFrameControl (std::ostream &os) const
+{
+  os << "  Frame Type = " << (uint32_t) m_fctrlFrmType << ", Sec Enable = " << (uint32_t) m_fctrlSecU
+     << ", Frame Pending = " << (uint32_t) m_fctrlFrmPending << ", Ack Request = " << (uint32_t) m_fctrlAckReq
+     << ", PAN ID Compress = " << (uint32_t) m_fctrlPanIdComp << ", Frame Vers = " << (uint32_t) m_fctrlFrmVer
+     << ", Dst Addrs Mode = " << (uint32_t) m_fctrlDstAddrMode << ", Src Addr Mode = " << (uint32_t) m_fctrlSrcAddrMode;
+}
+
+void
+LrWpanMacHeader::Print (std::ostream &os) const
+{
+  PrintFrameControl (os);
+  os << ", Sequence Num = " << static_cast<uint16_t> (m_SeqNum);
+
+  switch (m_fctrlDstAddrMode)
+    {
+    case NOADDR:
+      break;
+    case SHORTADDR:
+      os << ", Dst Addr Pan ID = " << static_cast<uint16_t> (m_addrDstPanId)
+         << ", m_addrShortDstAddr = " << m_addrShortDstAddr;
+      break;
+    case EXTADDR:
+      os << ", Dst Addr Pan ID = " << static_cast<uint16_t> (m_addrDstPanId)
+         << ", m_addrExtDstAddr = " << m_addrExtDstAddr;
+      break;
+    }
+
+  switch (m_fctrlSrcAddrMode)
+    {
+    case NOADDR:
+      break;
+    case SHORTADDR:
+      os << ", Src Addr Pan ID = " << static_cast<uint16_t> (m_addrSrcPanId)
+         << ", m_addrShortSrcAddr = " << m_addrShortSrcAddr;
+      break;
+    case EXTADDR:
+      os << ", Src Addr Pan ID = " << static_cast<uint32_t> (m_addrSrcPanId)
+         << ", m_addrExtSrcAddr = " << m_addrExtDstAddr;
+      break;
+    }
+
+  if (IsSecEnable ())
+    {
+      os << "  Security Level = " << static_cast<uint32_t> (m_secctrlSecLevel)
+         << ", Key Id Mode = " << static_cast<uint32_t> (m_secctrlKeyIdMode)
+         << ", Frame Counter = " << static_cast<uint32_t> (m_auxFrmCntr);
+
+      switch (m_secctrlKeyIdMode)
+        {
+        case IMPLICIT:
+          break;
+        case NOKEYSOURCE:
+          os << ", Key Id - Key Index = " << static_cast<uint32_t> (m_auxKeyIdKeyIndex);
+          break;
+        case SHORTKEYSOURCE:
+          os << ", Key Id - Key Source 32 =" << static_cast<uint32_t> (m_auxKeyIdKeySrc32)
+             << ", Key Id - Key Index = " << static_cast<uint32_t> (m_auxKeyIdKeyIndex);
+          break;
+        case LONGKEYSOURCE:
+          os << ", Key Id - Key Source 64 =" << static_cast<uint64_t> (m_auxKeyIdKeySrc64)
+             << ", Key Id - Key Index = " << static_cast<uint32_t> (m_auxKeyIdKeyIndex);
+          break;
+        }
+    }
+}
+
+uint32_t
+LrWpanMacHeader::GetSerializedSize (void) const
+{
+  /*
+   * Each mac header will have
+   * Frame Control      : 2 octet
+   * Sequence Number    : 1 Octet
+   * Dst PAN Id         : 0/2 Octet
+   * Dst Address        : 0/2/8 octet
+   * Src PAN Id         : 0/2 octet
+   * Src Address        : 0/2/8 octet
+   * Aux Sec Header     : 0/5/6/10/14 octet
+   */
+
+  uint32_t size = 3;
+
+  switch (m_fctrlDstAddrMode)
+    {
+    case NOADDR:
+      break;
+    case SHORTADDR:
+      size += 4;
+      break;
+    case EXTADDR:
+      size += 10;
+      break;
+    }
+
+  switch (m_fctrlSrcAddrMode)
+    {
+    case NOADDR:
+      break;
+    case SHORTADDR:
+      // check if PAN Id compression is enabled
+      if (IsNoPanIdComp ())
+        {
+          size += 4;
+        }
+      else
+        {
+          size += 2;
+        }
+      break;
+    case EXTADDR:
+      // check if PAN Id compression is enabled
+      if (IsNoPanIdComp ())
+        {
+          size += 10;
+        }
+      else
+        {
+          size += 8;
+        }
+      break;
+    }
+
+
+  // check if security is enabled
+  if (IsSecEnable ())
+    {
+      size += 5;
+      switch (m_secctrlKeyIdMode)
+        {
+        case IMPLICIT:
+          break;
+        case NOKEYSOURCE:
+          size += 1;
+          break;
+        case SHORTKEYSOURCE:
+          size += 5;
+          break;
+        case LONGKEYSOURCE:
+          size += 9;
+          break;
+        }
+    }
+  return (size);
+}
+
+
+void
+LrWpanMacHeader::Serialize (Buffer::Iterator start) const
+{
+  Buffer::Iterator i = start;
+  uint16_t frameControl = GetFrameControl ();
+
+  i.WriteHtolsbU16 (frameControl);
+  i.WriteU8 (GetSeqNum ());
+
+  switch (m_fctrlDstAddrMode)
+    {
+    case NOADDR:
+      break;
+    case SHORTADDR:
+      i.WriteHtolsbU16 (GetDstPanId ());
+      WriteTo (i, m_addrShortDstAddr);
+      break;
+    case EXTADDR:
+      i.WriteHtolsbU16 (GetDstPanId ());
+      WriteTo (i, m_addrExtDstAddr);
+      break;
+    }
+
+  switch (m_fctrlSrcAddrMode)
+    {
+    case NOADDR:
+      break;
+    case SHORTADDR:
+      if (IsNoPanIdComp ())
+        {
+          i.WriteHtolsbU16 (GetSrcPanId ());
+        }
+      WriteTo (i, m_addrShortSrcAddr);
+      break;
+    case EXTADDR:
+      if (IsNoPanIdComp ())
+        {
+          i.WriteHtolsbU16 (GetSrcPanId ());
+        }
+      WriteTo (i, m_addrExtSrcAddr);
+      break;
+    }
+
+  if (IsSecEnable ())
+    {
+      i.WriteU8 (GetSecControl ());
+      i.WriteHtolsbU32 (GetFrmCounter ());
+
+      switch (m_secctrlKeyIdMode)
+        {
+        case IMPLICIT:
+          break;
+        case NOKEYSOURCE:
+          i.WriteU8 (GetKeyIdIndex ());
+          break;
+        case SHORTKEYSOURCE:
+          i.WriteHtolsbU32 (GetKeyIdSrc32 ());
+          i.WriteU8 (GetKeyIdIndex ());
+          break;
+        case LONGKEYSOURCE:
+          i.WriteHtolsbU64 (GetKeyIdSrc64 ());
+          i.WriteU8 (GetKeyIdIndex ());
+          break;
+        }
+    }
+}
+
+
+uint32_t
+LrWpanMacHeader::Deserialize (Buffer::Iterator start)
+{
+
+  Buffer::Iterator i = start;
+  uint16_t frameControl = i.ReadLsbtohU16 ();
+  SetFrameControl (frameControl);
+
+  SetSeqNum (i.ReadU8 ());
+  switch (m_fctrlDstAddrMode)
+    {
+    case NOADDR:
+      break;
+    case SHORTADDR:
+      m_addrDstPanId = i.ReadLsbtohU16 ();
+      ReadFrom (i, m_addrShortDstAddr);
+      break;
+    case EXTADDR:
+      m_addrDstPanId = i.ReadLsbtohU16 ();
+      ReadFrom (i, m_addrExtDstAddr);
+      break;
+    }
+
+  switch (m_fctrlSrcAddrMode)
+    {
+    case NOADDR:
+      break;
+    case SHORTADDR:
+      if (IsNoPanIdComp ())
+        {
+          m_addrSrcPanId = i.ReadLsbtohU16 ();
+        }
+      else
+        {
+          if (m_fctrlDstAddrMode > 0)
+            {
+              m_addrSrcPanId = m_addrDstPanId;
+            }
+        }
+      ReadFrom (i, m_addrShortSrcAddr);
+      break;
+    case EXTADDR:
+      if (IsNoPanIdComp ())
+        {
+          m_addrSrcPanId = i.ReadLsbtohU16 ();
+        }
+      else
+        {
+          if (m_fctrlDstAddrMode > 0)
+            {
+              m_addrSrcPanId = m_addrDstPanId;
+            }
+        }
+      ReadFrom (i, m_addrExtSrcAddr);
+      break;
+    }
+
+  if (IsSecEnable ())
+    {
+      SetSecControl (i.ReadU8 ());
+      SetFrmCounter (i.ReadLsbtohU32 ());
+
+      switch (m_secctrlKeyIdMode)
+        {
+        case IMPLICIT:
+          break;
+        case NOKEYSOURCE:
+          SetKeyId (i.ReadU8 ());
+          break;
+        case SHORTKEYSOURCE:
+          SetKeyId (i.ReadLsbtohU32 (),i.ReadU8 ());
+          break;
+        case LONGKEYSOURCE:
+          SetKeyId (i.ReadLsbtohU64 (),i.ReadU8 ());
+          break;
+        }
+    }
+  return i.GetDistanceFrom (start);
+}
+
+// ----------------------------------------------------------------------------------------------------------
+
+
+} //namespace ns3
+
+
diff -Naur ns-3.19/src/lr-wpan/model/lr-wpan-mac-header.h ns-3.20/src/lr-wpan/model/lr-wpan-mac-header.h
--- ns-3.19/src/lr-wpan/model/lr-wpan-mac-header.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.20/src/lr-wpan/model/lr-wpan-mac-header.h	2014-06-17 10:33:13.901995900 -0700
@@ -0,0 +1,238 @@
+/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2011 The Boeing Company
+ *
+ * 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: kwong yin <kwong-sang.yin@boeing.com>
+ */
+
+/**
+ * the following classes implements the 802.15.4 Mac Header
+ * There are 4 types of 802.15.4 Mac Headers Frames, and they have these fields
+ *
+ *    Headers Frames  : Fields
+ *    -------------------------------------------------------------------------------------------
+ *    Beacon          : Frame Control, Sequence Number, Address Fields+, Auxiliary Security Header++.
+ *    Data            : Frame Control, Sequence Number, Address Fields++, Auxiliary Security Header++.
+ *    Acknowledgment  : Frame Control, Sequence Number.
+ *    Command         : Frame Control, Sequence Number, Address Fields++, Auxiliary Security Header++.
+ *
+ *    + - The Address fields in Beacon frame is made up of the Source PAN Id and address only and size
+ *        is  4 or 8 octets whereas the other frames may contain the Destination PAN Id and address as
+ *        well. (see specs).
+ *    ++ - These fields are optional and of variable size
+ */
+
+#ifndef LR_WPAN_MAC_HEADER_H
+#define LR_WPAN_MAC_HEADER_H
+
+#include <ns3/header.h>
+#include <ns3/mac16-address.h>
+#include <ns3/mac64-address.h>
+
+
+namespace ns3 {
+
+
+/*
+ * \ingroup lr-wpan
+ * Represent the Mac Header with the Frame Control and Sequence Number fields
+ */
+class LrWpanMacHeader : public Header
+{
+
+public:
+  enum LrWpanMacType
+  {
+    LRWPAN_MAC_BEACON = 0,
+    LRWPAN_MAC_DATA = 1,
+    LRWPAN_MAC_ACKNOWLEDGMENT = 2,
+    LRWPAN_MAC_COMMAND = 3,
+    LRWPAN_MAC_RESERVED
+  };
+
+  enum AddrModeType
+  {
+    NOADDR = 0,
+    RESADDR = 1,
+    SHORTADDR = 2,
+    EXTADDR = 3
+  };
+
+  enum KeyIdModeType
+  {
+    IMPLICIT = 0,
+    NOKEYSOURCE = 1,
+    SHORTKEYSOURCE = 2,
+    LONGKEYSOURCE = 3
+  };
+
+  LrWpanMacHeader (void);
+
+  LrWpanMacHeader (enum LrWpanMacType wpanMacType,      // Data, ACK, Control MAC Header must have
+                   uint8_t seqNum);                     // frame control and sequence number.
+                                                        // Beacon MAC Header must have frame control,
+                                                        // sequence number, source PAN Id, source address.
+
+  ~LrWpanMacHeader (void);
+
+
+  enum LrWpanMacType GetType (void) const;
+  uint16_t GetFrameControl (void) const;
+  bool IsSecEnable (void) const;
+  bool IsSecDisable (void) const;
+  bool IsFrmPend (void) const;
+  bool IsNoFrmPend (void) const;
+  bool IsAckReq (void) const;
+  bool IsNoAckReq (void) const;
+  bool IsPanIdComp (void) const;
+  bool IsNoPanIdComp (void) const;
+  uint8_t GetFrmCtrlRes (void) const;
+  uint8_t GetDstAddrMode (void) const;
+  uint8_t GetFrameVer (void) const;
+  uint8_t GetSrcAddrMode (void) const;
+
+  uint8_t GetSeqNum (void) const;
+
+  uint16_t GetDstPanId (void) const;
+  Mac16Address GetShortDstAddr (void) const;
+  Mac64Address GetExtDstAddr (void) const;
+  uint16_t GetSrcPanId (void) const;
+  Mac16Address GetShortSrcAddr (void) const;
+  Mac64Address GetExtSrcAddr (void) const;
+
+  uint8_t GetSecControl (void) const;
+  uint32_t GetFrmCounter (void) const;
+
+  uint8_t GetSecLevel (void) const;
+  uint8_t GetKeyIdMode (void) const;
+  uint8_t GetsecctrlReserved (void) const;
+
+  uint32_t GetKeyIdSrc32 (void) const;
+  uint64_t GetKeyIdSrc64 (void) const;
+  uint8_t GetKeyIdIndex (void) const;
+
+
+  bool IsBeacon (void) const;
+  bool IsData (void) const;
+  bool IsAcknowledgment (void) const;
+  bool IsCommand (void) const;
+
+
+  void SetType (enum LrWpanMacType wpanMacType);
+  void SetFrameControl (uint16_t frameControl);
+  void SetSecEnable (void);
+  void SetSecDisable (void);
+  void SetFrmPend (void);
+  void SetNoFrmPend (void);
+  void SetAckReq (void);
+  void SetNoAckReq (void);
+  void SetPanIdComp (void);
+  void SetNoPanIdComp (void);
+  void SetFrmCtrlRes (uint8_t res);
+  void SetDstAddrMode (uint8_t addrMode);
+  void SetFrameVer (uint8_t ver);
+  void SetSrcAddrMode (uint8_t addrMode);
+
+  void SetSeqNum (uint8_t seqNum);
+
+  /* The Source/Destination Addressing fields are only set if SrcAddrMode/DstAddrMode are set */
+  void SetSrcAddrFields (uint16_t panId,
+                         Mac16Address addr);
+  void SetSrcAddrFields (uint16_t panId,
+                         Mac64Address addr);
+  void SetDstAddrFields (uint16_t panId,
+                         Mac16Address addr);
+  void SetDstAddrFields (uint16_t panId,
+                         Mac64Address addr);
+
+  /* Auxiliary Security Header is only set if Sec Enable (SecU) field is set to 1 */
+  void SetSecControl (uint8_t secLevel);
+  void SetFrmCounter (uint32_t frmCntr);
+
+  void SetSecLevel (uint8_t secLevel);
+  void SetKeyIdMode (uint8_t keyIdMode);
+  void SetsecctrlReserved (uint8_t res);
+
+  /* Variable length will be dependent on Key Id Mode*/
+  void SetKeyId (uint8_t keyIndex);
+  void SetKeyId (uint32_t keySrc,
+                 uint8_t keyIndex);
+  void SetKeyId (uint64_t keySrc,
+                 uint8_t keyIndex);
+
+
+  std::string GetName (void) const;
+  static TypeId GetTypeId (void);
+  virtual TypeId GetInstanceTypeId (void) const;
+  void PrintFrameControl (std::ostream &os) const;
+  void Print (std::ostream &os) const;
+  uint32_t GetSerializedSize (void) const;
+  void Serialize (Buffer::Iterator start) const;
+  uint32_t Deserialize (Buffer::Iterator start);
+
+
+private:
+  /* Frame Control 2 Octets */
+  /* Frame Control fields */
+  uint8_t m_fctrlFrmType;               // Bit 0-2    = 0 - Beacon, 1 - Data, 2 - Ack, 3 - Command
+  uint8_t m_fctrlSecU;                  // Bit 3      = 0 - no AuxSecHdr ,  1 - security enabled AuxSecHdr present
+  uint8_t m_fctrlFrmPending;            // Bit 4
+  uint8_t m_fctrlAckReq;                // Bit 5
+  uint8_t m_fctrlPanIdComp;             // Bit 6      = 0 - no compression, 1 - using only DstPanId for both Src and DstPanId
+  uint8_t m_fctrlReserved;              // Bit 7-9
+  uint8_t m_fctrlDstAddrMode;           // Bit 10-11  = 0 - No DstAddr, 2 - ShtDstAddr, 3 - ExtDstAddr
+  uint8_t m_fctrlFrmVer;                // Bit 12-13
+  uint8_t m_fctrlSrcAddrMode;           // Bit 14-15  = 0 - No DstAddr, 2 - ShtDstAddr, 3 - ExtDstAddr
+
+  /* Sequence Number */
+  uint8_t m_SeqNum;                     // 1 Octet
+
+  /* Addressing fields */
+  uint16_t m_addrDstPanId;              // 0 or 2 Octet
+  Mac16Address m_addrShortDstAddr;      // 0 or 8 Octet
+  Mac64Address m_addrExtDstAddr;        // 0 or 8 Octet
+  uint16_t m_addrSrcPanId;              // 0 or 2 Octet
+  Mac16Address m_addrShortSrcAddr;      // 0 or 8 Octet
+  Mac64Address m_addrExtSrcAddr;        // 0 or 8 Octet
+
+  /* Auxiliary Security Header          // 0, 5, 6, 10 or 14 Octets */
+  // uint8_t m_auxSecCtrl;                 // 1 Octet see below
+  uint32_t m_auxFrmCntr;                // 4 Octet
+
+  /* Security Control fields */
+  uint8_t m_secctrlSecLevel;            // Bit 0-2
+  uint8_t m_secctrlKeyIdMode;           // Bit 3-4 will indicate size of Key Id
+                                        // = 0 - Key is determined implicitly
+                                        //       from originator and receipient
+                                        // = 1 - 1 Octet Key Index
+                                        // = 2 - 1 octet Key Index and 4 oct Key src
+                                        // = 3 - 1 octet Key Index and 8 oct Key src
+
+  uint8_t m_secctrlReserved;            // Bit 5-7
+
+  union
+  {
+    uint32_t m_auxKeyIdKeySrc32;        // 4 octets
+    uint64_t m_auxKeyIdKeySrc64;        // 8 octets
+  };
+
+  uint8_t m_auxKeyIdKeyIndex;           // 1 octet
+
+}; //LrWpanMacHeader
+
+}; // namespace ns-3
+
+#endif /* LR_WPAN_MAC_HEADER_H */
diff -Naur ns-3.19/src/lr-wpan/model/lr-wpan-mac-trailer.cc ns-3.20/src/lr-wpan/model/lr-wpan-mac-trailer.cc
--- ns-3.19/src/lr-wpan/model/lr-wpan-mac-trailer.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.20/src/lr-wpan/model/lr-wpan-mac-trailer.cc	2014-06-17 10:33:13.902995892 -0700
@@ -0,0 +1,160 @@
+/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2011 The Boeing Company
+ *
+ * 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:
+ *  kwong yin <kwong-sang.yin@boeing.com>
+ *  Sascha Alexander Jopen <jopen@cs.uni-bonn.de>
+ *  Erwan Livolant <erwan.livolant@inria.fr>
+ */
+#include "lr-wpan-mac-trailer.h"
+#include <ns3/packet.h>
+
+namespace ns3 {
+
+NS_OBJECT_ENSURE_REGISTERED (LrWpanMacTrailer);
+
+const uint16_t LrWpanMacTrailer::LR_WPAN_MAC_FCS_LENGTH = 2;
+
+LrWpanMacTrailer::LrWpanMacTrailer (void)
+  : m_fcs (0),
+    m_calcFcs (false)
+{
+}
+
+TypeId
+LrWpanMacTrailer::GetTypeId (void)
+{
+  static TypeId tid = TypeId ("ns3::LrWpanMacTrailer")
+    .SetParent<Trailer> ()
+    .AddConstructor<LrWpanMacTrailer> ()
+  ;
+  return tid;
+}
+
+TypeId
+LrWpanMacTrailer::GetInstanceTypeId (void) const
+{
+  return GetTypeId ();
+}
+
+void
+LrWpanMacTrailer::Print (std::ostream &os) const
+{
+  os << " FCS = " << m_fcs;
+}
+
+uint32_t
+LrWpanMacTrailer::GetSerializedSize (void) const
+{
+  return LR_WPAN_MAC_FCS_LENGTH;
+}
+
+void
+LrWpanMacTrailer::Serialize (Buffer::Iterator start) const
+{
+  start.Prev (LR_WPAN_MAC_FCS_LENGTH);
+  start.WriteU16 (m_fcs);
+}
+
+uint32_t
+LrWpanMacTrailer::Deserialize (Buffer::Iterator start)
+{
+  start.Prev (LR_WPAN_MAC_FCS_LENGTH);
+  m_fcs = start.ReadU16 ();
+
+  return LR_WPAN_MAC_FCS_LENGTH;
+}
+
+uint16_t
+LrWpanMacTrailer::GetFcs (void) const
+{
+  return m_fcs;
+}
+
+void
+LrWpanMacTrailer::SetFcs (Ptr<const Packet> p)
+{
+  if (m_calcFcs)
+    {
+      uint16_t size = p->GetSize ();
+      uint8_t *serial_packet = new uint8_t[size];
+
+      p->CopyData (serial_packet, size);
+
+      m_fcs = GenerateCrc16 (serial_packet, size);
+      delete[] serial_packet;
+    }
+}
+
+/* Be sure to have removed the trailer and only the trailer
+ * from the packet before to use CheckFcs */
+bool
+LrWpanMacTrailer::CheckFcs (Ptr<const Packet> p)
+{
+  if (!m_calcFcs)
+    {
+      return true;
+    }
+  else
+    {
+      uint16_t checkFcs;
+      uint16_t size = p->GetSize ();
+      uint8_t *serial_packet = new uint8_t[size];
+
+      p->CopyData (serial_packet, size);
+
+      checkFcs = GenerateCrc16 (serial_packet, size);
+      delete[] serial_packet;
+      return (checkFcs == GetFcs ());
+    }
+}
+
+void
+LrWpanMacTrailer::EnableFcs (bool enable)
+{
+  m_calcFcs = enable;
+  if (!enable)
+    {
+      m_fcs = 0;
+    }
+}
+
+bool
+LrWpanMacTrailer::IsFcsEnabled (void)
+{
+  return m_calcFcs;
+}
+
+uint16_t
+LrWpanMacTrailer::GenerateCrc16 (uint8_t *data, int length)
+{
+  int i;
+  uint16_t accumulator = 0;
+
+  for (i = 0; i < length; ++i)
+    {
+      accumulator ^= *data;
+      accumulator  = (accumulator >> 8) | (accumulator << 8);
+      accumulator ^= (accumulator & 0xff00) << 4;
+      accumulator ^= (accumulator >> 8) >> 4;
+      accumulator ^= (accumulator & 0xff00) >> 5;
+      ++data;
+    }
+  return accumulator;
+}
+
+} //namespace ns3
diff -Naur ns-3.19/src/lr-wpan/model/lr-wpan-mac-trailer.h ns-3.20/src/lr-wpan/model/lr-wpan-mac-trailer.h
--- ns-3.19/src/lr-wpan/model/lr-wpan-mac-trailer.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.20/src/lr-wpan/model/lr-wpan-mac-trailer.h	2014-06-17 10:33:13.902995892 -0700
@@ -0,0 +1,131 @@
+/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2011 The Boeing Company
+ *
+ * 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:
+ *  kwong yin <kwong-sang.yin@boeing.com>
+ *  Sascha Alexander Jopen <jopen@cs.uni-bonn.de>
+ *  Erwan Livolant <erwan.livolant@inria.fr>
+ */
+
+#ifndef LR_WPAN_MAC_TRAILER_H
+#define LR_WPAN_MAC_TRAILER_H
+
+#include <ns3/trailer.h>
+
+namespace ns3 {
+
+class Packet;
+
+/**
+ * \ingroup lr-wpan
+ *
+ * Represent the Mac Trailer with the Frame Check Sequence field.
+ */
+class LrWpanMacTrailer : public Trailer
+{
+public:
+  /**
+   * The length in octets of the IEEE 802.15.4 MAC FCS field
+   */
+  static const uint16_t LR_WPAN_MAC_FCS_LENGTH;
+
+  /**
+   * Get the type ID.
+   *
+   * \return the object TypeId
+   */
+  static TypeId GetTypeId (void);
+
+  /**
+   * Default constructor for a MAC trailer with disabled FCS calculation.
+   */
+  LrWpanMacTrailer (void);
+
+  // Inherited from the Trailer class.
+  virtual TypeId GetInstanceTypeId (void) const;
+  virtual void Print (std::ostream &os) const;
+  virtual uint32_t GetSerializedSize (void) const;
+  virtual void Serialize (Buffer::Iterator start) const;
+  virtual uint32_t Deserialize (Buffer::Iterator start);
+
+  /**
+   * Get this trailers FCS value. If FCS calculation is disabled for this
+   * trailer, the returned value is always 0.
+   *
+   * \return the FCS value.
+   */
+  uint16_t GetFcs (void) const;
+
+  /**
+   * Calculate and set the FCS value based on the given packet.
+   *
+   * \param p the packet for which the FCS should be calculated
+   */
+  void SetFcs (Ptr<const Packet> p);
+
+  /**
+   * Check the FCS of a given packet against the FCS value stored in the
+   * trailer. The packet itself should contain no trailer. If FCS calculation is
+   * disabled for this trailer, CheckFcs() will always return true.
+   *
+   * \param the packet to be checked
+   * \return false, if the FCS values do not match, true otherwise
+   */
+  bool CheckFcs (Ptr<const Packet> p);
+
+  /**
+   * Enable or disable FCS calculation for this trailer.
+   *
+   * \param enable flag, indicating if FCS calculation should be enabled or not
+   */
+  void EnableFcs (bool enable);
+
+  /**
+   * Query if FCS calculation is enabled for this trailer.
+   *
+   * \return true, if FCS calculation is enabled, false otherwise.
+   */
+  bool IsFcsEnabled (void);
+
+private:
+  /**
+   * Calculate the 16-bit FCS value.
+   * CRC16-CCITT with a generator polynomial = ^16 + ^12 + ^5 + 1, LSB first and
+   * initial value = 0x0000.
+   *
+   * \param data the checksum will be calculated over this data
+   * \param length the length of the data
+   * \return the checksum
+   */
+  uint16_t GenerateCrc16 (uint8_t *data, int length);
+
+  /**
+   * The FCS value stored in this trailer.
+   */
+  uint16_t m_fcs;
+
+  /**
+   * Only if m_calcFcs is true, FCS values will be calculated and used in the
+   * trailer
+   */
+  bool m_calcFcs;
+
+};
+
+} // namespace ns3
+
+#endif /* LR_WPAN_MAC_TRAILER_H */
diff -Naur ns-3.19/src/lr-wpan/model/lr-wpan-net-device.cc ns-3.20/src/lr-wpan/model/lr-wpan-net-device.cc
--- ns-3.19/src/lr-wpan/model/lr-wpan-net-device.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.20/src/lr-wpan/model/lr-wpan-net-device.cc	2014-06-17 10:33:13.904995877 -0700
@@ -0,0 +1,471 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2011 The Boeing Company
+ *
+ * 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:
+ *  Tom Henderson <thomas.r.henderson@boeing.com>
+ *  Tommaso Pecorella <tommaso.pecorella@unifi.it>
+ *  Margherita Filippetti <morag87@gmail.com>
+ */
+#include "lr-wpan-net-device.h"
+#include "lr-wpan-phy.h"
+#include "lr-wpan-csmaca.h"
+#include "lr-wpan-error-model.h"
+#include <ns3/abort.h>
+#include <ns3/node.h>
+#include <ns3/log.h>
+#include <ns3/spectrum-channel.h>
+#include <ns3/pointer.h>
+#include <ns3/boolean.h>
+#include <ns3/mobility-model.h>
+#include <ns3/packet.h>
+
+
+NS_LOG_COMPONENT_DEFINE ("LrWpanNetDevice");
+
+namespace ns3 {
+
+NS_OBJECT_ENSURE_REGISTERED (LrWpanNetDevice);
+
+TypeId
+LrWpanNetDevice::GetTypeId (void)
+{
+  static TypeId tid = TypeId ("ns3::LrWpanNetDevice")
+    .SetParent<NetDevice> ()
+    .AddConstructor<LrWpanNetDevice> ()
+    .AddAttribute ("Channel", "The channel attached to this device",
+                   PointerValue (),
+                   MakePointerAccessor (&LrWpanNetDevice::DoGetChannel),
+                   MakePointerChecker<SpectrumChannel> ())
+    .AddAttribute ("Phy", "The PHY layer attached to this device.",
+                   PointerValue (),
+                   MakePointerAccessor (&LrWpanNetDevice::GetPhy,
+                                        &LrWpanNetDevice::SetPhy),
+                   MakePointerChecker<LrWpanPhy> ())
+    .AddAttribute ("Mac", "The MAC layer attached to this device.",
+                   PointerValue (),
+                   MakePointerAccessor (&LrWpanNetDevice::GetMac,
+                                        &LrWpanNetDevice::SetMac),
+                   MakePointerChecker<LrWpanMac> ())
+    .AddAttribute ("UseAcks", "Request acknowledgments for data frames.",
+                   BooleanValue (true),
+                   MakeBooleanAccessor (&LrWpanNetDevice::m_useAcks),
+                   MakeBooleanChecker ())
+  ;
+  return tid;
+}
+
+LrWpanNetDevice::LrWpanNetDevice ()
+  : m_configComplete (false)
+{
+  NS_LOG_FUNCTION (this);
+  m_mac = CreateObject<LrWpanMac> ();
+  m_phy = CreateObject<LrWpanPhy> ();
+  m_csmaca = CreateObject<LrWpanCsmaCa> ();
+  CompleteConfig ();
+}
+
+LrWpanNetDevice::~LrWpanNetDevice ()
+{
+  NS_LOG_FUNCTION (this);
+}
+
+
+void
+LrWpanNetDevice::DoDispose (void)
+{
+  NS_LOG_FUNCTION (this);
+  m_mac->Dispose ();
+  m_phy->Dispose ();
+  m_csmaca->Dispose ();
+  m_phy = 0;
+  m_mac = 0;
+  m_csmaca = 0;
+  m_node = 0;
+  // chain up.
+  NetDevice::DoDispose ();
+
+}
+
+void
+LrWpanNetDevice::DoInitialize (void)
+{
+  NS_LOG_FUNCTION (this);
+  m_phy->Initialize ();
+  m_mac->Initialize ();
+  NetDevice::DoInitialize ();
+}
+
+
+void
+LrWpanNetDevice::CompleteConfig (void)
+{
+  NS_LOG_FUNCTION (this);
+  if (m_mac == 0
+      || m_phy == 0
+      || m_csmaca == 0
+      || m_node == 0
+      || m_configComplete)
+    {
+      return;
+    }
+  m_mac->SetPhy (m_phy);
+  m_mac->SetCsmaCa (m_csmaca);
+  m_mac->SetMcpsDataIndicationCallback (MakeCallback (&LrWpanNetDevice::McpsDataIndication, this));
+  m_csmaca->SetMac (m_mac);
+
+  m_phy->SetMobility (m_node->GetObject<MobilityModel> ());
+  Ptr<LrWpanErrorModel> model = CreateObject<LrWpanErrorModel> ();
+  m_phy->SetErrorModel (model);
+  m_phy->SetDevice (this);
+
+  m_phy->SetPdDataIndicationCallback (MakeCallback (&LrWpanMac::PdDataIndication, m_mac));
+  m_phy->SetPdDataConfirmCallback (MakeCallback (&LrWpanMac::PdDataConfirm, m_mac));
+  m_phy->SetPlmeEdConfirmCallback (MakeCallback (&LrWpanMac::PlmeEdConfirm, m_mac));
+  m_phy->SetPlmeGetAttributeConfirmCallback (MakeCallback (&LrWpanMac::PlmeGetAttributeConfirm, m_mac));
+  m_phy->SetPlmeSetTRXStateConfirmCallback (MakeCallback (&LrWpanMac::PlmeSetTRXStateConfirm, m_mac));
+  m_phy->SetPlmeSetAttributeConfirmCallback (MakeCallback (&LrWpanMac::PlmeSetAttributeConfirm, m_mac));
+
+  m_csmaca->SetLrWpanMacStateCallback (MakeCallback (&LrWpanMac::SetLrWpanMacState, m_mac));
+  m_phy->SetPlmeCcaConfirmCallback (MakeCallback (&LrWpanCsmaCa::PlmeCcaConfirm, m_csmaca));
+  m_configComplete = true;
+}
+
+void
+LrWpanNetDevice::SetMac (Ptr<LrWpanMac> mac)
+{
+  NS_LOG_FUNCTION (this);
+  m_mac = mac;
+  CompleteConfig ();
+}
+
+void
+LrWpanNetDevice::SetPhy (Ptr<LrWpanPhy> phy)
+{
+  NS_LOG_FUNCTION (this);
+  m_phy = phy;
+  CompleteConfig ();
+}
+
+void
+LrWpanNetDevice::SetCsmaCa (Ptr<LrWpanCsmaCa> csmaca)
+{
+  NS_LOG_FUNCTION (this);
+  m_csmaca = csmaca;
+  CompleteConfig ();
+}
+
+void
+LrWpanNetDevice::SetChannel (Ptr<SpectrumChannel> channel)
+{
+  NS_LOG_FUNCTION (this << channel);
+  m_phy->SetChannel (channel);
+  channel->AddRx (m_phy);
+  CompleteConfig ();
+}
+
+Ptr<LrWpanMac>
+LrWpanNetDevice::GetMac (void) const
+{
+  // NS_LOG_FUNCTION (this);
+  return m_mac;
+}
+
+Ptr<LrWpanPhy>
+LrWpanNetDevice::GetPhy (void) const
+{
+  NS_LOG_FUNCTION (this);
+  return m_phy;
+}
+
+Ptr<LrWpanCsmaCa>
+LrWpanNetDevice::GetCsmaCa (void) const
+{
+  NS_LOG_FUNCTION (this);
+  return m_csmaca;
+}
+void
+LrWpanNetDevice::SetIfIndex (const uint32_t index)
+{
+  NS_LOG_FUNCTION (this << index);
+  m_ifIndex = index;
+}
+
+uint32_t
+LrWpanNetDevice::GetIfIndex (void) const
+{
+  NS_LOG_FUNCTION (this);
+  return m_ifIndex;
+}
+
+Ptr<Channel>
+LrWpanNetDevice::GetChannel (void) const
+{
+  NS_LOG_FUNCTION (this);
+  return m_phy->GetChannel ();
+}
+
+void
+LrWpanNetDevice::LinkUp (void)
+{
+  NS_LOG_FUNCTION (this);
+  m_linkUp = true;
+  m_linkChanges ();
+}
+
+void
+LrWpanNetDevice::LinkDown (void)
+{
+  NS_LOG_FUNCTION (this);
+  m_linkUp = false;
+  m_linkChanges ();
+}
+
+Ptr<SpectrumChannel>
+LrWpanNetDevice::DoGetChannel (void) const
+{
+  NS_LOG_FUNCTION (this);
+  return m_phy->GetChannel ();
+}
+
+void
+LrWpanNetDevice::SetAddress (Address address)
+{
+  NS_LOG_FUNCTION (this);
+  m_mac->SetShortAddress (Mac16Address::ConvertFrom (address));
+}
+
+Address
+LrWpanNetDevice::GetAddress (void) const
+{
+  NS_LOG_FUNCTION (this);
+  return m_mac->GetShortAddress ();
+}
+
+bool
+LrWpanNetDevice::SetMtu (const uint16_t mtu)
+{
+  NS_ABORT_MSG ("Unsupported");
+  return false;
+}
+
+uint16_t
+LrWpanNetDevice::GetMtu (void) const
+{
+  NS_LOG_FUNCTION (this);
+  // Maximum payload size is: max psdu - frame control - seqno - addressing - security - fcs
+  //                        = 127      - 2             - 1     - (2+2+2+2)  - 0        - 2
+  //                        = 114
+  // assuming no security and addressing with only 16 bit addresses without pan id compression.
+  return 114;
+}
+
+bool
+LrWpanNetDevice::IsLinkUp (void) const
+{
+  NS_LOG_FUNCTION (this);
+  return m_phy != 0 && m_linkUp;
+}
+
+void
+LrWpanNetDevice::AddLinkChangeCallback (Callback<void> callback)
+{
+  NS_LOG_FUNCTION (this);
+  m_linkChanges.ConnectWithoutContext (callback);
+}
+
+bool
+LrWpanNetDevice::IsBroadcast (void) const
+{
+  NS_LOG_FUNCTION (this);
+  return true;
+}
+
+Address
+LrWpanNetDevice::GetBroadcast (void) const
+{
+  NS_LOG_FUNCTION (this);
+  return Mac16Address ("ff:ff");
+}
+
+bool
+LrWpanNetDevice::IsMulticast (void) const
+{
+  NS_LOG_FUNCTION (this);
+  return true;
+}
+
+Address
+LrWpanNetDevice::GetMulticast (Ipv4Address multicastGroup) const
+{
+  NS_ABORT_MSG ("Unsupported");
+  return Address ();
+}
+
+Address
+LrWpanNetDevice::GetMulticast (Ipv6Address addr) const
+{
+  NS_LOG_FUNCTION (this);
+  /* Implementation based on RFC 4944 Section 9.
+   * An IPv6 packet with a multicast destination address (DST),
+   * consisting of the sixteen octets DST[1] through DST[16], is
+   * transmitted to the following 802.15.4 16-bit multicast address:
+   *           0                   1
+   *           0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
+   *          +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+   *          |1 0 0|DST[15]* |   DST[16]     |
+   *          +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+   * Here, DST[15]* refers to the last 5 bits in octet DST[15], that is,
+   * bits 3-7 within DST[15].  The initial 3-bit pattern of "100" follows
+   * the 16-bit address format for multicast addresses (Section 12). */
+
+  // \todo re-add this once Lr-Wpan will be able to accept these multicast addresses
+  //  uint8_t buf[16];
+  //  uint8_t buf2[2];
+  //
+  //  addr.GetBytes(buf);
+  //
+  //  buf2[0] = 0x80 | (buf[14] & 0x1F);
+  //  buf2[1] = buf[15];
+  //
+  //  Mac16Address newaddr = Mac16Address();
+  //  newaddr.CopyFrom(buf2);
+  //  return newaddr;
+
+  return Mac16Address ("ff:ff");
+}
+
+bool
+LrWpanNetDevice::IsBridge (void) const
+{
+  NS_LOG_FUNCTION (this);
+  return false;
+}
+
+bool
+LrWpanNetDevice::IsPointToPoint (void) const
+{
+  NS_LOG_FUNCTION (this);
+  return false;
+}
+
+bool
+LrWpanNetDevice::Send (Ptr<Packet> packet, const Address& dest, uint16_t protocolNumber)
+{
+  // This method basically assumes an 802.3-compliant device, but a raw
+  // 802.15.4 device does not have an ethertype, and requires specific
+  // McpsDataRequest parameters.
+  // For further study:  how to support these methods somehow, such as
+  // inventing a fake ethertype and packet tag for McpsDataRequest
+  NS_LOG_FUNCTION (this << packet << dest << protocolNumber);
+
+  if (packet->GetSize () > GetMtu ())
+    {
+      NS_LOG_ERROR ("Fragmentation is needed for this packet, drop the packet ");
+      return false;
+    }
+
+  McpsDataRequestParams m_mcpsDataRequestParams;
+  m_mcpsDataRequestParams.m_dstAddr = Mac16Address::ConvertFrom (dest);
+  m_mcpsDataRequestParams.m_dstAddrMode = SHORT_ADDR;
+  m_mcpsDataRequestParams.m_dstPanId = m_mac->GetPanId ();
+  m_mcpsDataRequestParams.m_srcAddrMode = SHORT_ADDR;
+  // Using ACK requests for broadcast destinations is ok here. They are disabled
+  // by the MAC.
+  if (m_useAcks)
+    {
+      m_mcpsDataRequestParams.m_txOptions = TX_OPTION_ACK;
+    }
+  m_mcpsDataRequestParams.m_msduHandle = 0;
+  m_mac->McpsDataRequest (m_mcpsDataRequestParams, packet);
+  return true;
+}
+
+bool
+LrWpanNetDevice::SendFrom (Ptr<Packet> packet, const Address& source, const Address& dest, uint16_t protocolNumber)
+{
+  NS_ABORT_MSG ("Unsupported");
+  // TODO: To support SendFrom, the MACs McpsDataRequest has to use the provided source address, instead of to local one.
+  return false;
+}
+
+Ptr<Node>
+LrWpanNetDevice::GetNode (void) const
+{
+  NS_LOG_FUNCTION (this);
+  return m_node;
+}
+
+void
+LrWpanNetDevice::SetNode (Ptr<Node> node)
+{
+  NS_LOG_FUNCTION (this);
+  m_node = node;
+  CompleteConfig ();
+}
+
+bool
+LrWpanNetDevice::NeedsArp (void) const
+{
+  NS_LOG_FUNCTION (this);
+  return true;
+}
+
+void
+LrWpanNetDevice::SetReceiveCallback (ReceiveCallback cb)
+{
+  NS_LOG_FUNCTION (this);
+  m_receiveCallback = cb;
+}
+
+void
+LrWpanNetDevice::SetPromiscReceiveCallback (PromiscReceiveCallback cb)
+{
+  // This method basically assumes an 802.3-compliant device, but a raw
+  // 802.15.4 device does not have an ethertype, and requires specific
+  // McpsDataIndication parameters.
+  // For further study:  how to support these methods somehow, such as
+  // inventing a fake ethertype and packet tag for McpsDataRequest
+  NS_LOG_WARN ("Unsupported; use LrWpan MAC APIs instead");
+}
+
+void
+LrWpanNetDevice::McpsDataIndication (McpsDataIndicationParams params, Ptr<Packet> pkt)
+{
+  NS_LOG_FUNCTION (this);
+  // TODO: Use the PromiscReceiveCallback if the MAC is in promiscuous mode.
+  m_receiveCallback (this, pkt, 0, params.m_srcAddr);
+}
+
+bool
+LrWpanNetDevice::SupportsSendFrom (void) const
+{
+  NS_LOG_FUNCTION_NOARGS ();
+  return false;
+}
+
+int64_t
+LrWpanNetDevice::AssignStreams (int64_t stream)
+{
+  NS_LOG_FUNCTION (stream);
+  int64_t streamIndex = stream;
+  streamIndex += m_csmaca->AssignStreams (stream);
+  streamIndex += m_phy->AssignStreams (stream);
+  NS_LOG_DEBUG ("Number of assigned RV streams:  " << (streamIndex - stream));
+  return (streamIndex - stream);
+}
+
+} // namespace ns3
diff -Naur ns-3.19/src/lr-wpan/model/lr-wpan-net-device.h ns-3.20/src/lr-wpan/model/lr-wpan-net-device.h
--- ns-3.19/src/lr-wpan/model/lr-wpan-net-device.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.20/src/lr-wpan/model/lr-wpan-net-device.h	2014-06-17 10:33:13.905995869 -0700
@@ -0,0 +1,246 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2011 The Boeing Company
+ *
+ * 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:
+ *  Tom Henderson <thomas.r.henderson@boeing.com>
+ *  Tommaso Pecorella <tommaso.pecorella@unifi.it>
+ *  Margherita Filippetti <morag87@gmail.com>
+ */
+#ifndef LR_WPAN_NET_DEVICE_H
+#define LR_WPAN_NET_DEVICE_H
+
+#include <ns3/net-device.h>
+#include <ns3/traced-callback.h>
+#include <ns3/lr-wpan-mac.h>
+
+namespace ns3 {
+
+class LrWpanPhy;
+class LrWpanCsmaCa;
+class SpectrumChannel;
+class Node;
+
+/**
+ * \ingroup lr-wpan
+ *
+ * \brief Network layer to device interface.
+ *
+ * The ns3::NetDevice includes IP-specific API such as GetMulticast(), Send()
+ * and SendTo() methods, which do not map well the the 802.15.4 MAC MCPS
+ * DataRequest primitive.  So, the basic design is to provide, as
+ * much as makes sense, the class ns3::NetDevice API, but rely on the user
+ * accessing the LrWpanMac pointer to make 802.15.4-specific API calls.
+ * As such, this is really just an encapsulating class.
+ */
+class LrWpanNetDevice : public NetDevice
+{
+public:
+  /**
+   * Get the type ID.
+   *
+   * \return the object TypeId
+   */
+  static TypeId GetTypeId (void);
+
+  LrWpanNetDevice (void);
+  virtual ~LrWpanNetDevice (void);
+
+  /**
+   * Set the MAC to be used by this NetDevice.
+   *
+   * \param mac the MAC to be used
+   */
+  void SetMac (Ptr<LrWpanMac> mac);
+
+  /**
+   * Set the PHY to be used by the MAC and this NetDevice.
+   *
+   * \param phy the PHY to be used
+   */
+  void SetPhy (Ptr<LrWpanPhy> phy);
+
+  /**
+   * Set the CSMA/CA implementation to be used by the MAC and this NetDevice.
+   *
+   * \param csmaca the CSMA/CA implementation to be used
+   */
+  void SetCsmaCa (Ptr<LrWpanCsmaCa> csmaca);
+
+  /**
+   * Set the channel to which the NetDevice, and therefore the PHY, should be
+   * attached to.
+   *
+   * \param channel the channel to be used
+   */
+  void SetChannel (Ptr<SpectrumChannel> channel);
+
+  /**
+   * Get the MAC used by this NetDevice.
+   *
+   * \return the MAC object
+   */
+  Ptr<LrWpanMac> GetMac (void) const;
+
+  /**
+   * Get the PHY used by this NetDevice.
+   *
+   * \return the PHY object
+   */
+  Ptr<LrWpanPhy> GetPhy (void) const;
+
+  /**
+   * Get the CSMA/CA implementation used by this NetDevice.
+   *
+   * \return the CSMA/CA implementation object
+   */
+  Ptr<LrWpanCsmaCa> GetCsmaCa (void) const;
+
+  // From class NetDevice
+  virtual void SetIfIndex (const uint32_t index);
+  virtual uint32_t GetIfIndex (void) const;
+  virtual Ptr<Channel> GetChannel (void) const;
+  /**
+   * This method indirects to LrWpanMac::SetShortAddress ()
+   */
+  virtual void SetAddress (Address address);
+  /**
+   * This method indirects to LrWpanMac::SetShortAddress ()
+   */
+  virtual Address GetAddress (void) const;
+  virtual bool SetMtu (const uint16_t mtu);
+  virtual uint16_t GetMtu (void) const;
+  virtual bool IsLinkUp (void) const;
+  virtual void AddLinkChangeCallback (Callback<void> callback);
+  virtual bool IsBroadcast (void) const;
+  virtual Address GetBroadcast (void) const;
+  virtual bool IsMulticast (void) const;
+  virtual Address GetMulticast (Ipv4Address multicastGroup) const;
+  virtual Address GetMulticast (Ipv6Address addr) const;
+  virtual bool IsBridge (void) const;
+  virtual bool IsPointToPoint (void) const;
+  virtual bool Send (Ptr<Packet> packet, const Address& dest, uint16_t protocolNumber);
+  virtual bool SendFrom (Ptr<Packet> packet, const Address& source, const Address& dest, uint16_t protocolNumber);
+  virtual Ptr<Node> GetNode (void) const;
+  virtual void SetNode (Ptr<Node> node);
+  virtual bool NeedsArp (void) const;
+
+  virtual void SetReceiveCallback (ReceiveCallback cb);
+  virtual void SetPromiscReceiveCallback (PromiscReceiveCallback cb);
+  virtual bool SupportsSendFrom (void) const;
+
+  /**
+   * The callback used by the MAC to hand over incoming packets to the
+   * NetDevice. This callback will in turn use the ReceiveCallback set by
+   * SetReceiveCallback() to notify upper layers.
+   *
+   * \param params 802.15.4 specific parameters, including source and destination addresses
+   * \param pkt the packet do be delivered
+   */
+  void McpsDataIndication (McpsDataIndicationParams params, Ptr<Packet> pkt);
+
+  /**
+   * Assign a fixed random variable stream number to the random variables
+   * used by this model.  Return the number of streams that have been assigned.
+   *
+   * \param stream first stream index to use
+   * \return the number of stream indices assigned by this model
+   */
+  int64_t AssignStreams (int64_t stream);
+
+private:
+  // Inherited from NetDevice/Object
+  virtual void DoDispose (void);
+  virtual void DoInitialize (void);
+
+  /**
+   * Mark NetDevice link as up.
+   */
+  void LinkUp (void);
+
+  /**
+   * Mark NetDevice link as down.
+   */
+  void LinkDown (void);
+
+  /**
+   * Attribute accessor method for the "Channel" attribute.
+   *
+   * \return the channel to which this NetDevice is attached
+   */
+  Ptr<SpectrumChannel> DoGetChannel (void) const;
+
+  /**
+   * Configure PHY, MAC and CSMA/CA.
+   */
+  void CompleteConfig (void);
+
+  /**
+   * The MAC for this NetDevice.
+   */
+  Ptr<LrWpanMac> m_mac;
+
+  /**
+   * The PHY for this NetDevice.
+   */
+  Ptr<LrWpanPhy> m_phy;
+
+  /**
+   * The CSMA/CA implementation for this NetDevice.
+   */
+  Ptr<LrWpanCsmaCa> m_csmaca;
+
+  /**
+   * The node associated with this NetDevice.
+   */
+  Ptr<Node> m_node;
+
+  /**
+   * True if MAC, PHY and CSMA/CA where successfully configured and the
+   * NetDevice is ready for being used.
+   */
+  bool m_configComplete;
+
+  /**
+   * Configure the NetDevice to request MAC layer acknowledgements when sending
+   * packets using the Send() API.
+   */
+  bool m_useAcks;
+
+  /**
+   * Is the link/device currently up and running?
+   */
+  bool m_linkUp;
+
+  /**
+   * The interface index of this NetDevice.
+   */
+  uint32_t m_ifIndex;
+
+  /**
+   * Trace source for link up/down changes.
+   */
+  TracedCallback<> m_linkChanges;
+
+  /**
+   * Upper layer callback used for notification of new data packet arrivals.
+   */
+  ReceiveCallback m_receiveCallback;
+};
+
+} // namespace ns3
+
+#endif /* LR_WPAN_NET_DEVICE_H */
diff -Naur ns-3.19/src/lr-wpan/model/lr-wpan-phy.cc ns-3.20/src/lr-wpan/model/lr-wpan-phy.cc
--- ns-3.19/src/lr-wpan/model/lr-wpan-phy.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.20/src/lr-wpan/model/lr-wpan-phy.cc	2014-06-17 10:33:13.906995861 -0700
@@ -0,0 +1,1376 @@
+/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2011 The Boeing Company
+ *
+ * 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:
+ *  Gary Pei <guangyu.pei@boeing.com>
+ *  Sascha Alexander Jopen <jopen@cs.uni-bonn.de>
+ */
+#include "lr-wpan-phy.h"
+#include "lr-wpan-lqi-tag.h"
+#include "lr-wpan-spectrum-signal-parameters.h"
+#include "lr-wpan-spectrum-value-helper.h"
+#include "lr-wpan-error-model.h"
+#include "lr-wpan-net-device.h"
+#include <ns3/log.h>
+#include <ns3/abort.h>
+#include <ns3/simulator.h>
+#include <ns3/spectrum-value.h>
+#include <ns3/antenna-model.h>
+#include <ns3/mobility-model.h>
+#include <ns3/spectrum-channel.h>
+#include <ns3/packet.h>
+#include <ns3/packet-burst.h>
+#include <ns3/net-device.h>
+#include <ns3/random-variable-stream.h>
+#include <ns3/double.h>
+
+NS_LOG_COMPONENT_DEFINE ("LrWpanPhy");
+
+namespace ns3 {
+
+NS_OBJECT_ENSURE_REGISTERED (LrWpanPhy);
+
+// Table 22 in section 6.4.1 of ieee802.15.4
+const uint32_t LrWpanPhy::aMaxPhyPacketSize = 127; // max PSDU in octets
+const uint32_t LrWpanPhy::aTurnaroundTime = 12;  // RX-to-TX or TX-to-RX in symbol periods
+
+// IEEE802.15.4-2006 Table 2 in section 6.1.2 (kb/s and ksymbol/s)
+// The index follows LrWpanPhyOption
+const LrWpanPhyDataAndSymbolRates
+LrWpanPhy::dataSymbolRates[7] = { { 20.0, 20.0},
+                                  { 40.0, 40.0},
+                                  { 250.0, 12.5},
+                                  { 250.0, 50.0},
+                                  { 100.0, 25.0},
+                                  { 250.0, 62.5},
+                                  { 250.0, 62.5}};
+// IEEE802.15.4-2006 Table 19 and Table 20 in section 6.3.
+// The PHR is 1 octet and it follows phySymbolsPerOctet in Table 23
+// The index follows LrWpanPhyOption
+const LrWpanPhyPpduHeaderSymbolNumber
+LrWpanPhy::ppduHeaderSymbolNumbers[7] = { { 32.0, 8.0, 8.0},
+                                          { 32.0, 8.0, 8.0},
+                                          { 2.0, 1.0, 0.4},
+                                          { 6.0, 1.0, 1.6},
+                                          { 8.0, 2.0, 2.0},
+                                          { 8.0, 2.0, 2.0},
+                                          { 8.0, 2.0, 2.0}};
+
+TypeId
+LrWpanPhy::GetTypeId (void)
+{
+  static TypeId tid = TypeId ("ns3::LrWpanPhy")
+    .SetParent<Object> ()
+    .AddConstructor<LrWpanPhy> ()
+    .AddTraceSource ("TrxState",
+                     "The state of the transceiver",
+                     MakeTraceSourceAccessor (&LrWpanPhy::m_trxStateLogger))
+    .AddTraceSource ("PhyTxBegin",
+                     "Trace source indicating a packet has begun transmitting over the channel medium",
+                     MakeTraceSourceAccessor (&LrWpanPhy::m_phyTxBeginTrace))
+    .AddTraceSource ("PhyTxEnd",
+                     "Trace source indicating a packet has been completely transmitted over the channel.",
+                     MakeTraceSourceAccessor (&LrWpanPhy::m_phyTxEndTrace))
+    .AddTraceSource ("PhyTxDrop",
+                     "Trace source indicating a packet has been dropped by the device during transmission",
+                     MakeTraceSourceAccessor (&LrWpanPhy::m_phyTxDropTrace))
+    .AddTraceSource ("PhyRxBegin",
+                     "Trace source indicating a packet has begun being received from the channel medium by the device",
+                     MakeTraceSourceAccessor (&LrWpanPhy::m_phyRxBeginTrace))
+    .AddTraceSource ("PhyRxEnd",
+                     "Trace source indicating a packet has been completely received from the channel medium by the device",
+                     MakeTraceSourceAccessor (&LrWpanPhy::m_phyRxEndTrace))
+    .AddTraceSource ("PhyRxDrop",
+                     "Trace source indicating a packet has been dropped by the device during reception",
+                     MakeTraceSourceAccessor (&LrWpanPhy::m_phyRxDropTrace))
+  ;
+  return tid;
+}
+
+LrWpanPhy::LrWpanPhy (void)
+  : m_edRequest (),
+    m_setTRXState ()
+{
+  m_trxState = IEEE_802_15_4_PHY_TRX_OFF;
+  m_trxStatePending = IEEE_802_15_4_PHY_IDLE;
+
+  // default PHY PIB attributes
+  m_phyPIBAttributes.phyCurrentChannel = 11;
+  m_phyPIBAttributes.phyTransmitPower = 0;
+  m_phyPIBAttributes.phyCurrentPage = 0;
+  for (uint32_t i = 0; i < 32; i++)
+    {
+      m_phyPIBAttributes.phyChannelsSupported[i] = 0x07ffffff;
+    }
+  m_phyPIBAttributes.phyCCAMode = 1;
+
+  SetMyPhyOption ();
+
+  m_edPower.averagePower = 0.0;
+  m_edPower.lastUpdate = Seconds (0.0);
+  m_edPower.measurementLength = Seconds (0.0);
+
+  // default -110 dBm in W for 2.4 GHz
+  m_rxSensitivity = pow (10.0, -106.58 / 10.0) / 1000.0;
+  LrWpanSpectrumValueHelper psdHelper;
+  m_txPsd = psdHelper.CreateTxPowerSpectralDensity (m_phyPIBAttributes.phyTransmitPower,
+                                                    m_phyPIBAttributes.phyCurrentChannel);
+  m_noise = psdHelper.CreateNoisePowerSpectralDensity (m_phyPIBAttributes.phyCurrentChannel);
+  m_signal = Create<LrWpanInterferenceHelper> (m_noise->GetSpectrumModel ());
+  m_rxLastUpdate = Seconds (0);
+  Ptr<Packet> none_packet = 0;
+  Ptr<LrWpanSpectrumSignalParameters> none_params = 0;
+  m_currentRxPacket = std::make_pair (none_params, true);
+  m_currentTxPacket = std::make_pair (none_packet, true);
+  m_errorModel = 0;
+
+  m_random = CreateObject<UniformRandomVariable> ();
+  m_random->SetAttribute ("Min", DoubleValue (0.0));
+  m_random->SetAttribute ("Max", DoubleValue (1.0));
+
+
+  ChangeTrxState (IEEE_802_15_4_PHY_TRX_OFF);
+}
+
+LrWpanPhy::~LrWpanPhy (void)
+{
+}
+
+void
+LrWpanPhy::DoDispose (void)
+{
+  NS_LOG_FUNCTION (this);
+
+  // Cancel pending transceiver state change, if one is in progress.
+  m_setTRXState.Cancel ();
+  m_trxState = IEEE_802_15_4_PHY_TRX_OFF;
+  m_trxStatePending = IEEE_802_15_4_PHY_IDLE;
+
+  m_mobility = 0;
+  m_device = 0;
+  m_channel = 0;
+  m_txPsd = 0;
+  m_noise = 0;
+  m_signal = 0;
+  m_errorModel = 0;
+  m_pdDataIndicationCallback = MakeNullCallback< void, uint32_t, Ptr<Packet>, uint8_t > ();
+  m_pdDataConfirmCallback = MakeNullCallback< void, LrWpanPhyEnumeration > ();
+  m_plmeCcaConfirmCallback = MakeNullCallback< void, LrWpanPhyEnumeration > ();
+  m_plmeEdConfirmCallback = MakeNullCallback< void, LrWpanPhyEnumeration,uint8_t > ();
+  m_plmeGetAttributeConfirmCallback = MakeNullCallback< void, LrWpanPhyEnumeration, LrWpanPibAttributeIdentifier, LrWpanPhyPibAttributes* > ();
+  m_plmeSetTRXStateConfirmCallback = MakeNullCallback< void, LrWpanPhyEnumeration > ();
+  m_plmeSetAttributeConfirmCallback = MakeNullCallback< void, LrWpanPhyEnumeration, LrWpanPibAttributeIdentifier > ();
+
+  SpectrumPhy::DoDispose ();
+}
+
+Ptr<NetDevice>
+LrWpanPhy::GetDevice (void)
+{
+  NS_LOG_FUNCTION (this);
+  return m_device;
+}
+
+
+Ptr<MobilityModel>
+LrWpanPhy::GetMobility (void)
+{
+  NS_LOG_FUNCTION (this);
+  return m_mobility;
+}
+
+
+void
+LrWpanPhy::SetDevice (Ptr<NetDevice> d)
+{
+  NS_LOG_FUNCTION (this << d);
+  m_device = d;
+}
+
+
+void
+LrWpanPhy::SetMobility (Ptr<MobilityModel> m)
+{
+  NS_LOG_FUNCTION (this << m);
+  m_mobility = m;
+}
+
+
+void
+LrWpanPhy::SetChannel (Ptr<SpectrumChannel> c)
+{
+  NS_LOG_FUNCTION (this << c);
+  m_channel = c;
+}
+
+
+Ptr<SpectrumChannel>
+LrWpanPhy::GetChannel (void)
+{
+  NS_LOG_FUNCTION (this);
+  return m_channel;
+}
+
+
+Ptr<const SpectrumModel>
+LrWpanPhy::GetRxSpectrumModel (void) const
+{
+  NS_LOG_FUNCTION (this);
+  if (m_txPsd)
+    {
+      return m_txPsd->GetSpectrumModel ();
+    }
+  else
+    {
+      return 0;
+    }
+}
+
+Ptr<AntennaModel>
+LrWpanPhy::GetRxAntenna (void)
+{
+  NS_LOG_FUNCTION (this);
+  return m_antenna;
+}
+
+void
+LrWpanPhy::SetAntenna (Ptr<AntennaModel> a)
+{
+  NS_LOG_FUNCTION (this << a);
+  m_antenna = a;
+}
+
+void
+LrWpanPhy::StartRx (Ptr<SpectrumSignalParameters> spectrumRxParams)
+{
+  NS_LOG_FUNCTION (this << spectrumRxParams);
+  LrWpanSpectrumValueHelper psdHelper;
+
+
+  Ptr<LrWpanSpectrumSignalParameters> lrWpanRxParams = DynamicCast<LrWpanSpectrumSignalParameters> (spectrumRxParams);
+  NS_ASSERT (lrWpanRxParams != 0);
+  Ptr<Packet> p = (lrWpanRxParams->packetBurst->GetPackets ()).front ();
+  NS_ASSERT (p != 0);
+
+  if (!m_edRequest.IsExpired ())
+    {
+      // Update the average receive power during ED.
+      Time now = Simulator::Now ();
+      m_edPower.averagePower += LrWpanSpectrumValueHelper::TotalAvgPower (m_signal->GetSignalPsd ()) * (now - m_edPower.lastUpdate).GetTimeStep () / m_edPower.measurementLength.GetTimeStep ();
+      m_edPower.lastUpdate = now;
+    }
+
+  // Prevent PHY from receiving another packet while switching the transceiver state.
+  if (m_trxState == IEEE_802_15_4_PHY_RX_ON && !m_setTRXState.IsRunning ())
+    {
+      // The specification doesn't seem to refer to BUSY_RX, but vendor
+      // data sheets suggest that this is a substate of the RX_ON state
+      // that is entered after preamble detection when the digital receiver
+      // is enabled.  Here, for now, we use BUSY_RX to mark the period between
+      // StartRx() and EndRx() states.
+
+      // We are going to BUSY_RX state when receiving the first bit of an SHR,
+      // as opposed to real receivers, which should go to this state only after
+      // successfully receiving the SHR.
+
+      // If synchronizing to the packet is possible, change to BUSY_RX state,
+      // otherwise drop the packet and stay in RX state. The actual synchronization
+      // is not modeled.
+
+      // Add any incoming packet to the current interference before checking the
+      // SINR.
+      NS_LOG_DEBUG (this << " receiving packet with power: " << 10 * log10(LrWpanSpectrumValueHelper::TotalAvgPower (lrWpanRxParams->psd)) + 30 << "dBm");
+      m_signal->AddSignal (lrWpanRxParams->psd);
+      Ptr<SpectrumValue> interferenceAndNoise = m_signal->GetSignalPsd ();
+      *interferenceAndNoise -= *lrWpanRxParams->psd;
+      *interferenceAndNoise += *m_noise;
+      double sinr = LrWpanSpectrumValueHelper::TotalAvgPower (lrWpanRxParams->psd) / LrWpanSpectrumValueHelper::TotalAvgPower (interferenceAndNoise);
+
+      // Std. 802.15.4-2006, appendix E, Figure E.2
+      // At SNR < -5 the BER is less than 10e-1.
+      // It's useless to even *try* to decode the packet.
+      if (10 * log10 (sinr) > -5)
+        {
+          ChangeTrxState (IEEE_802_15_4_PHY_BUSY_RX);
+          m_currentRxPacket = std::make_pair (lrWpanRxParams, false);
+          m_phyRxBeginTrace (p);
+
+          m_rxLastUpdate = Simulator::Now ();
+        }
+      else
+        {
+          m_phyRxDropTrace (p);
+        }
+    }
+  else if (m_trxState == IEEE_802_15_4_PHY_BUSY_RX)
+    {
+      // Drop the new packet.
+      NS_LOG_DEBUG (this << " packet collision");
+      m_phyRxDropTrace (p);
+
+      // Check if we correctly received the old packet up to now.
+      CheckInterference ();
+
+      // Add the incoming packet to the current interference after we have
+      // checked for successfull reception of the current packet for the time
+      // before the additional interference.
+      m_signal->AddSignal (lrWpanRxParams->psd);
+    }
+  else
+    {
+      // Simply drop the packet.
+      NS_LOG_DEBUG (this << " transceiver not in RX state");
+      m_phyRxDropTrace (p);
+
+      // Add the signal power to the interference, anyway.
+      m_signal->AddSignal (lrWpanRxParams->psd);
+    }
+
+  // Update peak power if CCA is in progress.
+  if (!m_ccaRequest.IsExpired ())
+    {
+      double power = LrWpanSpectrumValueHelper::TotalAvgPower (m_signal->GetSignalPsd ());
+      if (m_ccaPeakPower < power)
+        {
+          m_ccaPeakPower = power;
+        }
+    }
+
+  // Always call EndRx to update the interference.
+  // \todo: Do we need to keep track of these events to unschedule them when disposing off the PHY?
+  Simulator::Schedule (lrWpanRxParams->duration, &LrWpanPhy::EndRx, this, lrWpanRxParams);
+}
+
+void
+LrWpanPhy::CheckInterference (void)
+{
+  // Calculate whether packet was lost.
+  LrWpanSpectrumValueHelper psdHelper;
+  Ptr<LrWpanSpectrumSignalParameters> currentRxParams = m_currentRxPacket.first;
+
+  // We are currently receiving a packet.
+  if (m_trxState == IEEE_802_15_4_PHY_BUSY_RX)
+    {
+      // NS_ASSERT (currentRxParams && !m_currentRxPacket.second);
+
+      Ptr<Packet> currentPacket = currentRxParams->packetBurst->GetPackets ().front ();
+      if (m_errorModel != 0)
+        {
+          // How many bits did we receive since the last calculation?
+          double t = (Simulator::Now () - m_rxLastUpdate).ToDouble (Time::MS);
+          uint32_t chunkSize = ceil (t * (GetDataOrSymbolRate (true) / 1000));
+          Ptr<SpectrumValue> interferenceAndNoise = m_signal->GetSignalPsd ();
+          *interferenceAndNoise -= *currentRxParams->psd;
+          *interferenceAndNoise += *m_noise;
+          double sinr = LrWpanSpectrumValueHelper::TotalAvgPower (currentRxParams->psd) / LrWpanSpectrumValueHelper::TotalAvgPower (interferenceAndNoise);
+          double per = 1.0 - m_errorModel->GetChunkSuccessRate (sinr, chunkSize);
+
+          // The LQI is the total packet success rate scaled to 0-255.
+          // If not already set, initialize to 255.
+          LrWpanLqiTag tag (std::numeric_limits<uint8_t>::max ());
+          currentPacket->PeekPacketTag (tag);
+          uint8_t lqi = tag.Get ();
+          tag.Set (lqi - (per * lqi));
+          currentPacket->ReplacePacketTag (tag);
+
+          if (m_random->GetValue () < per)
+            {
+              // The packet was destroyed, drop the packet after reception.
+              m_currentRxPacket.second = true;
+            }
+        }
+      else
+        {
+          NS_LOG_WARN ("Missing ErrorModel");
+        }
+    }
+  m_rxLastUpdate = Simulator::Now ();
+}
+
+void
+LrWpanPhy::EndRx (Ptr<LrWpanSpectrumSignalParameters> params)
+{
+  NS_LOG_FUNCTION (this);
+  NS_ASSERT (params != 0);
+
+  if (!m_edRequest.IsExpired ())
+    {
+      // Update the average receive power during ED.
+      Time now = Simulator::Now ();
+      m_edPower.averagePower += LrWpanSpectrumValueHelper::TotalAvgPower (m_signal->GetSignalPsd ()) * (now - m_edPower.lastUpdate).GetTimeStep () / m_edPower.measurementLength.GetTimeStep ();
+      m_edPower.lastUpdate = now;
+    }
+
+  CheckInterference ();
+
+  // Update the interference.
+  m_signal->RemoveSignal (params->psd);
+
+  // If this is the end of the currently received packet, check if reception was successfull.
+  Ptr<LrWpanSpectrumSignalParameters> currentRxParams = m_currentRxPacket.first;
+  if (currentRxParams == params)
+    {
+      Ptr<Packet> currentPacket = currentRxParams->packetBurst->GetPackets ().front ();
+      NS_ASSERT (currentPacket != 0);
+
+      // If there is no error model attached to the PHY, we always report the maximum LQI value.
+      LrWpanLqiTag tag (std::numeric_limits<uint8_t>::max ());
+      currentPacket->PeekPacketTag (tag);
+      m_phyRxEndTrace (currentPacket, tag.Get ());
+
+      if (!m_currentRxPacket.second)
+        {
+          // The packet was successfully received, push it up the stack.
+          if (!m_pdDataIndicationCallback.IsNull ())
+            {
+              m_pdDataIndicationCallback (currentPacket->GetSize (), currentPacket, tag.Get ());
+            }
+        }
+      else
+        {
+          // The packet was destroyed, drop it.
+          m_phyRxDropTrace (currentPacket);
+        }
+      Ptr<LrWpanSpectrumSignalParameters> none = 0;
+      m_currentRxPacket = std::make_pair (none, true);
+
+      // We may be waiting to apply a pending state change.
+      if (m_trxStatePending != IEEE_802_15_4_PHY_IDLE)
+        {
+          // Only change the state immediately, if the transceiver is not already
+          // switching the state.
+          if (!m_setTRXState.IsRunning ())
+            {
+              NS_LOG_LOGIC ("Apply pending state change to " << m_trxStatePending);
+              ChangeTrxState (m_trxStatePending);
+              m_trxStatePending = IEEE_802_15_4_PHY_IDLE;
+              if (!m_plmeSetTRXStateConfirmCallback.IsNull ())
+                {
+                  m_plmeSetTRXStateConfirmCallback (IEEE_802_15_4_PHY_SUCCESS);
+                }
+            }
+        }
+      else
+        {
+          ChangeTrxState (IEEE_802_15_4_PHY_RX_ON);
+        }
+    }
+}
+
+void
+LrWpanPhy::PdDataRequest (const uint32_t psduLength, Ptr<Packet> p)
+{
+  NS_LOG_FUNCTION (this << psduLength << p);
+
+  if (psduLength > aMaxPhyPacketSize)
+    {
+      if (!m_pdDataConfirmCallback.IsNull ())
+        {
+          m_pdDataConfirmCallback (IEEE_802_15_4_PHY_UNSPECIFIED);
+        }
+      NS_LOG_DEBUG ("Drop packet because psduLength too long: " << psduLength);
+      return;
+    }
+
+  // Prevent PHY from sending a packet while switching the transceiver state.
+  if (!m_setTRXState.IsRunning ())
+    {
+      if (m_trxState == IEEE_802_15_4_PHY_TX_ON)
+        {
+          //send down
+          NS_ASSERT (m_channel);
+
+          // Remove a possible LQI tag from a previous transmission of the packet.
+          LrWpanLqiTag lqiTag;
+          p->RemovePacketTag (lqiTag);
+
+          Ptr<LrWpanSpectrumSignalParameters> txParams = Create<LrWpanSpectrumSignalParameters> ();
+          txParams->duration = CalculateTxTime (p);
+          txParams->txPhy = GetObject<SpectrumPhy> ();
+          txParams->psd = m_txPsd;
+          txParams->txAntenna = m_antenna;
+          Ptr<PacketBurst> pb = CreateObject<PacketBurst> ();
+          pb->AddPacket (p);
+          txParams->packetBurst = pb;
+          m_channel->StartTx (txParams);
+          m_pdDataRequest = Simulator::Schedule (txParams->duration, &LrWpanPhy::EndTx, this);
+          ChangeTrxState (IEEE_802_15_4_PHY_BUSY_TX);
+          m_phyTxBeginTrace (p);
+          m_currentTxPacket.first = p;
+          m_currentTxPacket.second = false;
+          return;
+        }
+      else if ((m_trxState == IEEE_802_15_4_PHY_RX_ON)
+               || (m_trxState == IEEE_802_15_4_PHY_TRX_OFF)
+               || (m_trxState == IEEE_802_15_4_PHY_BUSY_TX) )
+        {
+          if (!m_pdDataConfirmCallback.IsNull ())
+            {
+              m_pdDataConfirmCallback (m_trxState);
+            }
+          // Drop packet, hit PhyTxDrop trace
+          m_phyTxDropTrace (p);
+          return;
+        }
+      else
+        {
+          NS_FATAL_ERROR ("This should be unreachable, or else state " << m_trxState << " should be added as a case");
+        }
+    }
+  else
+    {
+      // TODO: This error code is not covered by the standard.
+      // What is the correct behavior in this case?
+      if (!m_pdDataConfirmCallback.IsNull ())
+        {
+          m_pdDataConfirmCallback (IEEE_802_15_4_PHY_UNSPECIFIED);
+        }
+      // Drop packet, hit PhyTxDrop trace
+      m_phyTxDropTrace (p);
+      return;
+    }
+}
+
+void
+LrWpanPhy::PlmeCcaRequest (void)
+{
+  NS_LOG_FUNCTION (this);
+
+  if (m_trxState == IEEE_802_15_4_PHY_RX_ON || m_trxState == IEEE_802_15_4_PHY_BUSY_RX)
+    {
+      m_ccaPeakPower = 0.0;
+      Time ccaTime = Seconds (8.0 / GetDataOrSymbolRate (false));
+      m_ccaRequest = Simulator::Schedule (ccaTime, &LrWpanPhy::EndCca, this);
+    }
+  else
+    {
+      if (!m_plmeCcaConfirmCallback.IsNull ())
+        {
+          if (m_trxState == IEEE_802_15_4_PHY_TRX_OFF)
+            {
+              m_plmeCcaConfirmCallback (IEEE_802_15_4_PHY_TRX_OFF);
+            }
+          else
+            {
+              m_plmeCcaConfirmCallback (IEEE_802_15_4_PHY_BUSY);
+            }
+        }
+    }
+}
+
+void
+LrWpanPhy::PlmeEdRequest (void)
+{
+  NS_LOG_FUNCTION (this);
+  if (m_trxState == IEEE_802_15_4_PHY_RX_ON || m_trxState == IEEE_802_15_4_PHY_BUSY_RX)
+    {
+      // Average over the powers of all signals received until EndEd()
+      m_edPower.averagePower = 0;
+      m_edPower.lastUpdate = Simulator::Now ();
+      m_edPower.measurementLength = Seconds (8.0 / GetDataOrSymbolRate (false));
+      m_edRequest = Simulator::Schedule (m_edPower.measurementLength, &LrWpanPhy::EndEd, this);
+    }
+  else
+    {
+      LrWpanPhyEnumeration result = m_trxState;
+      if (m_trxState == IEEE_802_15_4_PHY_BUSY_TX)
+        {
+          result = IEEE_802_15_4_PHY_TX_ON;
+        }
+
+      if (!m_plmeEdConfirmCallback.IsNull ())
+        {
+          m_plmeEdConfirmCallback (result, 0);
+        }
+    }
+}
+
+void
+LrWpanPhy::PlmeGetAttributeRequest (LrWpanPibAttributeIdentifier id)
+{
+  NS_LOG_FUNCTION (this << id);
+  LrWpanPhyEnumeration status;
+
+  switch (id)
+    {
+    case phyCurrentChannel:
+    case phyChannelsSupported:
+    case phyTransmitPower:
+    case phyCCAMode:
+    case phyCurrentPage:
+    case phyMaxFrameDuration:
+    case phySHRDuration:
+    case phySymbolsPerOctet:
+      {
+        status = IEEE_802_15_4_PHY_SUCCESS;
+        break;
+      }
+    default:
+      {
+        status = IEEE_802_15_4_PHY_UNSUPPORTED_ATTRIBUTE;
+        break;
+      }
+    }
+  if (!m_plmeGetAttributeConfirmCallback.IsNull ())
+    {
+      LrWpanPhyPibAttributes retValue;
+      memcpy (&retValue, &m_phyPIBAttributes, sizeof(LrWpanPhyPibAttributes));
+      m_plmeGetAttributeConfirmCallback (status,id,&retValue);
+    }
+}
+
+// Section 6.2.2.7.3
+void
+LrWpanPhy::PlmeSetTRXStateRequest (LrWpanPhyEnumeration state)
+{
+  NS_LOG_FUNCTION (this << state);
+
+  // Check valid states (Table 14)
+  NS_ABORT_IF ( (state != IEEE_802_15_4_PHY_RX_ON)
+                && (state != IEEE_802_15_4_PHY_TRX_OFF)
+                && (state != IEEE_802_15_4_PHY_FORCE_TRX_OFF)
+                && (state != IEEE_802_15_4_PHY_TX_ON) );
+
+  NS_LOG_LOGIC ("Trying to set m_trxState from " << m_trxState << " to " << state);
+  // this method always overrides previous state setting attempts
+  if (!m_setTRXState.IsExpired ())
+    {
+      if (m_trxStatePending == state)
+        {
+          // Simply wait for the ongoing state switch.
+          return;
+        }
+      else
+        {
+          NS_LOG_DEBUG ("Cancel m_setTRXState");
+          // Keep the transceiver state as the old state before the switching attempt.
+          m_setTRXState.Cancel ();
+        }
+    }
+  if (m_trxStatePending != IEEE_802_15_4_PHY_IDLE)
+    {
+      m_trxStatePending = IEEE_802_15_4_PHY_IDLE;
+    }
+
+  if (state == m_trxState)
+    {
+      if (!m_plmeSetTRXStateConfirmCallback.IsNull ())
+        {
+          m_plmeSetTRXStateConfirmCallback (state);
+        }
+      return;
+    }
+
+  if ( ((state == IEEE_802_15_4_PHY_RX_ON)
+        || (state == IEEE_802_15_4_PHY_TRX_OFF))
+       && (m_trxState == IEEE_802_15_4_PHY_BUSY_TX) )
+    {
+      NS_LOG_DEBUG ("Phy is busy; setting state pending to " << state);
+      m_trxStatePending = state;
+      return;  // Send PlmeSetTRXStateConfirm later
+    }
+
+  // specification talks about being in RX_ON and having received
+  // a valid SFD.  Here, we are not modelling at that level of
+  // granularity, so we just test for BUSY_RX state (any part of
+  // a packet being actively received)
+  if (state == IEEE_802_15_4_PHY_TRX_OFF)
+    {
+      CancelEd (state);
+
+      if ((m_trxState == IEEE_802_15_4_PHY_BUSY_RX)
+          && (m_currentRxPacket.first) && (!m_currentRxPacket.second))
+        {
+          NS_LOG_DEBUG ("Receiver has valid SFD; defer state change");
+          m_trxStatePending = state;
+          return;  // Send PlmeSetTRXStateConfirm later
+        }
+      else if (m_trxState == IEEE_802_15_4_PHY_RX_ON || m_trxState == IEEE_802_15_4_PHY_TX_ON)
+        {
+          ChangeTrxState (IEEE_802_15_4_PHY_TRX_OFF);
+          if (!m_plmeSetTRXStateConfirmCallback.IsNull ())
+            {
+              m_plmeSetTRXStateConfirmCallback (state);
+            }
+          return;
+        }
+    }
+
+  if (state == IEEE_802_15_4_PHY_TX_ON)
+    {
+      CancelEd (state);
+
+      NS_LOG_DEBUG ("turn on PHY_TX_ON");
+      if ((m_trxState == IEEE_802_15_4_PHY_BUSY_RX) || (m_trxState == IEEE_802_15_4_PHY_RX_ON))
+        {
+          if (m_currentRxPacket.first)
+            {
+              //terminate reception if needed
+              //incomplete reception -- force packet discard
+              NS_LOG_DEBUG ("force TX_ON, terminate reception");
+              m_currentRxPacket.second = true;
+            }
+
+          // If CCA is in progress, cancel CCA and return BUSY.
+          if (!m_ccaRequest.IsExpired ())
+            {
+              m_ccaRequest.Cancel ();
+              if (!m_plmeCcaConfirmCallback.IsNull ())
+                {
+                  m_plmeCcaConfirmCallback (IEEE_802_15_4_PHY_BUSY);
+                }
+            }
+
+          m_trxStatePending = IEEE_802_15_4_PHY_TX_ON;
+
+          // Delay for turnaround time
+          // TODO: Does it also take aTurnaroundTime to switch the transceiver state,
+          //       even when the receiver is not busy? (6.9.2)
+          Time setTime = Seconds ( (double) aTurnaroundTime / GetDataOrSymbolRate (false));
+          m_setTRXState = Simulator::Schedule (setTime, &LrWpanPhy::EndSetTRXState, this);
+          return;
+        }
+      else if (m_trxState == IEEE_802_15_4_PHY_BUSY_TX || m_trxState == IEEE_802_15_4_PHY_TX_ON)
+        {
+          // We do NOT change the transceiver state here. We only report that
+          // the transceiver is already in TX_ON state.
+          if (!m_plmeSetTRXStateConfirmCallback.IsNull ())
+            {
+              m_plmeSetTRXStateConfirmCallback (IEEE_802_15_4_PHY_TX_ON);
+            }
+          return;
+        }
+      else if (m_trxState == IEEE_802_15_4_PHY_TRX_OFF)
+        {
+          ChangeTrxState (IEEE_802_15_4_PHY_TX_ON);
+          if (!m_plmeSetTRXStateConfirmCallback.IsNull ())
+            {
+              m_plmeSetTRXStateConfirmCallback (IEEE_802_15_4_PHY_TX_ON);
+            }
+          return;
+        }
+    }
+
+  if (state == IEEE_802_15_4_PHY_FORCE_TRX_OFF)
+    {
+      if (m_trxState == IEEE_802_15_4_PHY_TRX_OFF)
+        {
+          NS_LOG_DEBUG ("force TRX_OFF, was already off");
+        }
+      else
+        {
+          NS_LOG_DEBUG ("force TRX_OFF, SUCCESS");
+          if (m_currentRxPacket.first)
+            {   //terminate reception if needed
+                //incomplete reception -- force packet discard
+              NS_LOG_DEBUG ("force TRX_OFF, terminate reception");
+              m_currentRxPacket.second = true;
+            }
+          if (m_trxState == IEEE_802_15_4_PHY_BUSY_TX)
+            {
+              NS_LOG_DEBUG ("force TRX_OFF, terminate transmission");
+              m_currentTxPacket.second = true;
+            }
+          ChangeTrxState (IEEE_802_15_4_PHY_TRX_OFF);
+          // Clear any other state
+          m_trxStatePending = IEEE_802_15_4_PHY_IDLE;
+        }
+      if (!m_plmeSetTRXStateConfirmCallback.IsNull ())
+        {
+          m_plmeSetTRXStateConfirmCallback (IEEE_802_15_4_PHY_SUCCESS);
+        }
+      return;
+    }
+
+  if (state == IEEE_802_15_4_PHY_RX_ON)
+    {
+      if (m_trxState == IEEE_802_15_4_PHY_TX_ON || m_trxState == IEEE_802_15_4_PHY_TRX_OFF)
+        {
+          // Turnaround delay
+          // TODO: Does it really take aTurnaroundTime to switch the transceiver state,
+          //       even when the transmitter is not busy? (6.9.1)
+          m_trxStatePending = IEEE_802_15_4_PHY_RX_ON;
+
+          Time setTime = Seconds ( (double) aTurnaroundTime / GetDataOrSymbolRate (false));
+          m_setTRXState = Simulator::Schedule (setTime, &LrWpanPhy::EndSetTRXState, this);
+          return;
+        }
+      else if (m_trxState == IEEE_802_15_4_PHY_BUSY_RX)
+        {
+          if (!m_plmeSetTRXStateConfirmCallback.IsNull ())
+            {
+              m_plmeSetTRXStateConfirmCallback (IEEE_802_15_4_PHY_RX_ON);
+            }
+          return;
+        }
+    }
+
+  NS_FATAL_ERROR ("Unexpected transition from state " << m_trxState << " to state " << state);
+}
+
+bool
+LrWpanPhy::ChannelSupported (uint8_t channel)
+{
+  NS_LOG_FUNCTION (this << channel);
+  bool retValue = false;
+
+  for (uint32_t i = 0; i < 32; i++)
+    {
+      if ((m_phyPIBAttributes.phyChannelsSupported[i] & (1 << channel)) != 0)
+        {
+          retValue = true;
+          break;
+        }
+    }
+
+  return retValue;
+}
+
+void
+LrWpanPhy::PlmeSetAttributeRequest (LrWpanPibAttributeIdentifier id,
+                                    LrWpanPhyPibAttributes* attribute)
+{
+  NS_LOG_FUNCTION (this << id << attribute);
+  NS_ASSERT (attribute);
+  LrWpanPhyEnumeration status = IEEE_802_15_4_PHY_SUCCESS;
+
+  switch (id)
+    {
+    case phyCurrentChannel:
+      {
+        if (!ChannelSupported (attribute->phyCurrentChannel))
+          {
+            status = IEEE_802_15_4_PHY_INVALID_PARAMETER;
+          }
+        if (m_phyPIBAttributes.phyCurrentChannel != attribute->phyCurrentChannel)
+          {
+            // Cancel a pending tranceiver state change.
+            // Switch off the transceiver.
+            // TODO: Is switching off the transceiver the right choice?
+            m_trxState = IEEE_802_15_4_PHY_TRX_OFF;
+            if (m_trxStatePending != IEEE_802_15_4_PHY_IDLE)
+              {
+                m_trxStatePending = IEEE_802_15_4_PHY_IDLE;
+                m_setTRXState.Cancel ();
+                if (!m_plmeSetTRXStateConfirmCallback.IsNull ())
+                  {
+                    m_plmeSetTRXStateConfirmCallback (IEEE_802_15_4_PHY_TRX_OFF);
+                  }
+              }
+
+            // Any packet in transmission or reception will be corrupted.
+            if (m_currentRxPacket.first)
+              {
+                m_currentRxPacket.second = true;
+              }
+            if (PhyIsBusy ())
+              {
+                m_currentTxPacket.second = true;
+                m_pdDataRequest.Cancel ();
+                m_currentTxPacket.first = 0;
+                if (!m_pdDataConfirmCallback.IsNull ())
+                  {
+                    m_pdDataConfirmCallback (IEEE_802_15_4_PHY_TRX_OFF);
+                  }
+              }
+            m_phyPIBAttributes.phyCurrentChannel = attribute->phyCurrentChannel;
+          }
+        break;
+      }
+    case phyChannelsSupported:
+      {   // only the first element is considered in the array
+        if ((attribute->phyChannelsSupported[0] & 0xf8000000) != 0)
+          {    //5 MSBs reserved
+            status = IEEE_802_15_4_PHY_INVALID_PARAMETER;
+          }
+        else
+          {
+            m_phyPIBAttributes.phyChannelsSupported[0] = attribute->phyChannelsSupported[0];
+          }
+        break;
+      }
+    case phyTransmitPower:
+      {
+        if (attribute->phyTransmitPower > 0xbf)
+          {
+            status = IEEE_802_15_4_PHY_INVALID_PARAMETER;
+          }
+        else
+          {
+            m_phyPIBAttributes.phyTransmitPower = attribute->phyTransmitPower;
+            LrWpanSpectrumValueHelper psdHelper;
+            m_txPsd = psdHelper.CreateTxPowerSpectralDensity (m_phyPIBAttributes.phyTransmitPower, m_phyPIBAttributes.phyCurrentChannel);
+          }
+        break;
+      }
+    case phyCCAMode:
+      {
+        if ((attribute->phyCCAMode < 1) || (attribute->phyCCAMode > 3))
+          {
+            status = IEEE_802_15_4_PHY_INVALID_PARAMETER;
+          }
+        else
+          {
+            m_phyPIBAttributes.phyCCAMode = attribute->phyCCAMode;
+          }
+        break;
+      }
+    default:
+      {
+        status = IEEE_802_15_4_PHY_UNSUPPORTED_ATTRIBUTE;
+        break;
+      }
+    }
+
+  if (!m_plmeSetAttributeConfirmCallback.IsNull ())
+    {
+      m_plmeSetAttributeConfirmCallback (status, id);
+    }
+}
+
+void
+LrWpanPhy::SetPdDataIndicationCallback (PdDataIndicationCallback c)
+{
+  NS_LOG_FUNCTION (this);
+  m_pdDataIndicationCallback = c;
+}
+
+void
+LrWpanPhy::SetPdDataConfirmCallback (PdDataConfirmCallback c)
+{
+  NS_LOG_FUNCTION (this);
+  m_pdDataConfirmCallback = c;
+}
+
+void
+LrWpanPhy::SetPlmeCcaConfirmCallback (PlmeCcaConfirmCallback c)
+{
+  NS_LOG_FUNCTION (this);
+  m_plmeCcaConfirmCallback = c;
+}
+
+void
+LrWpanPhy::SetPlmeEdConfirmCallback (PlmeEdConfirmCallback c)
+{
+  NS_LOG_FUNCTION (this);
+  m_plmeEdConfirmCallback = c;
+}
+
+void
+LrWpanPhy::SetPlmeGetAttributeConfirmCallback (PlmeGetAttributeConfirmCallback c)
+{
+  NS_LOG_FUNCTION (this);
+  m_plmeGetAttributeConfirmCallback = c;
+}
+
+void
+LrWpanPhy::SetPlmeSetTRXStateConfirmCallback (PlmeSetTRXStateConfirmCallback c)
+{
+  NS_LOG_FUNCTION (this);
+  m_plmeSetTRXStateConfirmCallback = c;
+}
+
+void
+LrWpanPhy::SetPlmeSetAttributeConfirmCallback (PlmeSetAttributeConfirmCallback c)
+{
+  NS_LOG_FUNCTION (this);
+  m_plmeSetAttributeConfirmCallback = c;
+}
+
+void
+LrWpanPhy::ChangeTrxState (LrWpanPhyEnumeration newState)
+{
+  NS_LOG_LOGIC (this << " state: " << m_trxState << " -> " << newState);
+  m_trxStateLogger (Simulator::Now (), m_trxState, newState);
+  m_trxState = newState;
+}
+
+bool
+LrWpanPhy::PhyIsBusy (void) const
+{
+  NS_LOG_FUNCTION (this << m_trxState);
+  return ((m_trxState == IEEE_802_15_4_PHY_BUSY_TX)
+          || (m_trxState == IEEE_802_15_4_PHY_BUSY_RX)
+          || (m_trxState == IEEE_802_15_4_PHY_BUSY));
+}
+
+void
+LrWpanPhy::CancelEd (LrWpanPhyEnumeration state)
+{
+  NS_LOG_FUNCTION (this);
+  NS_ASSERT (state == IEEE_802_15_4_PHY_TRX_OFF || state == IEEE_802_15_4_PHY_TX_ON);
+
+  if (!m_edRequest.IsExpired ())
+    {
+      m_edRequest.Cancel ();
+      if (!m_plmeEdConfirmCallback.IsNull ())
+        {
+          m_plmeEdConfirmCallback (state, 0);
+        }
+    }
+}
+
+void
+LrWpanPhy::EndEd (void)
+{
+  NS_LOG_FUNCTION (this);
+
+  m_edPower.averagePower += LrWpanSpectrumValueHelper::TotalAvgPower (m_signal->GetSignalPsd ()) * (Simulator::Now () - m_edPower.lastUpdate).GetTimeStep () / m_edPower.measurementLength.GetTimeStep ();
+
+  uint8_t energyLevel;
+
+  // Per IEEE802.15.4-2006 sec 6.9.7
+  double ratio = m_edPower.averagePower / m_rxSensitivity;
+  ratio = 10.0 * log10 (ratio);
+  if (ratio <= 10.0)
+    {  // less than 10 dB
+      energyLevel = 0;
+    }
+  else if (ratio >= 40.0)
+    { // less than 40 dB
+      energyLevel = 255;
+    }
+  else
+    {
+      // in-between with linear increase per sec 6.9.7
+      energyLevel = static_cast<uint8_t> (((ratio - 10.0) / 30.0) * 255.0);
+    }
+
+  if (!m_plmeEdConfirmCallback.IsNull ())
+    {
+      m_plmeEdConfirmCallback (IEEE_802_15_4_PHY_SUCCESS, energyLevel);
+    }
+}
+
+void
+LrWpanPhy::EndCca (void)
+{
+  NS_LOG_FUNCTION (this);
+  LrWpanPhyEnumeration sensedChannelState = IEEE_802_15_4_PHY_UNSPECIFIED;
+
+  // Update peak power.
+  double power = LrWpanSpectrumValueHelper::TotalAvgPower (m_signal->GetSignalPsd ());
+  if (m_ccaPeakPower < power)
+    {
+      m_ccaPeakPower = power;
+    }
+
+  if (PhyIsBusy ())
+    {
+      sensedChannelState = IEEE_802_15_4_PHY_BUSY;
+    }
+  else if (m_phyPIBAttributes.phyCCAMode == 1)
+    { //sec 6.9.9 ED detection
+      // -- ED threshold at most 10 dB above receiver sensitivity.
+      if (10 * log10 (m_ccaPeakPower / m_rxSensitivity) >= 10.0)
+        {
+          sensedChannelState = IEEE_802_15_4_PHY_BUSY;
+        }
+      else
+        {
+          sensedChannelState = IEEE_802_15_4_PHY_IDLE;
+        }
+    }
+  else if (m_phyPIBAttributes.phyCCAMode == 2)
+    {
+      //sec 6.9.9 carrier sense only
+      if (m_trxState == IEEE_802_15_4_PHY_BUSY_RX)
+        {
+          // We currently do not model PPDU reception in detail. Instead we model
+          // packet reception starting with the first bit of the preamble.
+          // Therefore, this code will never be reached, as PhyIsBusy() would
+          // already lead to a channel busy condition.
+          // TODO: Change this, if we also model preamble and SFD detection.
+          sensedChannelState = IEEE_802_15_4_PHY_BUSY;
+        }
+      else
+        {
+          sensedChannelState = IEEE_802_15_4_PHY_IDLE;
+        }
+    }
+  else if (m_phyPIBAttributes.phyCCAMode == 3)
+    { //sect 6.9.9 both
+      if ((10 * log10 (m_ccaPeakPower / m_rxSensitivity) >= 10.0)
+          && m_trxState == IEEE_802_15_4_PHY_BUSY_RX)
+        {
+          // Again, this code will never be reached, if we are already receiving
+          // a packet, as PhyIsBusy() would already lead to a channel busy condition.
+          // TODO: Change this, if we also model preamble and SFD detection.
+          sensedChannelState = IEEE_802_15_4_PHY_BUSY;
+        }
+      else
+        {
+          sensedChannelState = IEEE_802_15_4_PHY_IDLE;
+        }
+    }
+  else
+    {
+      NS_ASSERT_MSG (false, "Invalid CCA mode");
+    }
+
+  NS_LOG_LOGIC (this << "channel sensed state: " << sensedChannelState);
+
+  if (!m_plmeCcaConfirmCallback.IsNull ())
+    {
+      m_plmeCcaConfirmCallback (sensedChannelState);
+    }
+}
+
+void
+LrWpanPhy::EndSetTRXState (void)
+{
+  NS_LOG_FUNCTION (this);
+
+  NS_ABORT_IF ( (m_trxStatePending != IEEE_802_15_4_PHY_RX_ON) && (m_trxStatePending != IEEE_802_15_4_PHY_TX_ON) );
+  ChangeTrxState (m_trxStatePending);
+  m_trxStatePending = IEEE_802_15_4_PHY_IDLE;
+
+  if (!m_plmeSetTRXStateConfirmCallback.IsNull ())
+    {
+      m_plmeSetTRXStateConfirmCallback (m_trxState);
+    }
+}
+
+void
+LrWpanPhy::EndTx (void)
+{
+  NS_LOG_FUNCTION (this);
+
+  NS_ABORT_IF ( (m_trxState != IEEE_802_15_4_PHY_BUSY_TX) && (m_trxState != IEEE_802_15_4_PHY_TRX_OFF));
+
+  if (m_currentTxPacket.second == false)
+    {
+      NS_LOG_DEBUG ("Packet successfully transmitted");
+      m_phyTxEndTrace (m_currentTxPacket.first);
+      if (!m_pdDataConfirmCallback.IsNull ())
+        {
+          m_pdDataConfirmCallback (IEEE_802_15_4_PHY_SUCCESS);
+        }
+    }
+  else
+    {
+      NS_LOG_DEBUG ("Packet transmission aborted");
+      m_phyTxDropTrace (m_currentTxPacket.first);
+      if (!m_pdDataConfirmCallback.IsNull ())
+        {
+          // See if this is ever entered in another state
+          NS_ASSERT (m_trxState ==  IEEE_802_15_4_PHY_TRX_OFF);
+          m_pdDataConfirmCallback (m_trxState);
+        }
+    }
+  m_currentTxPacket.first = 0;
+  m_currentTxPacket.second = false;
+
+
+  // We may be waiting to apply a pending state change.
+  if (m_trxStatePending != IEEE_802_15_4_PHY_IDLE)
+    {
+      // Only change the state immediately, if the transceiver is not already
+      // switching the state.
+      if (!m_setTRXState.IsRunning ())
+        {
+          NS_LOG_LOGIC ("Apply pending state change to " << m_trxStatePending);
+          ChangeTrxState (m_trxStatePending);
+          m_trxStatePending = IEEE_802_15_4_PHY_IDLE;
+          if (!m_plmeSetTRXStateConfirmCallback.IsNull ())
+            {
+              m_plmeSetTRXStateConfirmCallback (IEEE_802_15_4_PHY_SUCCESS);
+            }
+        }
+    }
+  else
+    {
+      if (m_trxState != IEEE_802_15_4_PHY_TRX_OFF)
+        {
+          ChangeTrxState (IEEE_802_15_4_PHY_TX_ON);
+        }
+    }
+}
+
+Time
+LrWpanPhy::CalculateTxTime (Ptr<const Packet> packet)
+{
+  NS_LOG_FUNCTION (this << packet);
+
+  bool isData = true;
+  Time txTime = GetPpduHeaderTxTime ();
+
+  txTime += Seconds (packet->GetSize () * 8.0 / GetDataOrSymbolRate (isData));
+
+  return txTime;
+}
+
+double
+LrWpanPhy::GetDataOrSymbolRate (bool isData)
+{
+  NS_LOG_FUNCTION (this << isData);
+
+  double rate = 0.0;
+
+  NS_ASSERT (m_phyOption < IEEE_802_15_4_INVALID_PHY_OPTION);
+
+  if (isData)
+    {
+      rate = dataSymbolRates [m_phyOption].bitRate;
+    }
+  else
+    {
+      rate = dataSymbolRates [m_phyOption].symbolRate;
+    }
+
+  return (rate * 1000.0);
+}
+
+Time
+LrWpanPhy::GetPpduHeaderTxTime (void)
+{
+  NS_LOG_FUNCTION (this);
+
+  bool isData = false;
+  double totalPpduHdrSymbols;
+
+  NS_ASSERT (m_phyOption < IEEE_802_15_4_INVALID_PHY_OPTION);
+
+  totalPpduHdrSymbols = ppduHeaderSymbolNumbers[m_phyOption].shrPreamble
+    + ppduHeaderSymbolNumbers[m_phyOption].shrSfd
+    + ppduHeaderSymbolNumbers[m_phyOption].phr;
+
+  return Seconds (totalPpduHdrSymbols / GetDataOrSymbolRate (isData));
+}
+
+// IEEE802.15.4-2006 Table 2 in section 6.1.2
+void
+LrWpanPhy::SetMyPhyOption (void)
+{
+  NS_LOG_FUNCTION (this);
+
+  m_phyOption = IEEE_802_15_4_INVALID_PHY_OPTION;
+
+  if (m_phyPIBAttributes.phyCurrentPage == 0)
+    {
+      if (m_phyPIBAttributes.phyCurrentChannel == 0)
+        {  // 868 MHz BPSK
+          m_phyOption = IEEE_802_15_4_868MHZ_BPSK;
+        }
+      else if (m_phyPIBAttributes.phyCurrentChannel <= 10)
+        {  // 915 MHz BPSK
+          m_phyOption = IEEE_802_15_4_915MHZ_BPSK;
+        }
+      else if (m_phyPIBAttributes.phyCurrentChannel <= 26)
+        {  // 2.4 GHz MHz O-QPSK
+          m_phyOption = IEEE_802_15_4_2_4GHZ_OQPSK;
+        }
+    }
+  else if (m_phyPIBAttributes.phyCurrentPage == 1)
+    {
+      if (m_phyPIBAttributes.phyCurrentChannel == 0)
+        {  // 868 MHz ASK
+          m_phyOption = IEEE_802_15_4_868MHZ_ASK;
+        }
+      else if (m_phyPIBAttributes.phyCurrentChannel <= 10)
+        {  // 915 MHz ASK
+          m_phyOption = IEEE_802_15_4_915MHZ_ASK;
+        }
+    }
+  else if (m_phyPIBAttributes.phyCurrentPage == 2)
+    {
+      if (m_phyPIBAttributes.phyCurrentChannel == 0)
+        {  // 868 MHz O-QPSK
+          m_phyOption = IEEE_802_15_4_868MHZ_OQPSK;
+        }
+      else if (m_phyPIBAttributes.phyCurrentChannel <= 10)
+        {  // 915 MHz O-QPSK
+          m_phyOption = IEEE_802_15_4_915MHZ_OQPSK;
+        }
+    }
+}
+
+LrWpanPhyOption
+LrWpanPhy::GetMyPhyOption (void)
+{
+  NS_LOG_FUNCTION (this);
+  return m_phyOption;
+}
+
+void
+LrWpanPhy::SetTxPowerSpectralDensity (Ptr<SpectrumValue> txPsd)
+{
+  NS_LOG_FUNCTION (this << txPsd);
+  NS_ASSERT (txPsd);
+  m_txPsd = txPsd;
+  NS_LOG_INFO ("\t computed tx_psd: " << *txPsd << "\t stored tx_psd: " << *m_txPsd);
+}
+
+void
+LrWpanPhy::SetNoisePowerSpectralDensity (Ptr<const SpectrumValue> noisePsd)
+{
+  NS_LOG_FUNCTION (this << noisePsd);
+  NS_LOG_INFO ("\t computed noise_psd: " << *noisePsd );
+  NS_ASSERT (noisePsd);
+  m_noise = noisePsd;
+}
+
+Ptr<const SpectrumValue>
+LrWpanPhy::GetNoisePowerSpectralDensity (void)
+{
+  NS_LOG_FUNCTION (this);
+  return m_noise;
+}
+
+void
+LrWpanPhy::SetErrorModel (Ptr<LrWpanErrorModel> e)
+{
+  NS_LOG_FUNCTION (this << e);
+  NS_ASSERT (e);
+  m_errorModel = e;
+}
+
+Ptr<LrWpanErrorModel>
+LrWpanPhy::GetErrorModel (void) const
+{
+  NS_LOG_FUNCTION (this);
+  return m_errorModel;
+}
+
+uint64_t
+LrWpanPhy::GetPhySHRDuration (void) const
+{
+  NS_LOG_FUNCTION (this);
+  NS_ASSERT (m_phyOption < IEEE_802_15_4_INVALID_PHY_OPTION);
+
+  return ppduHeaderSymbolNumbers[m_phyOption].shrPreamble
+         + ppduHeaderSymbolNumbers[m_phyOption].shrSfd;
+}
+
+double
+LrWpanPhy::GetPhySymbolsPerOctet (void) const
+{
+  NS_LOG_FUNCTION (this);
+  NS_ASSERT (m_phyOption < IEEE_802_15_4_INVALID_PHY_OPTION);
+
+  return dataSymbolRates [m_phyOption].symbolRate / (dataSymbolRates [m_phyOption].bitRate / 8);
+}
+
+int64_t
+LrWpanPhy::AssignStreams (int64_t stream)
+{
+  NS_LOG_FUNCTION (this);
+  m_random->SetStream (stream);
+  return 1;
+}
+
+} // namespace ns3
diff -Naur ns-3.19/src/lr-wpan/model/lr-wpan-phy.h ns-3.20/src/lr-wpan/model/lr-wpan-phy.h
--- ns-3.19/src/lr-wpan/model/lr-wpan-phy.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.20/src/lr-wpan/model/lr-wpan-phy.h	2014-06-17 10:33:13.907995853 -0700
@@ -0,0 +1,784 @@
+/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2011 The Boeing Company
+ *
+ * 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:
+ *  Gary Pei <guangyu.pei@boeing.com>
+ *  Sascha Alexander Jopen <jopen@cs.uni-bonn.de>
+ */
+#ifndef LR_WPAN_PHY_H
+#define LR_WPAN_PHY_H
+
+#include "lr-wpan-interference-helper.h"
+
+#include <ns3/spectrum-phy.h>
+#include <ns3/traced-callback.h>
+#include <ns3/event-id.h>
+
+namespace ns3 {
+
+class Packet;
+class SpectrumValue;
+class LrWpanErrorModel;
+struct LrWpanSpectrumSignalParameters;
+class MobilityModel;
+class SpectrumChannel;
+class SpectrumModel;
+class AntennaModel;
+class NetDevice;
+class UniformRandomVariable;
+
+/**
+ * Helper structure to manage the power measurement during ED.
+ */
+typedef struct
+{
+  double averagePower;
+  Time lastUpdate;
+  Time measurementLength;
+} LrWpanEdPower;
+
+/**
+ * IEEE802.15.4-2006 Table 1 and 2 in section 6.1.1 and 6.1.2
+ */
+typedef  struct
+{
+  double bitRate;
+  double symbolRate;
+} LrWpanPhyDataAndSymbolRates;
+
+/**
+ * IEEE802.15.4-2006 Figure 16, Table 19 and 20 in section 6.3
+ * this data structure provides number of symbols for the PPDU headers: SHR and PHR
+ */
+typedef  struct
+{
+  double shrPreamble;
+  double shrSfd;
+  double phr;
+} LrWpanPhyPpduHeaderSymbolNumber;
+
+/**
+ * This Phy option will be used to index various Tables in IEEE802.15.4-2006
+ */
+typedef enum
+{
+  IEEE_802_15_4_868MHZ_BPSK         = 0,
+  IEEE_802_15_4_915MHZ_BPSK         = 1,
+  IEEE_802_15_4_868MHZ_ASK          = 2,
+  IEEE_802_15_4_915MHZ_ASK          = 3,
+  IEEE_802_15_4_868MHZ_OQPSK        = 4,
+  IEEE_802_15_4_915MHZ_OQPSK        = 5,
+  IEEE_802_15_4_2_4GHZ_OQPSK        = 6,
+  IEEE_802_15_4_INVALID_PHY_OPTION  = 7
+} LrWpanPhyOption;
+
+/**
+ * IEEE802.15.4-2006 PHY Emumerations Table 18
+ * in section 6.2.3
+ */
+typedef enum
+{
+  IEEE_802_15_4_PHY_BUSY  = 0x00,
+  IEEE_802_15_4_PHY_BUSY_RX = 0x01,
+  IEEE_802_15_4_PHY_BUSY_TX = 0x02,
+  IEEE_802_15_4_PHY_FORCE_TRX_OFF = 0x03,
+  IEEE_802_15_4_PHY_IDLE = 0x04,
+  IEEE_802_15_4_PHY_INVALID_PARAMETER = 0x05,
+  IEEE_802_15_4_PHY_RX_ON = 0x06,
+  IEEE_802_15_4_PHY_SUCCESS = 0x07,
+  IEEE_802_15_4_PHY_TRX_OFF = 0x08,
+  IEEE_802_15_4_PHY_TX_ON = 0x09,
+  IEEE_802_15_4_PHY_UNSUPPORTED_ATTRIBUTE = 0xa,
+  IEEE_802_15_4_PHY_READ_ONLY = 0xb,
+  IEEE_802_15_4_PHY_UNSPECIFIED = 0xc // all cases not covered by ieee802.15.4
+} LrWpanPhyEnumeration;
+
+/**
+ * IEEE802.15.4-2006 PHY PIB Attribute Identifiers Table 23 in section 6.4.2
+ */
+typedef enum
+{
+  phyCurrentChannel = 0x00,
+  phyChannelsSupported = 0x01,
+  phyTransmitPower = 0x02,
+  phyCCAMode = 0x03,
+  phyCurrentPage = 0x04,
+  phyMaxFrameDuration = 0x05,
+  phySHRDuration = 0x06,
+  phySymbolsPerOctet = 0x07
+} LrWpanPibAttributeIdentifier;
+
+/**
+ * IEEE802.15.4-2006 PHY PIB Attributes Table 23 in section 6.4.2
+ */
+typedef struct
+{
+  uint8_t phyCurrentChannel;
+  uint32_t phyChannelsSupported[32];
+  uint8_t phyTransmitPower;
+  uint8_t phyCCAMode;
+  uint32_t phyCurrentPage;
+  uint32_t phyMaxFrameDuration;
+  uint32_t phySHRDuration;
+  double phySymbolsPerOctet;
+} LrWpanPhyPibAttributes;
+
+/**
+ * This method implements the PD SAP: PdDataIndication
+ *
+ *  @param psduLength number of bytes in the PSDU
+ *  @param p the packet to be transmitted
+ *  @param lqi Link quality (LQI) value measured during reception of the PPDU
+ */
+typedef Callback< void, uint32_t, Ptr<Packet>, uint8_t > PdDataIndicationCallback;
+
+/**
+ * This method implements the PD SAP: PdDataConfirm
+ *
+ * @param status the status to be transmitted
+ */
+typedef Callback< void, LrWpanPhyEnumeration > PdDataConfirmCallback;
+
+/**
+ * This method implements the PD SAP: PlmeCcaConfirm
+ *
+ * @param status the status of CCA
+ */
+typedef Callback< void, LrWpanPhyEnumeration > PlmeCcaConfirmCallback;
+
+/**
+ * This method implements the PD SAP: PlmeEdConfirm
+ *
+ * @param status the status of ED
+ * @param energyLevel the energy level of ED
+ */
+typedef Callback< void, LrWpanPhyEnumeration,uint8_t > PlmeEdConfirmCallback;
+
+/**
+ * This method implements the PD SAP: PlmeGetAttributeConfirm
+ *
+ * @param status the status of PlmeGetAttributeRequest
+ * @param id the identifier of attribute
+ * @param attribute the pointer to attribute struct
+ */
+typedef Callback< void, LrWpanPhyEnumeration,
+                  LrWpanPibAttributeIdentifier,
+                  LrWpanPhyPibAttributes* > PlmeGetAttributeConfirmCallback;
+
+/**
+ * This method implements the PD SAP: PlmeSetTRXStateConfirm
+ *
+ * @param status the status of PlmeSetTRXStateRequest
+ */
+typedef Callback< void, LrWpanPhyEnumeration > PlmeSetTRXStateConfirmCallback;
+
+/**
+ * This method implements the PD SAP: PlmeSetAttributeConfirm
+ *
+ * @param status the status of PlmeSetAttributeRequest
+ * @param id the identifier of attribute
+ */
+typedef Callback< void, LrWpanPhyEnumeration,
+                  LrWpanPibAttributeIdentifier > PlmeSetAttributeConfirmCallback;
+
+/**
+ * \ingroup lr-wpan
+ *
+ * Make LrWpanPhy a SpectrumPhy so we can enable the eventual modeling of
+ * device interference
+ */
+class LrWpanPhy : public SpectrumPhy
+{
+
+public:
+  /**
+   * Get the type ID.
+   *
+   * \return the object TypeId
+   */
+  static TypeId GetTypeId (void);
+
+  /**
+   * The maximum packet size accepted by the PHY.
+   * See Table 22 in section 6.4.1 of IEEE 802.15.4-2006
+   */
+  static const uint32_t aMaxPhyPacketSize;
+
+  /**
+   * The turnaround time for switching the transceiver from RX to TX or vice
+   * versa.
+   * See Table 22 in section 6.4.1 of IEEE 802.15.4-2006
+   */
+  static const uint32_t aTurnaroundTime;
+
+  /**
+   * Default constructor.
+   */
+  LrWpanPhy (void);
+  virtual ~LrWpanPhy (void);
+
+  // inherited from SpectrumPhy
+  void SetMobility (Ptr<MobilityModel> m);
+  Ptr<MobilityModel> GetMobility (void);
+  void SetChannel (Ptr<SpectrumChannel> c);
+
+  /**
+   * Get the currently attached channel.
+   *
+   * \return the channel
+   */
+  Ptr<SpectrumChannel> GetChannel (void);
+  void SetDevice (Ptr<NetDevice> d);
+  Ptr<NetDevice> GetDevice (void);
+
+  /**
+   * Set the attached antenna.
+   *
+   * \param a the antenna
+   */
+  void SetAntenna (Ptr<AntennaModel> a);
+  Ptr<AntennaModel> GetRxAntenna (void);
+  virtual Ptr<const SpectrumModel> GetRxSpectrumModel (void) const;
+
+  /**
+   * Set the Power Spectral Density of outgoing signals in W/Hz.
+   *
+   * @param txPsd the Power Spectral Density value
+   */
+  void SetTxPowerSpectralDensity (Ptr<SpectrumValue> txPsd);
+
+  /**
+   * Set the noise power spectral density.
+   *
+   * @param noisePsd the Noise Power Spectral Density in power units
+   * (Watt, Pascal...) per Hz.
+   */
+  void SetNoisePowerSpectralDensity (Ptr<const SpectrumValue> noisePsd);
+
+  /**
+   * Get the noise power spectral density.
+   *
+   * @return the Noise Power Spectral Density
+   */
+  Ptr<const SpectrumValue> GetNoisePowerSpectralDensity (void);
+
+  /**
+    * Notify the SpectrumPhy instance of an incoming waveform.
+    *
+    * @param params the SpectrumSignalParameters associated with the incoming waveform
+    */
+  virtual void StartRx (Ptr<SpectrumSignalParameters> params);
+
+  /**
+   *  IEEE 802.15.4-2006 section 6.2.1.1
+   *  PD-DATA.request
+   *  Request to transfer MPDU from MAC (transmitting)
+   *  @param psduLength number of bytes in the PSDU
+   *  @param p the packet to be transmitted
+   */
+  void PdDataRequest (const uint32_t psduLength, Ptr<Packet> p);
+
+  /**
+   *  IEEE 802.15.4-2006 section 6.2.2.1
+   *  PLME-CCA.request
+   *  Perform a CCA per section 6.9.9
+   */
+  void PlmeCcaRequest (void);
+
+  /**
+   *  IEEE 802.15.4-2006 section 6.2.2.3
+   *  PLME-ED.request
+   *  Perform an ED per section 6.9.7
+   */
+  void PlmeEdRequest (void);
+
+  /**
+   *  IEEE 802.15.4-2006 section 6.2.2.5
+   *  PLME-GET.request
+   *  Get attributes per definition from Table 23 in section 6.4.2
+   *  @param id the attributed identifier
+   */
+  void PlmeGetAttributeRequest (LrWpanPibAttributeIdentifier id);
+
+  /**
+   *  IEEE 802.15.4-2006 section 6.2.2.7
+   *  PLME-SET-TRX-STATE.request
+   *  Set PHY state
+   *  @param state in RX_ON,TRX_OFF,FORCE_TRX_OFF,TX_ON
+   */
+  void PlmeSetTRXStateRequest (LrWpanPhyEnumeration state);
+
+  /**
+   *  IEEE 802.15.4-2006 section 6.2.2.9
+   *  PLME-SET.request
+   *  Set attributes per definition from Table 23 in section 6.4.2
+   *  @param id the attributed identifier
+   *  @param attribute the attribute value
+   */
+  void PlmeSetAttributeRequest (LrWpanPibAttributeIdentifier id, LrWpanPhyPibAttributes* attribute);
+
+  /**
+   * set the callback for the end of a RX, as part of the
+   * interconnections betweenthe PHY and the MAC. The callback
+   * implements PD Indication SAP.
+   * @param c the callback
+   */
+  void SetPdDataIndicationCallback (PdDataIndicationCallback c);
+
+  /**
+   * set the callback for the end of a TX, as part of the
+   * interconnections betweenthe PHY and the MAC. The callback
+   * implements PD SAP.
+   * @param c the callback
+   */
+  void SetPdDataConfirmCallback (PdDataConfirmCallback c);
+
+  /**
+   * set the callback for the end of a CCA, as part of the
+   * interconnections betweenthe PHY and the MAC. The callback
+   * implement PLME CCA confirm SAP
+   * @param c the callback
+   */
+  void SetPlmeCcaConfirmCallback (PlmeCcaConfirmCallback c);
+
+  /**
+   * set the callback for the end of an ED, as part of the
+   * interconnections betweenthe PHY and the MAC. The callback
+   * implement PLME ED confirm SAP
+   * @param c the callback
+   */
+  void SetPlmeEdConfirmCallback (PlmeEdConfirmCallback c);
+
+  /**
+   * set the callback for the end of an GetAttribute, as part of the
+   * interconnections betweenthe PHY and the MAC. The callback
+   * implement PLME GetAttribute confirm SAP
+   * @param c the callback
+   */
+  void SetPlmeGetAttributeConfirmCallback (PlmeGetAttributeConfirmCallback c);
+
+  /**
+   * set the callback for the end of an SetTRXState, as part of the
+   * interconnections betweenthe PHY and the MAC. The callback
+   * implement PLME SetTRXState confirm SAP
+   * @param c the callback
+   */
+  void SetPlmeSetTRXStateConfirmCallback (PlmeSetTRXStateConfirmCallback c);
+
+  /**
+   * set the callback for the end of an SetAttribute, as part of the
+   * interconnections betweenthe PHY and the MAC. The callback
+   * implement PLME SetAttribute confirm SAP
+   * @param c the callback
+   */
+  void SetPlmeSetAttributeConfirmCallback (PlmeSetAttributeConfirmCallback c);
+
+  /**
+   * implement PLME SetAttribute confirm SAP
+   * @param isData is true for data rate or false for symbol rate
+   * @return the rate value of this PHY
+   */
+  double GetDataOrSymbolRate (bool isData);
+
+  /**
+   * set the error model to use
+   *
+   * @param e pointer to LrWpanErrorModel to use
+   */
+  void SetErrorModel (Ptr<LrWpanErrorModel> e);
+
+  /**
+   * get the error model in use
+   *
+   * @return pointer to LrWpanErrorModel in use
+   */
+  Ptr<LrWpanErrorModel> GetErrorModel (void) const;
+
+  /**
+   * Get the duration of the SHR (preamble and SFD) in symbols, depending on
+   * the currently selected channel.
+   *
+   * \return the SHR duration in symbols
+   */
+  uint64_t GetPhySHRDuration (void) const;
+
+  /**
+   * Get the number of symbols per octet, depending on the currently selected
+   * channel.
+   *
+   * \return the number of symbols per octet
+   */
+  double GetPhySymbolsPerOctet (void) const;
+
+  /**
+   * Assign a fixed random variable stream number to the random variables
+   * used by this model.  Return the number of streams that have been assigned.
+   *
+   * \param stream first stream index to use
+   * \return the number of stream indices assigned by this model
+   */
+  int64_t AssignStreams (int64_t stream);
+
+protected:
+  /**
+   * The data and symbol rates for the different PHY options.
+   * See Table 2 in section 6.1.2 IEEE 802.15.4-2006
+   */
+  static const LrWpanPhyDataAndSymbolRates dataSymbolRates[7];
+  /**
+   * The preamble, SFD, and PHR lengths in symbols for the different PHY options.
+   * See Table 19 and Table 20 in section 6.3 IEEE 802.15.4-2006
+   */
+  static const LrWpanPhyPpduHeaderSymbolNumber ppduHeaderSymbolNumbers[7];
+
+private:
+  /**
+   * The second is true if the first is flagged as error/invalid.
+   */
+  typedef std::pair<Ptr<Packet>, bool>  PacketAndStatus;
+
+  // Inherited from Object.
+  virtual void DoDispose (void);
+
+  /**
+   * Change the PHY state to the given new state, firing the state change trace.
+   *
+   * \param newState the new state
+   */
+  void ChangeTrxState (LrWpanPhyEnumeration newState);
+
+  /**
+   * Configure the PHY option according to the current channel and channel page.
+   * See IEEE 802.15.4-2006, section 6.1.2, Table 2.
+   */
+  void SetMyPhyOption (void);
+
+  /**
+   * Get the currently configured PHY option.
+   * See IEEE 802.15.4-2006, section 6.1.2, Table 2.
+   *
+   * \return the PHY option
+   */
+  LrWpanPhyOption GetMyPhyOption (void);
+
+  /**
+   * Finish the transmission of a frame. This is called at the end of a frame
+   * transmission, applying possibly pending PHY state changes and fireing the
+   * appropriate trace sources and confirm callbacks to the MAC.
+   */
+  void EndTx (void);
+
+  /**
+   * Check if the interference destroys a frame currently received. Called
+   * whenever a change in interference is detected.
+   */
+  void CheckInterference (void);
+
+  /**
+   * Finish the reception of a frame. This is called at the end of a frame
+   * reception, applying possibly pending PHY state changes and fireing the
+   * appropriate trace sources and indication callbacks to the MAC. A frame
+   * destroyed by noise/interference is dropped here, but not during reception.
+   * This method is also called for every packet which only contributes to
+   * interference.
+   *
+   * \param params signal parameters of the packet
+   */
+  void EndRx (Ptr<LrWpanSpectrumSignalParameters> params);
+
+  /**
+   * Cancel an ongoing ED procedure. This is called when the transceiver is
+   * switched off or set to TX mode. This calls the appropiate confirm callback
+   * of the MAC.
+   *
+   * \param state the new state which is the cause for canceling ED
+   */
+  void CancelEd (LrWpanPhyEnumeration state);
+
+  /**
+   * Called at the end of the ED procedure. The average energy detected is
+   * reported to the MAC.
+   */
+  void EndEd (void);
+
+  /**
+   * Called at the end of the CCA. The channel condition (busy or idle) is
+   * reported to the MAC or CSMA/CA.
+   */
+  void EndCca (void);
+
+  /**
+   * Called after applying a deferred transceiver state switch. The result of
+   * the state switch is reported to the MAC.
+   */
+  void EndSetTRXState (void);
+
+  /**
+   * Calculate the time required for sending the given packet, including
+   * preamble, SFD and PHR.
+   *
+   * \param packet the packet for which the transmission time should be calculated
+   * \return the time required for transmitting the packet
+   */
+  Time CalculateTxTime (Ptr<const Packet> packet);
+
+  /**
+   * Calculate the time required for sending the PPDU header, that is the
+   * preamble, SFD and PHR.
+   */
+  Time GetPpduHeaderTxTime (void);
+
+  /**
+   * Check if the given channel is supported by the PHY.
+   *
+   * \param channel the channel to check
+   * \return true, if the channel is supported, false otherwise
+   */
+  bool ChannelSupported (uint8_t channel);
+
+  /**
+   * Check if the PHY is busy, which is the case if the PHY is currently sending
+   * or receiving a frame.
+   *
+   * \return true, if the PHY is busy, false otherwise
+   */
+  bool PhyIsBusy (void) const;
+
+  // Trace sources
+  /**
+   * The trace source fired when a packet begins the transmission process on
+   * the medium.
+   *
+   * \see class CallBackTraceSource
+   */
+  TracedCallback<Ptr<const Packet> > m_phyTxBeginTrace;
+
+  /**
+   * The trace source fired when a packet ends the transmission process on
+   * the medium.
+   *
+   * \see class CallBackTraceSource
+   */
+  TracedCallback<Ptr<const Packet> > m_phyTxEndTrace;
+
+  /**
+   * The trace source fired when the phy layer drops a packet as it tries
+   * to transmit it.
+   *
+   * \see class CallBackTraceSource
+   */
+  TracedCallback<Ptr<const Packet> > m_phyTxDropTrace;
+
+  /**
+   * The trace source fired when a packet begins the reception process from
+   * the medium.
+   *
+   * \see class CallBackTraceSource
+   */
+  TracedCallback<Ptr<const Packet> > m_phyRxBeginTrace;
+
+  /**
+   * The trace source fired when a packet ends the reception process from
+   * the medium.  Second quantity is received SINR.
+   *
+   * \see class CallBackTraceSource
+   */
+  TracedCallback<Ptr<const Packet>, double > m_phyRxEndTrace;
+
+  /**
+   * The trace source fired when the phy layer drops a packet it has received.
+   *
+   * \see class CallBackTraceSource
+   */
+  TracedCallback<Ptr<const Packet> > m_phyRxDropTrace;
+
+  /**
+   * The trace source fired when the phy layer changes the transceiver state.
+   *
+   * \see class CallBackTraceSource
+   */
+  TracedCallback<Time, LrWpanPhyEnumeration, LrWpanPhyEnumeration> m_trxStateLogger;
+
+  /**
+   * The mobility model used by the PHY.
+   */
+  Ptr<MobilityModel> m_mobility;
+
+  /**
+   * The configured net device.
+   */
+  Ptr<NetDevice> m_device;
+
+  /**
+   * The channel attached to this transceiver.
+   */
+  Ptr<SpectrumChannel> m_channel;
+
+  /**
+   * The antenna used by the transceiver.
+   */
+  Ptr<AntennaModel> m_antenna;
+
+  /**
+   * The transmit power spectral density.
+   */
+  Ptr<SpectrumValue> m_txPsd;
+
+  /**
+   * The spectral density for for the noise.
+   */
+  Ptr<const SpectrumValue> m_noise;
+
+  /**
+   * The error model describing the bit and packet error rates.
+   */
+  Ptr<LrWpanErrorModel> m_errorModel;
+  LrWpanPhyPibAttributes m_phyPIBAttributes;
+
+  // State variables
+  /**
+   * The current transceiver state.
+   */
+  LrWpanPhyEnumeration m_trxState;
+
+  /**
+   * The next pending state to applied after the current action of the PHY is
+   * completed.
+   */
+  LrWpanPhyEnumeration m_trxStatePending;
+
+  // Callbacks
+  /**
+   * This callback is used to notify incoming packets to the MAC layer.
+   * See IEEE 802.15.4-2006, section 6.2.1.3.
+   */
+  PdDataIndicationCallback m_pdDataIndicationCallback;
+
+  /**
+   * This callback is used to report packet transmission status to the MAC layer.
+   * See IEEE 802.15.4-2006, section 6.2.1.2.
+   */
+  PdDataConfirmCallback m_pdDataConfirmCallback;
+
+  /**
+   * This callback is used to report CCA status to the MAC or CSMA/CA.
+   * See IEEE 802.15.4-2006, section 6.2.2.2.
+   */
+  PlmeCcaConfirmCallback m_plmeCcaConfirmCallback;
+
+  /**
+   * This callback is used to report ED status to the MAC.
+   * See IEEE 802.15.4-2006, section 6.2.2.4.
+   */
+  PlmeEdConfirmCallback m_plmeEdConfirmCallback;
+
+  /**
+   * This callback is used to report requested attribute values back to the MAC.
+   * See IEEE 802.15.4-2006, section 6.2.2.6.
+   */
+  PlmeGetAttributeConfirmCallback m_plmeGetAttributeConfirmCallback;
+
+  /**
+   * This callback is used to report transceiver state change status to the MAC.
+   * See IEEE 802.15.4-2006, section 6.2.2.8.
+   */
+  PlmeSetTRXStateConfirmCallback m_plmeSetTRXStateConfirmCallback;
+
+  /**
+   * This callback is used to report attribute set results back to the MAC.
+   * See IEEE 802.15.4-2006, section 6.2.2.10.
+   */
+  PlmeSetAttributeConfirmCallback m_plmeSetAttributeConfirmCallback;
+
+  /**
+   * The currently configured PHY type.
+   */
+  LrWpanPhyOption m_phyOption;
+
+  /**
+   * Helper value for tracking the average power during ED.
+   */
+  LrWpanEdPower m_edPower;
+
+  /**
+   * Helper value for the peak power value during CCA.
+   */
+  double m_ccaPeakPower;
+
+  /**
+   * The receiver sensitivity.
+   */
+  double m_rxSensitivity;
+
+  /**
+   * The accumulated signals currently received by the transceiver, including
+   * the signal of a possibly received packet, as well as all signals
+   * considered noise.
+   */
+  Ptr<LrWpanInterferenceHelper> m_signal;
+
+  /**
+   * Timestamp of the last calculation of the PER of a packet currently received.
+   */
+  Time m_rxLastUpdate;
+
+  /**
+   * Statusinformation of the currently received packet. The first parameter
+   * contains the frame, as well the signal power of the frame. The second
+   * parameter is set to false, if the frame is either invalid or destroyed
+   * due to interference.
+   */
+  std::pair<Ptr<LrWpanSpectrumSignalParameters>, bool>  m_currentRxPacket;
+
+  /**
+   * Statusinformation of the currently transmitted packet. The first parameter
+   * contains the frame. The second parameter is set to false, if the frame not
+   * completely transmitted, in the event of a force transceiver switch, for
+   * example.
+   */
+  PacketAndStatus m_currentTxPacket;
+
+  /**
+   * Scheduler event of a currently running CCA request.
+   */
+  EventId m_ccaRequest;
+
+  /**
+   * Scheduler event of a currently running ED request.
+   */
+  EventId m_edRequest;
+
+  /**
+   * Scheduler event of a currently running deferred transceiver state switch.
+   */
+  EventId m_setTRXState;
+
+  /**
+   * Scheduler event of a currently running data transmission request.
+   */
+  EventId m_pdDataRequest;
+
+  /**
+   * Uniform random variable stream.
+   */
+  Ptr<UniformRandomVariable> m_random;
+};
+
+
+} // namespace ns3
+
+#endif /* LR_WPAN_PHY_H */
diff -Naur ns-3.19/src/lr-wpan/model/lr-wpan-spectrum-signal-parameters.cc ns-3.20/src/lr-wpan/model/lr-wpan-spectrum-signal-parameters.cc
--- ns-3.19/src/lr-wpan/model/lr-wpan-spectrum-signal-parameters.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.20/src/lr-wpan/model/lr-wpan-spectrum-signal-parameters.cc	2014-06-17 10:33:13.907995853 -0700
@@ -0,0 +1,48 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2012 The Boeing Company
+ *
+ * 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: Gary Pei <guangyu.pei@boeing.com>
+ */
+#include "lr-wpan-spectrum-signal-parameters.h"
+#include <ns3/log.h>
+#include <ns3/packet-burst.h>
+
+
+NS_LOG_COMPONENT_DEFINE ("LrWpanSpectrumSignalParameters");
+
+namespace ns3 {
+
+LrWpanSpectrumSignalParameters::LrWpanSpectrumSignalParameters (void)
+{
+  NS_LOG_FUNCTION (this);
+}
+
+LrWpanSpectrumSignalParameters::LrWpanSpectrumSignalParameters (const LrWpanSpectrumSignalParameters& p)
+  : SpectrumSignalParameters (p)
+{
+  NS_LOG_FUNCTION (this << &p);
+  packetBurst = p.packetBurst->Copy ();
+}
+
+Ptr<SpectrumSignalParameters>
+LrWpanSpectrumSignalParameters::Copy (void)
+{
+  NS_LOG_FUNCTION (this);
+  return Create<LrWpanSpectrumSignalParameters> (*this);
+}
+
+} // namespace ns3
diff -Naur ns-3.19/src/lr-wpan/model/lr-wpan-spectrum-signal-parameters.h ns-3.20/src/lr-wpan/model/lr-wpan-spectrum-signal-parameters.h
--- ns-3.19/src/lr-wpan/model/lr-wpan-spectrum-signal-parameters.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.20/src/lr-wpan/model/lr-wpan-spectrum-signal-parameters.h	2014-06-17 10:33:13.907995853 -0700
@@ -0,0 +1,61 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2012 The Boeing Company
+ *
+ * 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: Gary Pei <guangyu.pei@boeing.com>
+ */
+
+#ifndef LR_WPAN_SPECTRUM_SIGNAL_PARAMETERS_H
+#define LR_WPAN_SPECTRUM_SIGNAL_PARAMETERS_H
+
+
+#include <ns3/spectrum-signal-parameters.h>
+
+namespace ns3 {
+
+class PacketBurst;
+
+/**
+ * \ingroup lr-wpan
+ *
+ * Signal parameters for LrWpan.
+ */
+struct LrWpanSpectrumSignalParameters : public SpectrumSignalParameters
+{
+
+  // inherited from SpectrumSignalParameters
+  virtual Ptr<SpectrumSignalParameters> Copy (void);
+
+  /**
+   * default constructor
+   */
+  LrWpanSpectrumSignalParameters (void);
+
+  /**
+   * copy constructor
+   */
+  LrWpanSpectrumSignalParameters (const LrWpanSpectrumSignalParameters& p);
+
+  /**
+   * The packet burst being transmitted with this signal
+   */
+  Ptr<PacketBurst> packetBurst;
+};
+
+}  // namespace ns3
+
+
+#endif /* LR_WPAN_SPECTRUM_SIGNAL_PARAMETERS_H */
diff -Naur ns-3.19/src/lr-wpan/model/lr-wpan-spectrum-value-helper.cc ns-3.20/src/lr-wpan/model/lr-wpan-spectrum-value-helper.cc
--- ns-3.19/src/lr-wpan/model/lr-wpan-spectrum-value-helper.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.20/src/lr-wpan/model/lr-wpan-spectrum-value-helper.cc	2014-06-17 10:33:13.907995853 -0700
@@ -0,0 +1,135 @@
+/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2011 The Boeing Company
+ *
+ * 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: Gary Pei <guangyu.pei@boeing.com>
+ */
+#include "lr-wpan-spectrum-value-helper.h"
+#include <ns3/log.h>
+#include <ns3/spectrum-value.h>
+
+#include <cmath>
+
+NS_LOG_COMPONENT_DEFINE ("LrWpanSpectrumValueHelper");
+
+namespace ns3 {
+
+Ptr<SpectrumModel> g_LrWpanSpectrumModel;
+
+class LrWpanSpectrumModelInitializer
+{
+public:
+  LrWpanSpectrumModelInitializer (void)
+  {
+    NS_LOG_FUNCTION (this);
+
+    Bands bands;
+    // 1 MHz resolution, with center frequency of 2400, 2401, ... 2483
+    // overall frequency span of 2399.5 MHz through 2483.5 MHz (83 bands)
+    for (int i = -1; i < 83; i++)
+      {
+        BandInfo bi;
+        bi.fl = 2400.5e6 + i * 1.0e6;
+        bi.fh = 2400.5e6 + (i + 1) * 1.0e6;
+        bi.fc = (bi.fl +  bi.fh) / 2;
+        bands.push_back (bi);
+      }
+    g_LrWpanSpectrumModel = Create<SpectrumModel> (bands);
+  }
+
+} g_LrWpanSpectrumModelInitializerInstance;
+
+LrWpanSpectrumValueHelper::LrWpanSpectrumValueHelper (void)
+{
+  NS_LOG_FUNCTION (this);
+  m_noiseFactor = 1.0;
+}
+
+LrWpanSpectrumValueHelper::~LrWpanSpectrumValueHelper (void)
+{
+  NS_LOG_FUNCTION (this);
+}
+
+Ptr<SpectrumValue>
+LrWpanSpectrumValueHelper::CreateTxPowerSpectralDensity (double txPower, uint32_t channel)
+{
+  NS_LOG_FUNCTION (this);
+  Ptr<SpectrumValue> txPsd = Create <SpectrumValue> (g_LrWpanSpectrumModel);
+
+  // txPower is expressed in dBm. We must convert it into natural unit (W).
+  txPower = pow (10., (txPower - 30) / 10);
+
+  // The effective occupied bandwidth of the signal is modelled to be 2 MHz.
+  // 99.5% of power is within +/- 1MHz of center frequency, and 0.5% is outside.
+  // There are 5 bands containing signal power.  The middle (center) band
+  // contains half of the power.  The two inner side bands contain 49.5%.
+  // The two outer side bands contain roughly 0.5%.
+  double txPowerDensity = txPower / 2.0e6;
+
+  NS_ASSERT_MSG ((channel >= 11 && channel <= 26), "Invalid channel numbers");
+
+  // The channel assignment is in section 6.1.2.1
+  // Channel 11 centered at 2.405 GHz, 12 at 2.410 GHz, ... 26 at 2.480 GHz
+  (*txPsd)[2405 + 5 * (channel - 11) - 2400 - 2] = txPowerDensity * 0.005;
+  (*txPsd)[2405 + 5 * (channel - 11) - 2400 - 1] = txPowerDensity * 0.495;
+  (*txPsd)[2405 + 5 * (channel - 11) - 2400] = txPowerDensity; // center
+  (*txPsd)[2405 + 5 * (channel - 11) - 2400 + 1 ] = txPowerDensity * 0.495;
+  (*txPsd)[2405 + 5 * (channel - 11) - 2400 + 2 ] = txPowerDensity * 0.005;
+
+  // If more power is allocated to more subbands in future revisions of
+  // this model, make sure to renormalize so that the integral of the
+  // txPsd still equals txPower
+
+  return txPsd;
+}
+
+Ptr<SpectrumValue>
+LrWpanSpectrumValueHelper::CreateNoisePowerSpectralDensity (uint32_t channel)
+{
+  NS_LOG_FUNCTION (this);
+  Ptr<SpectrumValue> noisePsd = Create <SpectrumValue> (g_LrWpanSpectrumModel);
+
+  static const double BOLTZMANN = 1.3803e-23;
+  // Nt  is the power of thermal noise in W
+  double Nt = BOLTZMANN * 290.0;
+  // noise Floor (W) which accounts for thermal noise and non-idealities of the receiver
+  double noisePowerDensity = m_noiseFactor * Nt;
+
+  NS_ASSERT_MSG ((channel >= 11 && channel <= 26), "Invalid channel numbers");
+
+  (*noisePsd)[2405 + 5 * (channel - 11) - 2400 - 2] = noisePowerDensity;
+  (*noisePsd)[2405 + 5 * (channel - 11) - 2400 - 1] = noisePowerDensity;
+  (*noisePsd)[2405 + 5 * (channel - 11) - 2400] = noisePowerDensity;
+  (*noisePsd)[2405 + 5 * (channel - 11) - 2400 + 1] = noisePowerDensity;
+  (*noisePsd)[2405 + 5 * (channel - 11) - 2400 + 2] = noisePowerDensity;
+
+  return noisePsd;
+}
+
+double
+LrWpanSpectrumValueHelper::TotalAvgPower (Ptr<const SpectrumValue> psd)
+{
+  NS_LOG_FUNCTION (psd);
+  double totalAvgPower = 0.0;
+
+  // numerically integrate to get area under psd using
+  // 1 MHz resolution from 2400 to 2483 MHz (center freq)
+
+  totalAvgPower = Sum (*psd * 1.0e6);
+  return totalAvgPower;
+}
+
+} // namespace ns3
diff -Naur ns-3.19/src/lr-wpan/model/lr-wpan-spectrum-value-helper.h ns-3.20/src/lr-wpan/model/lr-wpan-spectrum-value-helper.h
--- ns-3.19/src/lr-wpan/model/lr-wpan-spectrum-value-helper.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.20/src/lr-wpan/model/lr-wpan-spectrum-value-helper.h	2014-06-17 10:33:13.908995846 -0700
@@ -0,0 +1,72 @@
+/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2011 The Boeing Company
+ *
+ * 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: Gary Pei <guangyu.pei@boeing.com>
+ */
+#ifndef LR_WPAN_SPECTRUM_VALUE_HELPER_H
+#define LR_WPAN_SPECTRUM_VALUE_HELPER_H
+
+#include <ns3/ptr.h>
+
+namespace ns3 {
+
+class SpectrumValue;
+
+/**
+ * \ingroup lr-wpan
+ *
+ * \brief This class defines all functions to create spectrum model for LrWpan
+ */
+class LrWpanSpectrumValueHelper
+{
+public:
+  LrWpanSpectrumValueHelper (void);
+  virtual ~LrWpanSpectrumValueHelper (void);
+
+  /**
+   * \brief create spectrum value
+   * \param txPower the power transmission in dBm
+   * \param channel the channel number per IEEE802.15.4
+   * \return a Ptr to a newly created SpectrumValue instance
+   */
+  Ptr<SpectrumValue> CreateTxPowerSpectralDensity (double txPower, uint32_t channel);
+
+  /**
+   * \brief create spectrum value for noise
+   * \param channel the channel number per IEEE802.15.4
+   * \return a Ptr to a newly created SpectrumValue instance
+   */
+  Ptr<SpectrumValue> CreateNoisePowerSpectralDensity (uint32_t channel);
+
+  /**
+   * \brief total average power of the signal is the integral of the PSD
+   * \param psd spectral density
+   * \return total power (using composite trap. rule to numerally integrate
+   */
+  static double TotalAvgPower (Ptr<const SpectrumValue> psd);
+
+private:
+  /**
+   * A scaling factor for the noise power.
+   */
+  double m_noiseFactor;
+
+};
+
+} //namespace ns3
+
+#endif /*  LR_WPAN_SPECTRUM_VALUE_HELPER_H */
diff -Naur ns-3.19/src/lr-wpan/test/examples-to-run.py ns-3.20/src/lr-wpan/test/examples-to-run.py
--- ns-3.19/src/lr-wpan/test/examples-to-run.py	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.20/src/lr-wpan/test/examples-to-run.py	2014-06-17 10:33:13.908995846 -0700
@@ -0,0 +1,24 @@
+#! /usr/bin/env python
+## -*- Mode: python; py-indent-offset: 4; indent-tabs-mode: nil; coding: utf-8; -*-
+
+# A list of C++ examples to run in order to ensure that they remain
+# buildable and runnable over time.  Each tuple in the list contains
+#
+#     (example_name, do_run, do_valgrind_run).
+#
+# See test.py for more information.
+cpp_examples = [
+    ("lr-wpan-data", "True", "True"),
+	("lr-wpan-error-distance-plot", "True", "True"),
+    ("lr-wpan-error-model-plot", "True", "True"),
+	("lr-wpan-packet-print", "True", "True"),
+	("lr-wpan-phy-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
+#
+#     (example_name, do_run).
+#
+# See test.py for more information.
+python_examples = []
diff -Naur ns-3.19/src/lr-wpan/test/lr-wpan-ack-test.cc ns-3.20/src/lr-wpan/test/lr-wpan-ack-test.cc
--- ns-3.19/src/lr-wpan/test/lr-wpan-ack-test.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.20/src/lr-wpan/test/lr-wpan-ack-test.cc	2014-06-17 10:33:13.908995846 -0700
@@ -0,0 +1,207 @@
+/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2014 Fraunhofer FKIE
+ *
+ * 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:
+ *  Sascha Alexander Jopen <jopen@cs.uni-bonn.de>
+ */
+
+#include <ns3/log.h>
+#include <ns3/core-module.h>
+#include <ns3/lr-wpan-module.h>
+#include <ns3/propagation-loss-model.h>
+#include <ns3/propagation-delay-model.h>
+#include <ns3/simulator.h>
+#include <ns3/single-model-spectrum-channel.h>
+#include <ns3/constant-position-mobility-model.h>
+#include <ns3/packet.h>
+#include "ns3/rng-seed-manager.h"
+
+#include <iostream>
+
+using namespace ns3;
+
+NS_LOG_COMPONENT_DEFINE ("lr-wpan-ack-test");
+
+using namespace ns3;
+
+class LrWpanAckTestCase : public TestCase
+{
+public:
+  LrWpanAckTestCase ();
+
+  static void DataIndication (LrWpanAckTestCase *testCase, Ptr<LrWpanNetDevice> dev, McpsDataIndicationParams params, Ptr<Packet> p);
+  static void DataConfirm (LrWpanAckTestCase *testCase, Ptr<LrWpanNetDevice> dev, McpsDataConfirmParams params);
+
+private:
+  virtual void DoRun (void);
+
+  Time m_requestTime;
+  Time m_requestAckTime;
+  Time m_replyTime;
+  Time m_replyAckTime;
+  Time m_replyArrivalTime;
+};
+
+LrWpanAckTestCase::LrWpanAckTestCase ()
+  : TestCase ("Test the 802.15.4 ACK handling")
+{
+  m_requestTime = Seconds (0);
+  m_requestAckTime = Seconds (0);
+  m_replyTime = Seconds (0);
+  m_replyAckTime = Seconds (0);
+  m_replyArrivalTime = Seconds (0);
+}
+
+void
+LrWpanAckTestCase::DataIndication (LrWpanAckTestCase *testCase, Ptr<LrWpanNetDevice> dev, McpsDataIndicationParams params, Ptr<Packet> p)
+{
+  if (dev->GetAddress () == Mac16Address ("00:02"))
+    {
+      Ptr<Packet> p = Create<Packet> (10);  // 10 bytes of dummy data
+      McpsDataRequestParams params;
+      params.m_srcAddrMode = SHORT_ADDR;
+      params.m_dstAddrMode = SHORT_ADDR;
+      params.m_dstPanId = 0;
+      params.m_dstAddr = Mac16Address ("00:01");
+      params.m_msduHandle = 0;
+      params.m_txOptions = TX_OPTION_NONE;
+
+      testCase->m_replyTime = Simulator::Now ();
+      dev->GetMac ()->McpsDataRequest (params, p);
+    }
+  else
+    {
+      testCase->m_replyArrivalTime = Simulator::Now ();
+    }
+}
+
+void
+LrWpanAckTestCase::DataConfirm (LrWpanAckTestCase *testCase, Ptr<LrWpanNetDevice> dev, McpsDataConfirmParams params)
+{
+  if (dev->GetAddress () == Mac16Address ("00:01"))
+    {
+      testCase->m_requestAckTime = Simulator::Now ();
+    }
+  else
+    {
+      testCase->m_replyAckTime = Simulator::Now ();
+    }
+}
+
+void
+LrWpanAckTestCase::DoRun (void)
+{
+  // Test setup:
+  // Two nodes well in communication range.
+  // Node 1 sends a request packet to node 2 with ACK request bit set. Node 2
+  // immediately answers with a reply packet on receiption of the request.
+  // We expect the ACK of the request packet to always arrive at node 1 before
+  // the reply packet sent by node 2.
+
+  // Enable calculation of FCS in the trailers. Only necessary when interacting with real devices or wireshark.
+  // GlobalValue::Bind ("ChecksumEnabled", BooleanValue (true));
+
+  // Set the random seed and run number for this test
+  RngSeedManager::SetSeed (1);
+  RngSeedManager::SetRun (6);
+
+  // Create 2 nodes, and a NetDevice for each one
+  Ptr<Node> n0 = CreateObject <Node> ();
+  Ptr<Node> n1 = CreateObject <Node> ();
+
+  Ptr<LrWpanNetDevice> dev0 = CreateObject<LrWpanNetDevice> ();
+  Ptr<LrWpanNetDevice> dev1 = CreateObject<LrWpanNetDevice> ();
+
+  // Make random variable stream assignment deterministic
+  dev0->AssignStreams (0);
+  dev1->AssignStreams (10);
+
+  dev0->SetAddress (Mac16Address ("00:01"));
+  dev1->SetAddress (Mac16Address ("00:02"));
+
+  // Each device must be attached to the same channel
+  Ptr<SingleModelSpectrumChannel> channel = CreateObject<SingleModelSpectrumChannel> ();
+  Ptr<LogDistancePropagationLossModel> propModel = CreateObject<LogDistancePropagationLossModel> ();
+  Ptr<ConstantSpeedPropagationDelayModel> delayModel = CreateObject<ConstantSpeedPropagationDelayModel> ();
+  channel->AddPropagationLossModel (propModel);
+  channel->SetPropagationDelayModel (delayModel);
+
+  dev0->SetChannel (channel);
+  dev1->SetChannel (channel);
+
+  // To complete configuration, a LrWpanNetDevice must be added to a node
+  n0->AddDevice (dev0);
+  n1->AddDevice (dev1);
+
+  Ptr<ConstantPositionMobilityModel> sender0Mobility = CreateObject<ConstantPositionMobilityModel> ();
+  sender0Mobility->SetPosition (Vector (0,0,0));
+  dev0->GetPhy ()->SetMobility (sender0Mobility);
+  Ptr<ConstantPositionMobilityModel> sender1Mobility = CreateObject<ConstantPositionMobilityModel> ();
+  // Configure position 10 m distance
+  sender1Mobility->SetPosition (Vector (0,10,0));
+  dev1->GetPhy ()->SetMobility (sender1Mobility);
+
+  McpsDataConfirmCallback cb0;
+  cb0 = MakeBoundCallback (&LrWpanAckTestCase::DataConfirm, this, dev0);
+  dev0->GetMac ()->SetMcpsDataConfirmCallback (cb0);
+
+  McpsDataIndicationCallback cb1;
+  cb1 = MakeBoundCallback (&LrWpanAckTestCase::DataIndication, this, dev0);
+  dev0->GetMac ()->SetMcpsDataIndicationCallback (cb1);
+
+  McpsDataConfirmCallback cb2;
+  cb2 = MakeBoundCallback (&LrWpanAckTestCase::DataConfirm, this, dev1);
+  dev1->GetMac ()->SetMcpsDataConfirmCallback (cb2);
+
+  McpsDataIndicationCallback cb3;
+  cb3 = MakeBoundCallback (&LrWpanAckTestCase::DataIndication, this, dev1);
+  dev1->GetMac ()->SetMcpsDataIndicationCallback (cb3);
+
+  Ptr<Packet> p0 = Create<Packet> (50);  // 50 bytes of dummy data
+  McpsDataRequestParams params;
+  params.m_srcAddrMode = SHORT_ADDR;
+  params.m_dstAddrMode = SHORT_ADDR;
+  params.m_dstPanId = 0;
+  params.m_dstAddr = Mac16Address ("00:02");
+  params.m_msduHandle = 0;
+  params.m_txOptions = TX_OPTION_ACK;
+  m_requestTime = Simulator::Now ();
+  Simulator::ScheduleNow (&LrWpanMac::McpsDataRequest, dev0->GetMac (), params, p0);
+
+
+  Simulator::Run ();
+
+  NS_TEST_EXPECT_MSG_LT (m_requestTime, m_replyTime, "Sent the request before the reply (as expected)");
+  NS_TEST_EXPECT_MSG_LT (m_requestAckTime, m_replyArrivalTime, "The request was ACKed before the reply arrived (as expected)");
+  NS_TEST_EXPECT_MSG_LT (m_replyAckTime, m_replyArrivalTime, "The reply was ACKed before the reply arrived (as expected)");
+
+  Simulator::Destroy ();
+}
+
+class LrWpanAckTestSuite : public TestSuite
+{
+public:
+  LrWpanAckTestSuite ();
+};
+
+LrWpanAckTestSuite::LrWpanAckTestSuite ()
+  : TestSuite ("lr-wpan-ack", UNIT)
+{
+  AddTestCase (new LrWpanAckTestCase, TestCase::QUICK);
+}
+
+static LrWpanAckTestSuite g_lrWpanAckTestSuite;
diff -Naur ns-3.19/src/lr-wpan/test/lr-wpan-cca-test.cc ns-3.20/src/lr-wpan/test/lr-wpan-cca-test.cc
--- ns-3.19/src/lr-wpan/test/lr-wpan-cca-test.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.20/src/lr-wpan/test/lr-wpan-cca-test.cc	2014-06-17 10:33:13.909995838 -0700
@@ -0,0 +1,265 @@
+/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2014 Fraunhofer FKIE
+ *
+ * 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:
+ *  Sascha Alexander Jopen <jopen@cs.uni-bonn.de>
+ */
+
+#include <ns3/log.h>
+#include <ns3/core-module.h>
+#include <ns3/lr-wpan-module.h>
+#include <ns3/propagation-loss-model.h>
+#include <ns3/propagation-delay-model.h>
+#include <ns3/simulator.h>
+#include <ns3/single-model-spectrum-channel.h>
+#include <ns3/constant-position-mobility-model.h>
+#include <ns3/packet.h>
+#include "ns3/rng-seed-manager.h"
+
+#include <iostream>
+#include <iomanip>
+
+using namespace ns3;
+
+NS_LOG_COMPONENT_DEFINE ("lr-wpan-clear-channel-assessment-test");
+
+using namespace ns3;
+
+class LrWpanCcaTestCase : public TestCase
+{
+public:
+  LrWpanCcaTestCase ();
+
+private:
+  static void PlmeCcaConfirm (LrWpanCcaTestCase *testcase, Ptr<LrWpanNetDevice> device, LrWpanPhyEnumeration status);
+  static void PhyTxBegin (LrWpanCcaTestCase *testcase, Ptr<LrWpanNetDevice> device, Ptr<const Packet> packet);
+  static void PhyTxEnd (LrWpanCcaTestCase *testcase, Ptr<LrWpanNetDevice> device, Ptr<const Packet> packet);
+  static void PhyRxBegin (LrWpanCcaTestCase *testcase, Ptr<LrWpanNetDevice> device, Ptr<const Packet> packet);
+  static void PhyRxEnd (LrWpanCcaTestCase *testcase, Ptr<LrWpanNetDevice> device, Ptr<const Packet> packet, double sinr);
+  static void PhyRxDrop (LrWpanCcaTestCase *testcase, Ptr<LrWpanNetDevice> device, Ptr<const Packet> packet);
+
+  virtual void DoRun (void);
+
+  LrWpanPhyEnumeration m_status;
+
+};
+
+LrWpanCcaTestCase::LrWpanCcaTestCase ()
+  : TestCase ("Test the 802.15.4 clear channel assessment")
+{
+  m_status = IEEE_802_15_4_PHY_UNSPECIFIED;
+}
+
+void
+LrWpanCcaTestCase::PlmeCcaConfirm (LrWpanCcaTestCase *testcase, Ptr<LrWpanNetDevice> device, LrWpanPhyEnumeration status)
+{
+  std::cout << std::setiosflags (std::ios::fixed) << std::setprecision (9) << "[" << Simulator::Now ().GetSeconds () << "] " << device->GetMac ()->GetShortAddress () << " PlmeCcaConfirm: " << LrWpanHelper::LrWpanPhyEnumerationPrinter (status) << std::endl;
+
+  testcase->m_status = status;
+}
+
+void
+LrWpanCcaTestCase::PhyTxBegin (LrWpanCcaTestCase *testcase, Ptr<LrWpanNetDevice> device, Ptr<const Packet> packet)
+{
+  std::ostringstream os;
+  packet->Print (os);
+  std::cout << std::setiosflags (std::ios::fixed) << std::setprecision (9) << "[" << Simulator::Now ().GetSeconds () << "] " << device->GetMac ()->GetShortAddress () << " PhyTxBegin: " << os.str () << std::endl;
+}
+
+void
+LrWpanCcaTestCase::PhyTxEnd (LrWpanCcaTestCase *testcase, Ptr<LrWpanNetDevice> device, Ptr<const Packet> packet)
+{
+  std::ostringstream os;
+  packet->Print (os);
+  std::cout << std::setiosflags (std::ios::fixed) << std::setprecision (9) << "[" << Simulator::Now ().GetSeconds () << "] " << device->GetMac ()->GetShortAddress () << " PhyTxEnd: " << os.str () << std::endl;
+}
+
+void
+LrWpanCcaTestCase::PhyRxBegin (LrWpanCcaTestCase *testcase, Ptr<LrWpanNetDevice> device, Ptr<const Packet> packet)
+{
+  std::ostringstream os;
+  packet->Print (os);
+  std::cout << std::setiosflags (std::ios::fixed) << std::setprecision (9) << "[" << Simulator::Now ().GetSeconds () << "] " << device->GetMac ()->GetShortAddress () << " PhyRxBegin: " << os.str () << std::endl;
+}
+
+void
+LrWpanCcaTestCase::PhyRxEnd (LrWpanCcaTestCase *testcase, Ptr<LrWpanNetDevice> device, Ptr<const Packet> packet, double sinr)
+{
+  std::ostringstream os;
+  packet->Print (os);
+  std::cout << std::setiosflags (std::ios::fixed) << std::setprecision (9) << "[" << Simulator::Now ().GetSeconds () << "] " << device->GetMac ()->GetShortAddress () << " PhyRxEnd (" << sinr << "): " << os.str () << std::endl;
+
+  // The first packet was received. Now start a CCA, to try to detect the second packet which is still being transmitted.
+  device->GetPhy ()->PlmeCcaRequest ();
+}
+
+void LrWpanCcaTestCase::PhyRxDrop (LrWpanCcaTestCase *testcase, Ptr<LrWpanNetDevice> device, Ptr<const Packet> packet)
+{
+  std::ostringstream os;
+  packet->Print (os);
+  std::cout << std::setiosflags (std::ios::fixed) << std::setprecision (9) << "[" << Simulator::Now ().GetSeconds () << "] " << device->GetMac ()->GetShortAddress () << " PhyRxDrop: " << os.str () << std::endl;
+}
+
+void
+LrWpanCcaTestCase::DoRun (void)
+{
+  // Tx Power: 0 dBm
+  // Receiver Sensitivity: -106.58 dBm
+  // CCA channel busy condition: Rx power > -96.58 dBm
+  // Log distance reference loss at 1 m distance for channel 11 (2405 MHz): 40.0641 dB
+  // Log distance free space path loss exponent: 2
+
+  // Test setup:
+  // Start transmission of a short packet from node 0 to node 1 and at the same
+  // time a transmission of a large packet from node 2 to node 1.
+  // Both transmissions should start without backoff (per configuration) because
+  // the CCA on both nodes should detect a free medium.
+  // The shorter packet will be received first. After reception of the short
+  // packet, which might be destroyed due to interference of the large
+  // packet, node 1 will start a CCA. Depending on the distance between node 1
+  // and node 2, node 1 should detect a busy medium, because the transmission of
+  // the large packet is still in progress. For the above mentioned scenario
+  // parameters, the distance for the CCA detecting a busy medium is about
+  // 669.5685 m.
+
+  // Enable calculation of FCS in the trailers. Only necessary when interacting with real devices or wireshark.
+  // GlobalValue::Bind ("ChecksumEnabled", BooleanValue (true));
+
+  // Set the random seed and run number for this test
+  RngSeedManager::SetSeed (1);
+  RngSeedManager::SetRun (6);
+
+  // Create 3 nodes, and a NetDevice for each one
+  Ptr<Node> n0 = CreateObject <Node> ();
+  Ptr<Node> n1 = CreateObject <Node> ();
+  Ptr<Node> n2 = CreateObject <Node> ();
+
+  Ptr<LrWpanNetDevice> dev0 = CreateObject<LrWpanNetDevice> ();
+  Ptr<LrWpanNetDevice> dev1 = CreateObject<LrWpanNetDevice> ();
+  Ptr<LrWpanNetDevice> dev2 = CreateObject<LrWpanNetDevice> ();
+
+  // Make random variable stream assignment deterministic
+  dev0->AssignStreams (0);
+  dev1->AssignStreams (10);
+  dev2->AssignStreams (20);
+
+  dev0->SetAddress (Mac16Address ("00:01"));
+  dev1->SetAddress (Mac16Address ("00:02"));
+  dev2->SetAddress (Mac16Address ("00:03"));
+
+  // Each device must be attached to the same channel
+  Ptr<SingleModelSpectrumChannel> channel = CreateObject<SingleModelSpectrumChannel> ();
+  Ptr<LogDistancePropagationLossModel> propModel = CreateObject<LogDistancePropagationLossModel> ();
+  propModel->SetReference (1.0, 40.0641); // Reference loss at 1m distance for 2405 MHz (channel 11)
+  propModel->SetPathLossExponent (2); // Free space path loss exponent
+  Ptr<ConstantSpeedPropagationDelayModel> delayModel = CreateObject<ConstantSpeedPropagationDelayModel> ();
+  channel->AddPropagationLossModel (propModel);
+  channel->SetPropagationDelayModel (delayModel);
+
+  dev0->SetChannel (channel);
+  dev1->SetChannel (channel);
+  dev2->SetChannel (channel);
+
+  // To complete configuration, a LrWpanNetDevice must be added to a node
+  n0->AddDevice (dev0);
+  n1->AddDevice (dev1);
+  n2->AddDevice (dev2);
+
+  Ptr<ConstantPositionMobilityModel> sender0Mobility = CreateObject<ConstantPositionMobilityModel> ();
+  sender0Mobility->SetPosition (Vector (0, 0, 0));
+  dev0->GetPhy ()->SetMobility (sender0Mobility);
+  Ptr<ConstantPositionMobilityModel> sender1Mobility = CreateObject<ConstantPositionMobilityModel> ();
+  sender1Mobility->SetPosition (Vector (0, 669, 0));
+  dev1->GetPhy ()->SetMobility (sender1Mobility);
+  Ptr<ConstantPositionMobilityModel> sender2Mobility = CreateObject<ConstantPositionMobilityModel> ();
+  sender2Mobility->SetPosition (Vector (0, 1338, 0));
+  dev2->GetPhy ()->SetMobility (sender2Mobility);
+
+  // Disable the NetDevices queue management.
+  dev0->GetMac ()->SetMcpsDataConfirmCallback (MakeNullCallback<void, McpsDataConfirmParams> ());
+  dev1->GetMac ()->SetMcpsDataConfirmCallback (MakeNullCallback<void, McpsDataConfirmParams> ());
+  dev2->GetMac ()->SetMcpsDataConfirmCallback (MakeNullCallback<void, McpsDataConfirmParams> ());
+
+  // Set the CCA confirm callback.
+  dev1->GetPhy ()->SetPlmeCcaConfirmCallback (MakeBoundCallback (&LrWpanCcaTestCase::PlmeCcaConfirm, this, dev1));
+
+  // Start sending without backoff, if the channel is free.
+  dev0->GetCsmaCa ()->SetMacMinBE (0);
+  dev2->GetCsmaCa ()->SetMacMinBE (0);
+
+  // Connect trace sources.
+  dev0->GetPhy ()->TraceConnectWithoutContext ("PhyTxBegin", MakeBoundCallback (&LrWpanCcaTestCase::PhyTxBegin, this, dev0));
+  dev0->GetPhy ()->TraceConnectWithoutContext ("PhyTxEnd", MakeBoundCallback (&LrWpanCcaTestCase::PhyTxEnd, this, dev0));
+  dev2->GetPhy ()->TraceConnectWithoutContext ("PhyTxBegin", MakeBoundCallback (&LrWpanCcaTestCase::PhyTxBegin, this, dev2));
+  dev2->GetPhy ()->TraceConnectWithoutContext ("PhyTxEnd", MakeBoundCallback (&LrWpanCcaTestCase::PhyTxEnd, this, dev2));
+  dev1->GetPhy ()->TraceConnectWithoutContext ("PhyRxBegin", MakeBoundCallback (&LrWpanCcaTestCase::PhyRxBegin, this, dev1));
+  dev1->GetPhy ()->TraceConnectWithoutContext ("PhyRxEnd", MakeBoundCallback (&LrWpanCcaTestCase::PhyRxEnd, this, dev1));
+  dev1->GetPhy ()->TraceConnectWithoutContext ("PhyRxDrop", MakeBoundCallback (&LrWpanCcaTestCase::PhyRxDrop, this, dev1));
+
+  m_status = IEEE_802_15_4_PHY_UNSPECIFIED;
+
+  Ptr<Packet> p0 = Create<Packet> (1);  // 1 byte of dummy data
+  McpsDataRequestParams params0;
+  params0.m_srcAddrMode = SHORT_ADDR;
+  params0.m_dstAddrMode = SHORT_ADDR;
+  params0.m_dstPanId = 0;
+  params0.m_dstAddr = Mac16Address ("00:02");
+  params0.m_msduHandle = 0;
+  params0.m_txOptions = TX_OPTION_NONE;
+  Simulator::ScheduleNow (&LrWpanMac::McpsDataRequest, dev0->GetMac (), params0, p0);
+
+  Ptr<Packet> p1 = Create<Packet> (100);  // 100 bytes of dummy data
+  McpsDataRequestParams params1;
+  params1.m_srcAddrMode = SHORT_ADDR;
+  params1.m_dstAddrMode = SHORT_ADDR;
+  params1.m_dstPanId = 0;
+  params1.m_dstAddr = Mac16Address ("00:02");
+  params1.m_msduHandle = 0;
+  params1.m_txOptions = TX_OPTION_NONE;
+  Simulator::ScheduleNow (&LrWpanMac::McpsDataRequest, dev2->GetMac (), params1, p1);
+
+  Simulator::Run ();
+
+  NS_TEST_EXPECT_MSG_EQ (m_status, IEEE_802_15_4_PHY_BUSY, "CCA status BUSY (as expected)");
+
+  m_status = IEEE_802_15_4_PHY_UNSPECIFIED;
+
+  sender2Mobility->SetPosition (Vector (0, 1340, 0));
+
+  Simulator::ScheduleNow (&LrWpanMac::McpsDataRequest, dev0->GetMac (), params0, p0);
+  Simulator::ScheduleNow (&LrWpanMac::McpsDataRequest, dev2->GetMac (), params1, p1);
+
+  Simulator::Run ();
+
+  NS_TEST_EXPECT_MSG_EQ (m_status, IEEE_802_15_4_PHY_IDLE, "CCA status IDLE (as expected)");
+
+  Simulator::Destroy ();
+}
+
+class LrWpanCcaTestSuite : public TestSuite
+{
+public:
+  LrWpanCcaTestSuite ();
+};
+
+LrWpanCcaTestSuite::LrWpanCcaTestSuite ()
+  : TestSuite ("lr-wpan-clear-channel-assessment", UNIT)
+{
+  AddTestCase (new LrWpanCcaTestCase, TestCase::QUICK);
+}
+
+static LrWpanCcaTestSuite g_lrWpanCcaTestSuite;
diff -Naur ns-3.19/src/lr-wpan/test/lr-wpan-collision-test.cc ns-3.20/src/lr-wpan/test/lr-wpan-collision-test.cc
--- ns-3.19/src/lr-wpan/test/lr-wpan-collision-test.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.20/src/lr-wpan/test/lr-wpan-collision-test.cc	2014-06-17 10:33:13.909995838 -0700
@@ -0,0 +1,230 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2014 Universita' di Firenze, Italy
+ *
+ * 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: Tommaso Pecorella <tommaso.pecorella@unifi.it>
+ */
+
+#include <ns3/test.h>
+#include <ns3/packet.h>
+#include <ns3/lr-wpan-module.h>
+#include <ns3/mobility-module.h>
+#include <ns3/propagation-module.h>
+#include <ns3/spectrum-module.h>
+#include <ns3/mac16-address.h>
+#include <ns3/mac64-address.h>
+#include <ns3/log.h>
+
+
+NS_LOG_COMPONENT_DEFINE ("lr-wpan-collision-test");
+
+using namespace ns3;
+
+// This is an example TestCase.
+class LrWpanCollisionTestCase : public TestCase
+{
+public:
+  LrWpanCollisionTestCase ();
+  virtual ~LrWpanCollisionTestCase ();
+
+  void DataIndication (McpsDataIndicationParams params, Ptr<Packet> p);
+private:
+  virtual void DoRun (void);
+
+  uint8_t m_rxPackets;
+};
+
+LrWpanCollisionTestCase::LrWpanCollisionTestCase ()
+  : TestCase ("Test the 802.15.4 collision handling")
+{
+  m_rxPackets = 0;
+}
+
+LrWpanCollisionTestCase::~LrWpanCollisionTestCase ()
+{
+}
+
+void LrWpanCollisionTestCase::DataIndication (McpsDataIndicationParams params, Ptr<Packet> p)
+{
+  m_rxPackets++;
+}
+
+
+void
+LrWpanCollisionTestCase::DoRun (void)
+{
+
+  // Create 3 nodes, and a NetDevice for each one
+  Ptr<Node> n0 = CreateObject <Node> ();
+  Ptr<Node> n1 = CreateObject <Node> ();
+  Ptr<Node> n2 = CreateObject <Node> ();
+
+  Ptr<LrWpanNetDevice> dev0 = CreateObject<LrWpanNetDevice> ();
+  Ptr<LrWpanNetDevice> dev1 = CreateObject<LrWpanNetDevice> ();
+  Ptr<LrWpanNetDevice> dev2 = CreateObject<LrWpanNetDevice> ();
+
+  dev0->SetAddress (Mac16Address ("00:01"));
+  dev1->SetAddress (Mac16Address ("00:02"));
+  dev2->SetAddress (Mac16Address ("00:03"));
+
+  // Each device must be attached to the same channel
+  Ptr<SingleModelSpectrumChannel> channel = CreateObject<SingleModelSpectrumChannel> ();
+  Ptr<LogDistancePropagationLossModel> propModel = CreateObject<LogDistancePropagationLossModel> ();
+  Ptr<ConstantSpeedPropagationDelayModel> delayModel = CreateObject<ConstantSpeedPropagationDelayModel> ();
+  channel->AddPropagationLossModel (propModel);
+  channel->SetPropagationDelayModel (delayModel);
+
+  dev0->SetChannel (channel);
+  dev1->SetChannel (channel);
+  dev2->SetChannel (channel);
+
+  // To complete configuration, a LrWpanNetDevice must be added to a node
+  n0->AddDevice (dev0);
+  n1->AddDevice (dev1);
+  n2->AddDevice (dev2);
+
+  Ptr<ConstantPositionMobilityModel> sender0Mobility = CreateObject<ConstantPositionMobilityModel> ();
+  sender0Mobility->SetPosition (Vector (0,0,0));
+  dev0->GetPhy ()->SetMobility (sender0Mobility);
+  n0->AggregateObject (sender0Mobility);
+
+  Ptr<ConstantPositionMobilityModel> sender1Mobility = CreateObject<ConstantPositionMobilityModel> ();
+  // Configure position 10 m distance
+  sender1Mobility->SetPosition (Vector (0,1,0));
+  dev1->GetPhy ()->SetMobility (sender1Mobility);
+  n1->AggregateObject (sender1Mobility);
+
+  Ptr<ConstantPositionMobilityModel> sender2Mobility = CreateObject<ConstantPositionMobilityModel> ();
+  // Configure position 10 m distance
+  sender2Mobility->SetPosition (Vector (30,0,0));
+  dev2->GetPhy ()->SetMobility (sender2Mobility);
+  n2->AggregateObject (sender2Mobility);
+
+  dev0->GetMac ()->SetMcpsDataIndicationCallback (MakeCallback (&LrWpanCollisionTestCase::DataIndication, this));
+
+  // Disable first backoff
+  dev0->GetCsmaCa ()->SetMacMinBE (0);
+  dev1->GetCsmaCa ()->SetMacMinBE (0);
+  dev2->GetCsmaCa ()->SetMacMinBE (0);
+
+  Ptr<Packet> p0 = Create<Packet> (20);
+  Ptr<Packet> p1 = Create<Packet> (60);
+  Ptr<Packet> p2 = Create<Packet> (100);
+
+  McpsDataRequestParams params;
+  params.m_srcAddrMode = SHORT_ADDR;
+  params.m_dstAddrMode = SHORT_ADDR;
+  params.m_dstPanId = 0;
+  params.m_msduHandle = 0;
+  // params.m_txOptions = TX_OPTION_ACK;
+
+  // First case: concurrent tx and no ACKs
+  std::cout << "*** First test " << std::endl;
+  m_rxPackets = 0;
+  params.m_dstAddr = Mac16Address ("00:02");
+  Simulator::Schedule (Seconds (0.1),
+                       &LrWpanMac::McpsDataRequest,
+                       dev0->GetMac (), params, p0);
+
+  params.m_dstAddr = Mac16Address ("00:01");
+  Simulator::Schedule (Seconds (0.1),
+                       &LrWpanMac::McpsDataRequest,
+                       dev1->GetMac (), params, p1);
+
+  Simulator::Run ();
+
+  NS_TEST_EXPECT_MSG_EQ (m_rxPackets, 0, "Not received a packet (as expected)");
+
+  // Second case: concurrent tx and ACKs
+  std::cout << "*** Second test " << std::endl;
+  m_rxPackets = 0;
+  params.m_txOptions = TX_OPTION_ACK;
+
+  params.m_dstAddr = Mac16Address ("00:02");
+  Simulator::Schedule (Seconds (0.1),
+                       &LrWpanMac::McpsDataRequest,
+                       dev0->GetMac (), params, p0);
+
+  params.m_dstAddr = Mac16Address ("00:01");
+  Simulator::Schedule (Seconds (0.1),
+                       &LrWpanMac::McpsDataRequest,
+                       dev1->GetMac (), params, p1);
+
+  Simulator::Run ();
+
+  NS_TEST_EXPECT_MSG_EQ (m_rxPackets, 1, "Received a packet (as expected)");
+
+  // Third case: two concurrent tx and no ACKs
+  std::cout << "*** Third test " << std::endl;
+  m_rxPackets = 0;
+  params.m_txOptions = 0;
+
+//  LogComponentEnable("LrWpanMac",LOG_LEVEL_ALL);
+//  LogComponentEnable("LrWpanPhy",LOG_LEVEL_ALL);
+//  LogComponentEnableAll (LOG_PREFIX_TIME);
+
+  params.m_dstAddr = Mac16Address ("00:01");
+  Simulator::Schedule (Seconds (0.0001),
+                       &LrWpanMac::McpsDataRequest,
+                       dev2->GetMac (), params, p2);
+
+  params.m_dstAddr = Mac16Address ("00:01");
+  Simulator::Schedule (Seconds (0.0002),
+                       &LrWpanMac::McpsDataRequest,
+                       dev1->GetMac (), params, p0);
+
+  Simulator::Run ();
+
+  std::cout << "m_rxPackets = " << int(m_rxPackets) << std::endl;
+  NS_TEST_EXPECT_MSG_EQ (m_rxPackets, 0, "Received a packet (as expected)");
+
+  // Fourth case: two concurrent tx and ACKs
+  std::cout << "*** Fourth test " << std::endl;
+  m_rxPackets = 0;
+  params.m_txOptions = TX_OPTION_ACK;
+
+  params.m_dstAddr = Mac16Address ("00:01");
+  Simulator::Schedule (Seconds (0.1),
+                       &LrWpanMac::McpsDataRequest,
+                       dev1->GetMac (), params, p0);
+
+  params.m_dstAddr = Mac16Address ("00:01");
+  Simulator::Schedule (Seconds (0.1),
+                       &LrWpanMac::McpsDataRequest,
+                       dev2->GetMac (), params, p1);
+
+  Simulator::Run ();
+
+  std::cout << "m_rxPackets = " << int(m_rxPackets) << std::endl;
+  NS_TEST_EXPECT_MSG_EQ (m_rxPackets, 2, "Received two packets (as expected)");
+
+  Simulator::Destroy ();
+}
+
+// ==============================================================================
+class LrWpanCollisionTestSuite : public TestSuite
+{
+public:
+  LrWpanCollisionTestSuite ();
+};
+
+LrWpanCollisionTestSuite::LrWpanCollisionTestSuite ()
+  : TestSuite ("lr-wpan-collision", UNIT)
+{
+  AddTestCase (new LrWpanCollisionTestCase, TestCase::QUICK);
+}
+
+static LrWpanCollisionTestSuite g_lrWpanCollisionTestSuite;
diff -Naur ns-3.19/src/lr-wpan/test/lr-wpan-ed-test.cc ns-3.20/src/lr-wpan/test/lr-wpan-ed-test.cc
--- ns-3.19/src/lr-wpan/test/lr-wpan-ed-test.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.20/src/lr-wpan/test/lr-wpan-ed-test.cc	2014-06-17 10:33:13.910995830 -0700
@@ -0,0 +1,258 @@
+/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2014 Fraunhofer FKIE
+ *
+ * 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:
+ *  Sascha Alexander Jopen <jopen@cs.uni-bonn.de>
+ */
+
+#include <ns3/log.h>
+#include <ns3/core-module.h>
+#include <ns3/lr-wpan-module.h>
+#include <ns3/propagation-loss-model.h>
+#include <ns3/propagation-delay-model.h>
+#include <ns3/simulator.h>
+#include <ns3/single-model-spectrum-channel.h>
+#include <ns3/constant-position-mobility-model.h>
+#include <ns3/packet.h>
+#include "ns3/rng-seed-manager.h"
+
+#include <iostream>
+
+using namespace ns3;
+
+NS_LOG_COMPONENT_DEFINE ("lr-wpan-energy-detection-test");
+
+using namespace ns3;
+
+class LrWpanEdTestCase : public TestCase
+{
+public:
+  LrWpanEdTestCase ();
+
+private:
+  virtual void DoRun (void);
+
+  void PlmeEdConfirm (LrWpanPhyEnumeration status, uint8_t level);
+
+  LrWpanPhyEnumeration m_status;
+  uint8_t m_level;
+};
+
+LrWpanEdTestCase::LrWpanEdTestCase ()
+  : TestCase ("Test the 802.15.4 energie detection")
+{
+  m_status = IEEE_802_15_4_PHY_UNSPECIFIED;
+  m_level = 0;
+}
+
+void
+LrWpanEdTestCase::PlmeEdConfirm (LrWpanPhyEnumeration status, uint8_t level)
+{
+  NS_LOG_UNCOND ("Energy Detection completed with status " << LrWpanHelper::LrWpanPhyEnumerationPrinter (status) << " and energy level " << static_cast<uint32_t> (level));
+  m_status = status;
+  m_level = level;
+}
+
+void
+LrWpanEdTestCase::DoRun (void)
+{
+  // Tx Power: 0 dBm
+  // Receiver Sensitivity: -106.58 dBm
+  // Do energy detection for a single packet, arriving with 5 dB, 10 dB, 25 dB,
+  // 40 dB, relative to RX Power / Sensitivity. This should yield 0, 0, 127,
+  // and 255 as the reported energy levels.
+  // TODO: Maybe there should be a test for several interfering packets.
+  // TODO: There should be tests for signals not originating from 802.15.4
+  //       devices.
+
+  // Test setup:
+  // Two nodes in communication range. The propagation model is adjusted to
+  // give us the above mentioned RX powers.
+  // Node 1 sends a packet to node 2. Node 2 starts energy detection, while the
+  // packet reception is in progress. The detected energy level is compared to
+  // the expected values.
+
+  // Enable calculation of FCS in the trailers. Only necessary when interacting with real devices or wireshark.
+  // GlobalValue::Bind ("ChecksumEnabled", BooleanValue (true));
+
+  // Set the random seed and run number for this test
+  RngSeedManager::SetSeed (1);
+  RngSeedManager::SetRun (6);
+
+  // Create 2 nodes, and a NetDevice for each one
+  Ptr<Node> n0 = CreateObject <Node> ();
+  Ptr<Node> n1 = CreateObject <Node> ();
+
+  Ptr<LrWpanNetDevice> dev0 = CreateObject<LrWpanNetDevice> ();
+  Ptr<LrWpanNetDevice> dev1 = CreateObject<LrWpanNetDevice> ();
+
+  // Make random variable stream assignment deterministic
+  dev0->AssignStreams (0);
+  dev1->AssignStreams (10);
+
+  dev0->SetAddress (Mac16Address ("00:01"));
+  dev1->SetAddress (Mac16Address ("00:02"));
+
+  // Each device must be attached to the same channel
+  Ptr<SingleModelSpectrumChannel> channel = CreateObject<SingleModelSpectrumChannel> ();
+  Ptr<FixedRssLossModel> propModel = CreateObject<FixedRssLossModel> ();
+  Ptr<ConstantSpeedPropagationDelayModel> delayModel = CreateObject<ConstantSpeedPropagationDelayModel> ();
+  channel->AddPropagationLossModel (propModel);
+  channel->SetPropagationDelayModel (delayModel);
+
+  dev0->SetChannel (channel);
+  dev1->SetChannel (channel);
+
+  // To complete configuration, a LrWpanNetDevice must be added to a node
+  n0->AddDevice (dev0);
+  n1->AddDevice (dev1);
+
+  Ptr<ConstantPositionMobilityModel> sender0Mobility = CreateObject<ConstantPositionMobilityModel> ();
+  sender0Mobility->SetPosition (Vector (0, 0, 0));
+  dev0->GetPhy ()->SetMobility (sender0Mobility);
+  Ptr<ConstantPositionMobilityModel> sender1Mobility = CreateObject<ConstantPositionMobilityModel> ();
+  // Configure position 10 m distance
+  sender1Mobility->SetPosition (Vector (0, 10, 0));
+  dev1->GetPhy ()->SetMobility (sender1Mobility);
+
+  // Set the ED confirm callback.
+  dev0->GetPhy ()->SetPlmeEdConfirmCallback (MakeCallback (&LrWpanEdTestCase::PlmeEdConfirm, this));
+  dev1->GetPhy ()->SetPlmeEdConfirmCallback (MakeCallback (&LrWpanEdTestCase::PlmeEdConfirm, this));
+
+  // Configure the RX Power to be -107.58 dBm, i.e. 1 dB below receiver sensitivity.
+  propModel->SetRss (-107.58);
+
+  m_status = IEEE_802_15_4_PHY_UNSPECIFIED;
+  m_level = 0;
+  Ptr<Packet> p0 = Create<Packet> (100);  // 100 bytes of dummy data
+  McpsDataRequestParams params;
+  params.m_srcAddrMode = SHORT_ADDR;
+  params.m_dstAddrMode = SHORT_ADDR;
+  params.m_dstPanId = 0;
+  params.m_dstAddr = Mac16Address ("00:02");
+  params.m_msduHandle = 0;
+  params.m_txOptions = TX_OPTION_NONE;
+  Simulator::ScheduleNow (&LrWpanMac::McpsDataRequest, dev0->GetMac (), params, p0);
+
+  Simulator::Schedule (Seconds (0.0025), &LrWpanPhy::PlmeEdRequest, dev1->GetPhy ());
+
+  Simulator::Run ();
+
+  NS_TEST_EXPECT_MSG_EQ (m_status, IEEE_802_15_4_PHY_SUCCESS, "ED status SUCCESS (as expected)");
+  NS_TEST_EXPECT_MSG_EQ (m_level, 0, "ED reported signal level 0 (as expected)");
+
+
+  // Configure the RX Power to be -106.58 dBm, i.e. exectly to receiver sensitivity.
+  propModel->SetRss (-106.58);
+
+  m_status = IEEE_802_15_4_PHY_UNSPECIFIED;
+  m_level = 0;
+  Ptr<Packet> p1 = Create<Packet> (100);  // 100 bytes of dummy data
+  params.m_srcAddrMode = SHORT_ADDR;
+  params.m_dstAddrMode = SHORT_ADDR;
+  params.m_dstPanId = 0;
+  params.m_dstAddr = Mac16Address ("00:02");
+  params.m_msduHandle = 0;
+  params.m_txOptions = TX_OPTION_NONE;
+  Simulator::ScheduleNow (&LrWpanMac::McpsDataRequest, dev0->GetMac (), params, p1);
+
+  Simulator::Schedule (Seconds (0.0025), &LrWpanPhy::PlmeEdRequest, dev1->GetPhy ());
+
+  Simulator::Run ();
+
+  NS_TEST_EXPECT_MSG_EQ (m_status, IEEE_802_15_4_PHY_SUCCESS, "ED status SUCCESS (as expected)");
+  NS_TEST_EXPECT_MSG_EQ (m_level, 0, "ED reported signal level 0 (as expected)");
+
+
+  // Configure the RX Power to be -81.58 dBm, i.e. 25 dB above receiver sensitivity.
+  propModel->SetRss (-81.58);
+
+  m_status = IEEE_802_15_4_PHY_UNSPECIFIED;
+  m_level = 0;
+  Ptr<Packet> p2 = Create<Packet> (100);  // 100 bytes of dummy data
+  params.m_srcAddrMode = SHORT_ADDR;
+  params.m_dstAddrMode = SHORT_ADDR;
+  params.m_dstPanId = 0;
+  params.m_dstAddr = Mac16Address ("00:02");
+  params.m_msduHandle = 0;
+  params.m_txOptions = TX_OPTION_NONE;
+  Simulator::ScheduleNow (&LrWpanMac::McpsDataRequest, dev0->GetMac (), params, p2);
+
+  Simulator::Schedule (Seconds (0.0025), &LrWpanPhy::PlmeEdRequest, dev1->GetPhy ());
+
+  Simulator::Run ();
+
+  NS_TEST_EXPECT_MSG_EQ (m_status, IEEE_802_15_4_PHY_SUCCESS, "ED status SUCCESS (as expected)");
+  NS_TEST_EXPECT_MSG_EQ (m_level, 127, "ED reported signal level 127 (as expected)");
+
+
+  // Configure the RX Power to be -66.58 dBm, i.e. 40 dB above receiver sensitivity.
+  propModel->SetRss (-66.58);
+
+  m_status = IEEE_802_15_4_PHY_UNSPECIFIED;
+  m_level = 0;
+  Ptr<Packet> p3 = Create<Packet> (100);  // 100 bytes of dummy data
+  params.m_srcAddrMode = SHORT_ADDR;
+  params.m_dstAddrMode = SHORT_ADDR;
+  params.m_dstPanId = 0;
+  params.m_dstAddr = Mac16Address ("00:02");
+  params.m_msduHandle = 0;
+  params.m_txOptions = TX_OPTION_NONE;
+  Simulator::ScheduleNow (&LrWpanMac::McpsDataRequest, dev0->GetMac (), params, p3);
+
+  Simulator::Schedule (Seconds (0.0025), &LrWpanPhy::PlmeEdRequest, dev1->GetPhy ());
+
+  Simulator::Run ();
+
+  NS_TEST_EXPECT_MSG_EQ (m_status, IEEE_802_15_4_PHY_SUCCESS, "ED status SUCCESS (as expected)");
+  NS_TEST_EXPECT_MSG_EQ (m_level, 255, "ED reported signal level 255 (as expected)");
+
+  // Test ED at sender.
+  m_status = IEEE_802_15_4_PHY_UNSPECIFIED;
+  m_level = 0;
+  Ptr<Packet> p4 = Create<Packet> (100);  // 100 bytes of dummy data
+  params.m_srcAddrMode = SHORT_ADDR;
+  params.m_dstAddrMode = SHORT_ADDR;
+  params.m_dstPanId = 0;
+  params.m_dstAddr = Mac16Address ("00:02");
+  params.m_msduHandle = 0;
+  params.m_txOptions = TX_OPTION_NONE;
+  Simulator::ScheduleNow (&LrWpanMac::McpsDataRequest, dev0->GetMac (), params, p4);
+
+  Simulator::Schedule (Seconds (0.0025), &LrWpanPhy::PlmeEdRequest, dev0->GetPhy ());
+
+  Simulator::Run ();
+
+  NS_TEST_EXPECT_MSG_EQ (m_status, IEEE_802_15_4_PHY_TX_ON, "ED status TX_ON (as expected)");
+  NS_TEST_EXPECT_MSG_EQ (m_level, 0, "ED reported signal level 0 (as expected)");
+
+  Simulator::Destroy ();
+}
+
+class LrWpanEdTestSuite : public TestSuite
+{
+public:
+  LrWpanEdTestSuite ();
+};
+
+LrWpanEdTestSuite::LrWpanEdTestSuite ()
+  : TestSuite ("lr-wpan-energy-detection", UNIT)
+{
+  AddTestCase (new LrWpanEdTestCase, TestCase::QUICK);
+}
+
+static LrWpanEdTestSuite g_lrWpanEdTestSuite;
diff -Naur ns-3.19/src/lr-wpan/test/lr-wpan-error-model-test.cc ns-3.20/src/lr-wpan/test/lr-wpan-error-model-test.cc
--- ns-3.19/src/lr-wpan/test/lr-wpan-error-model-test.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.20/src/lr-wpan/test/lr-wpan-error-model-test.cc	2014-06-17 10:33:13.910995830 -0700
@@ -0,0 +1,192 @@
+/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2011 The Boeing Company
+ *
+ * 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: Tom Henderson <thomas.r.henderson@boeing.com>
+ */
+#include <ns3/test.h>
+#include <ns3/log.h>
+#include <ns3/callback.h>
+#include <ns3/packet.h>
+#include <ns3/simulator.h>
+#include <ns3/lr-wpan-error-model.h>
+#include <ns3/propagation-loss-model.h>
+#include <ns3/lr-wpan-net-device.h>
+#include <ns3/lr-wpan-mac.h>
+#include <ns3/node.h>
+#include <ns3/net-device.h>
+#include <ns3/single-model-spectrum-channel.h>
+#include <ns3/mac16-address.h>
+#include <ns3/constant-position-mobility-model.h>
+#include "ns3/rng-seed-manager.h"
+
+NS_LOG_COMPONENT_DEFINE ("lr-wpan-error-model-test");
+
+using namespace ns3;
+
+class LrWpanErrorDistanceTestCase : public TestCase
+{
+public:
+  LrWpanErrorDistanceTestCase ();
+  virtual ~LrWpanErrorDistanceTestCase ();
+  uint32_t GetReceived (void) const
+  {
+    return m_received;
+  }
+
+private:
+  virtual void DoRun (void);
+  void Callback (McpsDataIndicationParams params, Ptr<Packet> p);
+  uint32_t m_received;
+};
+
+class LrWpanErrorModelTestCase : public TestCase
+{
+public:
+  LrWpanErrorModelTestCase ();
+  virtual ~LrWpanErrorModelTestCase ();
+
+private:
+  virtual void DoRun (void);
+};
+
+LrWpanErrorDistanceTestCase::LrWpanErrorDistanceTestCase ()
+  : TestCase ("Test the 802.15.4 error model vs distance"),
+    m_received (0)
+{
+}
+
+LrWpanErrorDistanceTestCase::~LrWpanErrorDistanceTestCase ()
+{
+}
+
+void
+LrWpanErrorDistanceTestCase::Callback (McpsDataIndicationParams params, Ptr<Packet> p)
+{
+  m_received++;
+}
+
+void
+LrWpanErrorDistanceTestCase::DoRun (void)
+{
+  // Set the random seed and run number for this test
+  RngSeedManager::SetSeed (1);
+  RngSeedManager::SetRun (6);
+
+  Ptr<Node> n0 = CreateObject <Node> ();
+  Ptr<Node> n1 = CreateObject <Node> ();
+  Ptr<LrWpanNetDevice> dev0 = CreateObject<LrWpanNetDevice> ();
+  Ptr<LrWpanNetDevice> dev1 = CreateObject<LrWpanNetDevice> ();
+
+  // Make random variable stream assignment deterministic
+  dev0->AssignStreams (0);
+  dev1->AssignStreams (10);
+
+  dev0->SetAddress (Mac16Address ("00:01"));
+  dev1->SetAddress (Mac16Address ("00:02"));
+  Ptr<SingleModelSpectrumChannel> channel = CreateObject<SingleModelSpectrumChannel> ();
+  Ptr<LogDistancePropagationLossModel> model = CreateObject<LogDistancePropagationLossModel> ();
+  channel->AddPropagationLossModel (model);
+  dev0->SetChannel (channel);
+  dev1->SetChannel (channel);
+  n0->AddDevice (dev0);
+  n1->AddDevice (dev1);
+  Ptr<ConstantPositionMobilityModel> mob0 = CreateObject<ConstantPositionMobilityModel> ();
+  dev0->GetPhy ()->SetMobility (mob0);
+  Ptr<ConstantPositionMobilityModel> mob1 = CreateObject<ConstantPositionMobilityModel> ();
+  dev1->GetPhy ()->SetMobility (mob1);
+
+  McpsDataIndicationCallback cb0;
+  cb0 = MakeCallback (&LrWpanErrorDistanceTestCase::Callback, this);
+  dev1->GetMac ()->SetMcpsDataIndicationCallback (cb0);
+
+  McpsDataRequestParams params;
+  params.m_srcAddrMode = SHORT_ADDR;
+  params.m_dstAddrMode = SHORT_ADDR;
+  params.m_dstPanId = 0;
+  params.m_dstAddr = Mac16Address ("00:02");
+  params.m_msduHandle = 0;
+  params.m_txOptions = 0;
+
+  Ptr<Packet> p;
+  mob0->SetPosition (Vector (0,0,0));
+  mob1->SetPosition (Vector (100,0,0));
+  for (int i = 0; i < 1000; i++)
+    {
+      p = Create<Packet> (20);
+      Simulator::Schedule (Seconds (i),
+                           &LrWpanMac::McpsDataRequest,
+                           dev0->GetMac (), params, p);
+    }
+
+  Simulator::Run ();
+
+  // Test that we received 977 packets out of 1000, at distance of 100 m
+  // with default power of 0
+  NS_TEST_ASSERT_MSG_EQ (GetReceived (), 977, "Model fails");
+
+  Simulator::Destroy ();
+}
+
+// ==============================================================================
+LrWpanErrorModelTestCase::LrWpanErrorModelTestCase ()
+  : TestCase ("Test the 802.15.4 error model")
+{
+}
+
+LrWpanErrorModelTestCase::~LrWpanErrorModelTestCase ()
+{
+}
+
+void
+LrWpanErrorModelTestCase::DoRun (void)
+{
+
+  Ptr<LrWpanErrorModel> model = CreateObject<LrWpanErrorModel> ();
+
+  // Test a few values
+  double snr = 5;
+  double ber = 1.0 - model->GetChunkSuccessRate (pow (10.0, snr / 10.0), 1);
+  NS_TEST_ASSERT_MSG_EQ_TOL (ber, 7.38e-14, 0.01e-14, "Model fails for SNR = " << snr);
+  snr = 2;
+  ber = 1.0 - model->GetChunkSuccessRate (pow (10.0, snr / 10.0), 1);
+  NS_TEST_ASSERT_MSG_EQ_TOL (ber, 5.13e-7, 0.01e-7, "Model fails for SNR = " << snr);
+  snr = -1;
+  ber = 1.0 - model->GetChunkSuccessRate (pow (10.0, snr / 10.0), 1);
+  NS_TEST_ASSERT_MSG_EQ_TOL (ber, 0.00114, 0.00001, "Model fails for SNR = " << snr);
+  snr = -4;
+  ber = 1.0 - model->GetChunkSuccessRate (pow (10.0, snr / 10.0), 1);
+  NS_TEST_ASSERT_MSG_EQ_TOL (ber, 0.0391, 0.0001, "Model fails for SNR = " << snr);
+  snr = -7;
+  ber = 1.0 - model->GetChunkSuccessRate (pow (10.0, snr / 10.0), 1);
+  NS_TEST_ASSERT_MSG_EQ_TOL (ber, 0.175, 0.001, "Model fails for SNR = " << snr);
+}
+
+// ==============================================================================
+class LrWpanErrorModelTestSuite : public TestSuite
+{
+public:
+  LrWpanErrorModelTestSuite ();
+};
+
+LrWpanErrorModelTestSuite::LrWpanErrorModelTestSuite ()
+  : TestSuite ("lr-wpan-error-model", UNIT)
+{
+  AddTestCase (new LrWpanErrorModelTestCase, TestCase::QUICK);
+  AddTestCase (new LrWpanErrorDistanceTestCase, TestCase::QUICK);
+}
+
+static LrWpanErrorModelTestSuite lrWpanErrorModelTestSuite;
diff -Naur ns-3.19/src/lr-wpan/test/lr-wpan-packet-test.cc ns-3.20/src/lr-wpan/test/lr-wpan-packet-test.cc
--- ns-3.19/src/lr-wpan/test/lr-wpan-packet-test.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.20/src/lr-wpan/test/lr-wpan-packet-test.cc	2014-06-17 10:33:13.910995830 -0700
@@ -0,0 +1,120 @@
+/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2011 The Boeing Company
+ *
+ * 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:  Tom Henderson <thomas.r.henderson@boeing.com>
+ */
+#include <ns3/test.h>
+#include <ns3/packet.h>
+#include <ns3/lr-wpan-mac-header.h>
+#include <ns3/lr-wpan-mac-trailer.h>
+#include <ns3/mac16-address.h>
+#include <ns3/mac64-address.h>
+#include <ns3/log.h>
+
+
+NS_LOG_COMPONENT_DEFINE ("lr-wpan-packet-test");
+
+using namespace ns3;
+
+// This is an example TestCase.
+class LrWpanPacketTestCase : public TestCase
+{
+public:
+  LrWpanPacketTestCase ();
+  virtual ~LrWpanPacketTestCase ();
+
+private:
+  virtual void DoRun (void);
+};
+
+LrWpanPacketTestCase::LrWpanPacketTestCase ()
+  : TestCase ("Test the 802.15.4 MAC header and trailer classes")
+{
+}
+
+LrWpanPacketTestCase::~LrWpanPacketTestCase ()
+{
+}
+
+void
+LrWpanPacketTestCase::DoRun (void)
+{
+
+  LrWpanMacHeader macHdr (LrWpanMacHeader::LRWPAN_MAC_BEACON, 0);        //sequence number set to 0
+  macHdr.SetSrcAddrMode (LrWpanMacHeader::SHORTADDR);                    // short addr
+  macHdr.SetDstAddrMode (LrWpanMacHeader::NOADDR);
+  macHdr.SetSecDisable ();
+  macHdr.SetNoPanIdComp ();
+  // ... other setters
+
+  uint16_t srcPanId = 100;
+  Mac16Address srcWpanAddr ("00:11");
+  macHdr.SetSrcAddrFields (srcPanId, srcWpanAddr);
+
+  LrWpanMacTrailer macTrailer;
+
+
+  Ptr<Packet> p = Create<Packet> (20);  // 20 bytes of dummy data
+  NS_TEST_ASSERT_MSG_EQ (p->GetSize (), 20, "Packet created with unexpected size");
+  p->AddHeader (macHdr);
+  std::cout << " <--Mac Header added " << std::endl;
+
+  NS_TEST_ASSERT_MSG_EQ (p->GetSize (), 27, "Packet wrong size after macHdr addition");
+  p->AddTrailer (macTrailer);
+  NS_TEST_ASSERT_MSG_EQ (p->GetSize (), 29, "Packet wrong size after macTrailer addition");
+
+  // Test serialization and deserialization
+  uint32_t size = p->GetSerializedSize ();
+  uint8_t buffer[size];
+  p->Serialize (buffer, size);
+  Ptr<Packet> p2 = Create<Packet> (buffer, size, true);
+
+
+  p2->Print (std::cout);
+  std::cout << " <--Packet P2 " << std::endl;
+
+  NS_TEST_ASSERT_MSG_EQ (p2->GetSize (), 29, "Packet wrong size after deserialization");
+
+  LrWpanMacHeader receivedMacHdr;
+  p2->RemoveHeader (receivedMacHdr);
+
+  receivedMacHdr.Print (std::cout);
+  std::cout << " <--P2 Mac Header " << std::endl;
+
+  NS_TEST_ASSERT_MSG_EQ (p2->GetSize (), 22, "Packet wrong size after removing machdr");
+
+  LrWpanMacTrailer receivedMacTrailer;
+  p2->RemoveTrailer (receivedMacTrailer);
+  NS_TEST_ASSERT_MSG_EQ (p2->GetSize (), 20, "Packet wrong size after removing headers and trailers");
+  // Compare macHdr with receivedMacHdr, macTrailer with receivedMacTrailer,...
+
+}
+
+// ==============================================================================
+class LrWpanPacketTestSuite : public TestSuite
+{
+public:
+  LrWpanPacketTestSuite ();
+};
+
+LrWpanPacketTestSuite::LrWpanPacketTestSuite ()
+  : TestSuite ("lr-wpan-packet", UNIT)
+{
+  AddTestCase (new LrWpanPacketTestCase, TestCase::QUICK);
+}
+
+static LrWpanPacketTestSuite lrWpanPacketTestSuite;
diff -Naur ns-3.19/src/lr-wpan/test/lr-wpan-pd-plme-sap-test.cc ns-3.20/src/lr-wpan/test/lr-wpan-pd-plme-sap-test.cc
--- ns-3.19/src/lr-wpan/test/lr-wpan-pd-plme-sap-test.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.20/src/lr-wpan/test/lr-wpan-pd-plme-sap-test.cc	2014-06-17 10:33:13.911995823 -0700
@@ -0,0 +1,99 @@
+/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2011 The Boeing Company
+ *
+ * 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: Gary Pei <guangyu.pei@boeing.com>
+ */
+#include <ns3/log.h>
+#include <ns3/test.h>
+#include <ns3/packet.h>
+#include <ns3/lr-wpan-phy.h>
+#include <ns3/lr-wpan-mac.h>
+#include <ns3/simulator.h>
+#include <ns3/single-model-spectrum-channel.h>
+
+using namespace ns3;
+
+// This is an example TestCase.
+class LrWpanPlmeAndPdInterfaceTestCase : public TestCase
+{
+public:
+  LrWpanPlmeAndPdInterfaceTestCase ();
+  virtual ~LrWpanPlmeAndPdInterfaceTestCase ();
+
+private:
+  virtual void DoRun (void);
+  void ReceivePdDataInndication (uint32_t psduLength, Ptr<Packet> p, uint8_t lqi);
+};
+
+LrWpanPlmeAndPdInterfaceTestCase::LrWpanPlmeAndPdInterfaceTestCase ()
+  : TestCase ("Test the PLME and PD SAP per IEEE 802.15.4")
+{
+}
+
+LrWpanPlmeAndPdInterfaceTestCase::~LrWpanPlmeAndPdInterfaceTestCase ()
+{
+}
+
+void
+LrWpanPlmeAndPdInterfaceTestCase::ReceivePdDataInndication (uint32_t psduLength,
+                                                            Ptr<Packet> p,
+                                                            uint8_t lqi)
+{
+  NS_LOG_UNCOND ("At: " << Simulator::Now ()
+                        << " Received frame size: " << psduLength << " LQI: " <<
+                 lqi);
+}
+
+void
+LrWpanPlmeAndPdInterfaceTestCase::DoRun (void)
+{
+  LogComponentEnableAll (LOG_PREFIX_FUNC);
+  LogComponentEnable ("LrWpanPhy", LOG_LEVEL_ALL);
+
+  Ptr<LrWpanPhy> sender = CreateObject<LrWpanPhy> ();
+  Ptr<LrWpanPhy> receiver = CreateObject<LrWpanPhy> ();
+
+  Ptr<SingleModelSpectrumChannel> channel = CreateObject<SingleModelSpectrumChannel> ();
+  sender->SetChannel (channel);
+  receiver->SetChannel (channel);
+
+  receiver->SetPdDataIndicationCallback (MakeCallback (
+                                           &LrWpanPlmeAndPdInterfaceTestCase::ReceivePdDataInndication,
+                                           this));
+
+  uint32_t n = 10;
+  Ptr<Packet> p = Create<Packet> (n);
+  sender->PdDataRequest (p->GetSize (), p);
+
+  Simulator::Destroy ();
+}
+
+// ==============================================================================
+class LrWpanPlmeAndPdInterfaceTestSuite : public TestSuite
+{
+public:
+  LrWpanPlmeAndPdInterfaceTestSuite ();
+};
+
+LrWpanPlmeAndPdInterfaceTestSuite::LrWpanPlmeAndPdInterfaceTestSuite ()
+  : TestSuite ("lr-wpan-plme-pd-sap", UNIT)
+{
+  AddTestCase (new LrWpanPlmeAndPdInterfaceTestCase, TestCase::QUICK);
+}
+
+// Do not forget to allocate an instance of this TestSuite
+static LrWpanPlmeAndPdInterfaceTestSuite lrWpanPlmeAndPdInterfaceTestSuite;
diff -Naur ns-3.19/src/lr-wpan/test/lr-wpan-spectrum-value-helper-test.cc ns-3.20/src/lr-wpan/test/lr-wpan-spectrum-value-helper-test.cc
--- ns-3.19/src/lr-wpan/test/lr-wpan-spectrum-value-helper-test.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.20/src/lr-wpan/test/lr-wpan-spectrum-value-helper-test.cc	2014-06-17 10:33:13.911995823 -0700
@@ -0,0 +1,80 @@
+/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2011 The Boeing Company
+ *
+ * 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:  Tom Henderson <thomas.r.henderson@boeing.com>
+ */
+#include <ns3/log.h>
+#include <ns3/test.h>
+#include <ns3/lr-wpan-spectrum-value-helper.h>
+#include <ns3/spectrum-value.h>
+
+#include <cmath>
+
+using namespace ns3;
+
+class LrWpanSpectrumValueHelperTestCase : public TestCase
+{
+public:
+  LrWpanSpectrumValueHelperTestCase ();
+  virtual ~LrWpanSpectrumValueHelperTestCase ();
+
+private:
+  virtual void DoRun (void);
+};
+
+LrWpanSpectrumValueHelperTestCase::LrWpanSpectrumValueHelperTestCase ()
+  : TestCase ("Test the 802.15.4 SpectrumValue helper class")
+{
+}
+
+LrWpanSpectrumValueHelperTestCase::~LrWpanSpectrumValueHelperTestCase ()
+{
+}
+
+void
+LrWpanSpectrumValueHelperTestCase::DoRun (void)
+{
+  LrWpanSpectrumValueHelper helper;
+  Ptr<SpectrumValue> value;
+  double pwrWatts;
+  for (uint32_t chan = 11; chan <= 26; chan++)
+    {
+      // 50dBm = 100 W, -50dBm = 0.01 mW
+      for (double pwrdBm = -50; pwrdBm < 50; pwrdBm += 10)
+        {
+          value = helper.CreateTxPowerSpectralDensity (pwrdBm, chan);
+          pwrWatts = pow (10.0, pwrdBm / 10.0) / 1000;
+          // Test that average power calculation is within +/- 25% of expected
+          NS_TEST_ASSERT_MSG_EQ_TOL (helper.TotalAvgPower (value), pwrWatts, pwrWatts / 4.0, "Not equal for channel " << chan << " pwrdBm " << pwrdBm);
+        }
+    }
+}
+
+// ==============================================================================
+class LrWpanSpectrumValueHelperTestSuite : public TestSuite
+{
+public:
+  LrWpanSpectrumValueHelperTestSuite ();
+};
+
+LrWpanSpectrumValueHelperTestSuite::LrWpanSpectrumValueHelperTestSuite ()
+  : TestSuite ("lr-wpan-spectrum-value-helper", UNIT)
+{
+  AddTestCase (new LrWpanSpectrumValueHelperTestCase, TestCase::QUICK);
+}
+
+static LrWpanSpectrumValueHelperTestSuite lrWpanSpectrumValueHelperTestSuite;
diff -Naur ns-3.19/src/lr-wpan/wscript ns-3.20/src/lr-wpan/wscript
--- ns-3.19/src/lr-wpan/wscript	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.20/src/lr-wpan/wscript	2014-06-17 10:33:13.911995823 -0700
@@ -0,0 +1,52 @@
+## -*- Mode: python; py-indent-offset: 4; indent-tabs-mode: nil; coding: utf-8; -*-
+
+def build(bld):
+    obj = bld.create_ns3_module('lr-wpan', ['core', 'network', 'mobility', 'spectrum', 'propagation'])
+    obj.source = [
+        'model/lr-wpan-error-model.cc',
+        'model/lr-wpan-interference-helper.cc',
+        'model/lr-wpan-phy.cc',
+        'model/lr-wpan-mac.cc',
+        'model/lr-wpan-mac-header.cc',
+        'model/lr-wpan-mac-trailer.cc',
+        'model/lr-wpan-csmaca.cc',
+        'model/lr-wpan-net-device.cc',
+        'model/lr-wpan-spectrum-value-helper.cc',
+        'model/lr-wpan-spectrum-signal-parameters.cc',
+        'model/lr-wpan-lqi-tag.cc',
+        'helper/lr-wpan-helper.cc',
+        ]
+
+    module_test = bld.create_ns3_module_test_library('lr-wpan')
+    module_test.source = [
+        'test/lr-wpan-ack-test.cc',
+        'test/lr-wpan-cca-test.cc',
+        'test/lr-wpan-collision-test.cc',
+        'test/lr-wpan-ed-test.cc',
+        'test/lr-wpan-error-model-test.cc',
+        'test/lr-wpan-packet-test.cc',
+        'test/lr-wpan-pd-plme-sap-test.cc',
+        'test/lr-wpan-spectrum-value-helper-test.cc',
+        ]
+     
+    headers = bld(features='ns3header')
+    headers.module = 'lr-wpan'
+    headers.source = [
+        'model/lr-wpan-error-model.h',
+        'model/lr-wpan-interference-helper.h',
+        'model/lr-wpan-phy.h',
+        'model/lr-wpan-mac.h',
+        'model/lr-wpan-mac-header.h',
+        'model/lr-wpan-mac-trailer.h',
+        'model/lr-wpan-csmaca.h',
+        'model/lr-wpan-net-device.h',
+        'model/lr-wpan-spectrum-value-helper.h',
+        'model/lr-wpan-spectrum-signal-parameters.h',
+        'model/lr-wpan-lqi-tag.h',
+        'helper/lr-wpan-helper.h',
+        ]
+
+    if (bld.env['ENABLE_EXAMPLES']):
+        bld.recurse('examples')
+
+    bld.ns3_python_bindings()
diff -Naur ns-3.19/src/lte/bindings/modulegen__gcc_ILP32.py ns-3.20/src/lte/bindings/modulegen__gcc_ILP32.py
--- ns-3.19/src/lte/bindings/modulegen__gcc_ILP32.py	2014-06-17 10:34:00.574635611 -0700
+++ ns-3.20/src/lte/bindings/modulegen__gcc_ILP32.py	2014-06-17 10:33:13.926995707 -0700
@@ -70,6 +70,8 @@
     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')
+    ## cqa-ff-mac-scheduler.h (module 'lte'): ns3::CqasFlowPerf_t [struct]
+    module.add_class('CqasFlowPerf_t')
     ## ff-mac-common.h (module 'lte'): ns3::CqiConfig_s [struct]
     module.add_class('CqiConfig_s')
     ## ff-mac-common.h (module 'lte'): ns3::CqiListElement_s [struct]
@@ -292,34 +294,6 @@
     module.add_class('InetSocketAddress', import_from_module='ns.network')
     ## inet-socket-address.h (module 'network'): ns3::InetSocketAddress [class]
     root_module['ns3::InetSocketAddress'].implicitly_converts_to(root_module['ns3::Address'])
-    ## int-to-type.h (module 'core'): ns3::IntToType<0> [struct]
-    module.add_class('IntToType', import_from_module='ns.core', template_parameters=['0'])
-    ## int-to-type.h (module 'core'): ns3::IntToType<0>::v_e [enumeration]
-    module.add_enum('v_e', ['value'], outer_class=root_module['ns3::IntToType< 0 >'], import_from_module='ns.core')
-    ## int-to-type.h (module 'core'): ns3::IntToType<1> [struct]
-    module.add_class('IntToType', import_from_module='ns.core', template_parameters=['1'])
-    ## int-to-type.h (module 'core'): ns3::IntToType<1>::v_e [enumeration]
-    module.add_enum('v_e', ['value'], outer_class=root_module['ns3::IntToType< 1 >'], import_from_module='ns.core')
-    ## int-to-type.h (module 'core'): ns3::IntToType<2> [struct]
-    module.add_class('IntToType', import_from_module='ns.core', template_parameters=['2'])
-    ## int-to-type.h (module 'core'): ns3::IntToType<2>::v_e [enumeration]
-    module.add_enum('v_e', ['value'], outer_class=root_module['ns3::IntToType< 2 >'], import_from_module='ns.core')
-    ## int-to-type.h (module 'core'): ns3::IntToType<3> [struct]
-    module.add_class('IntToType', import_from_module='ns.core', template_parameters=['3'])
-    ## int-to-type.h (module 'core'): ns3::IntToType<3>::v_e [enumeration]
-    module.add_enum('v_e', ['value'], outer_class=root_module['ns3::IntToType< 3 >'], import_from_module='ns.core')
-    ## int-to-type.h (module 'core'): ns3::IntToType<4> [struct]
-    module.add_class('IntToType', import_from_module='ns.core', template_parameters=['4'])
-    ## int-to-type.h (module 'core'): ns3::IntToType<4>::v_e [enumeration]
-    module.add_enum('v_e', ['value'], outer_class=root_module['ns3::IntToType< 4 >'], import_from_module='ns.core')
-    ## int-to-type.h (module 'core'): ns3::IntToType<5> [struct]
-    module.add_class('IntToType', import_from_module='ns.core', template_parameters=['5'])
-    ## int-to-type.h (module 'core'): ns3::IntToType<5>::v_e [enumeration]
-    module.add_enum('v_e', ['value'], outer_class=root_module['ns3::IntToType< 5 >'], import_from_module='ns.core')
-    ## int-to-type.h (module 'core'): ns3::IntToType<6> [struct]
-    module.add_class('IntToType', import_from_module='ns.core', template_parameters=['6'])
-    ## int-to-type.h (module 'core'): ns3::IntToType<6>::v_e [enumeration]
-    module.add_enum('v_e', ['value'], outer_class=root_module['ns3::IntToType< 6 >'], 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]
@@ -338,12 +312,6 @@
     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-interface-address.h (module 'internet'): ns3::Ipv6InterfaceAddress [class]
-    module.add_class('Ipv6InterfaceAddress', import_from_module='ns.internet')
-    ## ipv6-interface-address.h (module 'internet'): ns3::Ipv6InterfaceAddress::State_e [enumeration]
-    module.add_enum('State_e', ['TENTATIVE', 'DEPRECATED', 'PREFERRED', 'PERMANENT', 'HOMEADDRESS', 'TENTATIVE_OPTIMISTIC', 'INVALID'], outer_class=root_module['ns3::Ipv6InterfaceAddress'], import_from_module='ns.internet')
-    ## ipv6-interface-address.h (module 'internet'): ns3::Ipv6InterfaceAddress::Scope_e [enumeration]
-    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')
     ## log.h (module 'core'): ns3::LogComponent [class]
@@ -640,6 +608,8 @@
     module.add_enum('TagData_e', ['MAX_SIZE'], outer_class=root_module['ns3::PacketTagList::TagData'], import_from_module='ns.network')
     ## ff-mac-common.h (module 'lte'): ns3::PagingInfoListElement_s [struct]
     module.add_class('PagingInfoListElement_s')
+    ## log.h (module 'core'): ns3::ParameterLogger [class]
+    module.add_class('ParameterLogger', import_from_module='ns.core')
     ## ff-mac-common.h (module 'lte'): ns3::PhichListElement_s [struct]
     module.add_class('PhichListElement_s')
     ## ff-mac-common.h (module 'lte'): ns3::PhichListElement_s::Phich_e [enumeration]
@@ -684,14 +654,8 @@
     module.add_class('TbId_t')
     ## lte-mi-error-model.h (module 'lte'): ns3::TbStats_t [struct]
     module.add_class('TbStats_t')
-    ## timer.h (module 'core'): ns3::Timer [class]
-    module.add_class('Timer', import_from_module='ns.core')
-    ## timer.h (module 'core'): ns3::Timer::DestroyPolicy [enumeration]
-    module.add_enum('DestroyPolicy', ['CANCEL_ON_DESTROY', 'REMOVE_ON_DESTROY', 'CHECK_ON_DESTROY'], outer_class=root_module['ns3::Timer'], import_from_module='ns.core')
-    ## timer.h (module 'core'): ns3::Timer::State [enumeration]
-    module.add_enum('State', ['RUNNING', 'EXPIRED', 'SUSPENDED'], outer_class=root_module['ns3::Timer'], import_from_module='ns.core')
-    ## timer-impl.h (module 'core'): ns3::TimerImpl [class]
-    module.add_class('TimerImpl', allow_subclassing=True, import_from_module='ns.core')
+    ## nstime.h (module 'core'): ns3::TimeWithUnit [class]
+    module.add_class('TimeWithUnit', import_from_module='ns.core')
     ## lte-common.h (module 'lte'): ns3::TransmissionModesLayers [class]
     module.add_class('TransmissionModesLayers')
     ## type-id.h (module 'core'): ns3::TypeId [class]
@@ -734,6 +698,8 @@
     module.add_class('fdtbfqsFlowPerf_t')
     ## 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')
     ## pf-ff-mac-scheduler.h (module 'lte'): ns3::pfsFlowPerf_t [struct]
     module.add_class('pfsFlowPerf_t')
     ## pss-ff-mac-scheduler.h (module 'lte'): ns3::pssFlowPerf_t [struct]
@@ -758,10 +724,6 @@
     module.add_enum('DscpType', ['DscpDefault', 'DSCP_CS1', 'DSCP_AF11', 'DSCP_AF12', 'DSCP_AF13', 'DSCP_CS2', 'DSCP_AF21', 'DSCP_AF22', 'DSCP_AF23', 'DSCP_CS3', 'DSCP_AF31', 'DSCP_AF32', 'DSCP_AF33', 'DSCP_CS4', 'DSCP_AF41', 'DSCP_AF42', 'DSCP_AF43', 'DSCP_CS5', 'DSCP_EF', 'DSCP_CS6', 'DSCP_CS7'], outer_class=root_module['ns3::Ipv4Header'], import_from_module='ns.internet')
     ## ipv4-header.h (module 'internet'): ns3::Ipv4Header::EcnType [enumeration]
     module.add_enum('EcnType', ['ECN_NotECT', 'ECN_ECT1', 'ECN_ECT0', 'ECN_CE'], outer_class=root_module['ns3::Ipv4Header'], import_from_module='ns.internet')
-    ## ipv6-header.h (module 'internet'): ns3::Ipv6Header [class]
-    module.add_class('Ipv6Header', import_from_module='ns.internet', parent=root_module['ns3::Header'])
-    ## ipv6-header.h (module 'internet'): ns3::Ipv6Header::NextHeader_e [enumeration]
-    module.add_enum('NextHeader_e', ['IPV6_EXT_HOP_BY_HOP', 'IPV6_IPV4', 'IPV6_TCP', 'IPV6_UDP', 'IPV6_IPV6', 'IPV6_EXT_ROUTING', 'IPV6_EXT_FRAGMENTATION', 'IPV6_EXT_CONFIDENTIALITY', 'IPV6_EXT_AUTHENTIFICATION', 'IPV6_ICMPV6', 'IPV6_EXT_END', 'IPV6_EXT_DESTINATION', 'IPV6_SCTP', 'IPV6_EXT_MOBILITY', 'IPV6_UDP_LITE'], outer_class=root_module['ns3::Ipv6Header'], import_from_module='ns.internet')
     ## lte-rrc-sap.h (module 'lte'): ns3::LteEnbRrcSapProvider [class]
     module.add_class('LteEnbRrcSapProvider', parent=root_module['ns3::LteRrcSap'])
     ## lte-rrc-sap.h (module 'lte'): ns3::LteEnbRrcSapProvider::CompleteSetupUeParameters [struct]
@@ -1034,10 +996,6 @@
     module.add_class('GtpuHeader', parent=root_module['ns3::Header'])
     ## integer.h (module 'core'): ns3::IntegerValue [class]
     module.add_class('IntegerValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
-    ## ip-l4-protocol.h (module 'internet'): ns3::IpL4Protocol [class]
-    module.add_class('IpL4Protocol', import_from_module='ns.internet', parent=root_module['ns3::Object'])
-    ## ip-l4-protocol.h (module 'internet'): ns3::IpL4Protocol::RxStatus [enumeration]
-    module.add_enum('RxStatus', ['RX_OK', 'RX_CSUM_FAILED', 'RX_ENDPOINT_CLOSED', 'RX_ENDPOINT_UNREACH'], outer_class=root_module['ns3::IpL4Protocol'], import_from_module='ns.internet')
     ## ipv4.h (module 'internet'): ns3::Ipv4 [class]
     module.add_class('Ipv4', import_from_module='ns.internet', parent=root_module['ns3::Object'])
     ## ipv4-address.h (module 'network'): ns3::Ipv4AddressChecker [class]
@@ -1056,8 +1014,6 @@
     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-interface.h (module 'internet'): ns3::Ipv6Interface [class]
-    module.add_class('Ipv6Interface', import_from_module='ns.internet', parent=root_module['ns3::Object'])
     ## 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]
@@ -1262,6 +1218,8 @@
     module.add_class('AddressValue', import_from_module='ns.network', parent=root_module['ns3::AttributeValue'])
     ## lte-control-messages.h (module 'lte'): ns3::BsrLteControlMessage [class]
     module.add_class('BsrLteControlMessage', parent=root_module['ns3::LteControlMessage'])
+    ## cqa-ff-mac-scheduler.h (module 'lte'): ns3::CqaFfMacScheduler [class]
+    module.add_class('CqaFfMacScheduler', parent=root_module['ns3::FfMacScheduler'])
     ## lte-control-messages.h (module 'lte'): ns3::DlCqiLteControlMessage [class]
     module.add_class('DlCqiLteControlMessage', parent=root_module['ns3::LteControlMessage'])
     ## lte-control-messages.h (module 'lte'): ns3::DlDciLteControlMessage [class]
@@ -1318,176 +1276,176 @@
     module.add_class('RrcConnectionSetupHeader', parent=root_module['ns3::RrcDlCcchMessage'])
     ## lte-enb-net-device.h (module 'lte'): ns3::LteEnbNetDevice [class]
     module.add_class('LteEnbNetDevice', parent=root_module['ns3::LteNetDevice'])
-    module.add_container('std::vector< ns3::CeBitmap_e >', 'ns3::CeBitmap_e', container_type='vector')
-    module.add_container('std::vector< std::vector< ns3::RlcPduListElement_s > >', 'std::vector< ns3::RlcPduListElement_s >', container_type='vector')
-    module.add_container('std::vector< unsigned char >', 'unsigned char', container_type='vector')
-    module.add_container('std::vector< unsigned short >', 'short unsigned int', container_type='vector')
-    module.add_container('std::vector< ns3::DlInfoListElement_s::HarqStatus_e >', 'ns3::DlInfoListElement_s::HarqStatus_e', container_type='vector')
-    module.add_container('std::list< ns3::EpcEnbS1SapProvider::BearerToBeSwitched >', 'ns3::EpcEnbS1SapProvider::BearerToBeSwitched', container_type='list')
-    module.add_container('std::list< ns3::EpcS11SapMme::BearerContextCreated >', 'ns3::EpcS11SapMme::BearerContextCreated', container_type='list')
-    module.add_container('std::list< ns3::EpcS11SapSgw::BearerContextToBeCreated >', 'ns3::EpcS11SapSgw::BearerContextToBeCreated', container_type='list')
-    module.add_container('std::list< ns3::EpcS1apSapEnb::ErabToBeSetupItem >', 'ns3::EpcS1apSapEnb::ErabToBeSetupItem', container_type='list')
-    module.add_container('std::list< ns3::EpcS1apSapEnb::ErabSwitchedInUplinkItem >', 'ns3::EpcS1apSapEnb::ErabSwitchedInUplinkItem', container_type='list')
-    module.add_container('std::list< ns3::EpcS1apSapMme::ErabSetupItem >', 'ns3::EpcS1apSapMme::ErabSetupItem', container_type='list')
-    module.add_container('std::list< ns3::EpcS1apSapMme::ErabSwitchedInDownlinkItem >', 'ns3::EpcS1apSapMme::ErabSwitchedInDownlinkItem', container_type='list')
-    module.add_container('std::vector< ns3::EpcX2Sap::UlInterferenceOverloadIndicationItem >', 'ns3::EpcX2Sap::UlInterferenceOverloadIndicationItem', container_type='vector')
-    module.add_container('std::vector< ns3::EpcX2Sap::UlHighInterferenceInformationItem >', 'ns3::EpcX2Sap::UlHighInterferenceInformationItem', container_type='vector')
-    module.add_container('std::vector< bool >', 'bool', container_type='vector')
-    module.add_container('std::vector< ns3::EpcX2Sap::ErabToBeSetupItem >', 'ns3::EpcX2Sap::ErabToBeSetupItem', container_type='vector')
-    module.add_container('std::vector< ns3::EpcX2Sap::ErabAdmittedItem >', 'ns3::EpcX2Sap::ErabAdmittedItem', container_type='vector')
-    module.add_container('std::vector< ns3::EpcX2Sap::ErabNotAdmittedItem >', 'ns3::EpcX2Sap::ErabNotAdmittedItem', container_type='vector')
-    module.add_container('std::vector< ns3::EpcX2Sap::ErabsSubjectToStatusTransferItem >', 'ns3::EpcX2Sap::ErabsSubjectToStatusTransferItem', container_type='vector')
-    module.add_container('std::vector< ns3::EpcX2Sap::CellInformationItem >', 'ns3::EpcX2Sap::CellInformationItem', container_type='vector')
-    module.add_container('std::vector< ns3::EpcX2Sap::CellMeasurementResultItem >', 'ns3::EpcX2Sap::CellMeasurementResultItem', container_type='vector')
-    module.add_container('std::vector< ns3::VendorSpecificListElement_s >', 'ns3::VendorSpecificListElement_s', container_type='vector')
-    module.add_container('std::vector< ns3::LogicalChannelConfigListElement_s >', 'ns3::LogicalChannelConfigListElement_s', container_type='vector')
-    module.add_container('std::vector< ns3::PagingInfoListElement_s >', 'ns3::PagingInfoListElement_s', container_type='vector')
-    module.add_container('std::vector< ns3::DlInfoListElement_s >', 'ns3::DlInfoListElement_s', container_type='vector')
-    module.add_container('std::vector< ns3::RachListElement_s >', 'ns3::RachListElement_s', container_type='vector')
-    module.add_container('std::vector< ns3::CqiListElement_s >', 'ns3::CqiListElement_s', container_type='vector')
-    module.add_container('std::vector< ns3::UlInfoListElement_s >', 'ns3::UlInfoListElement_s', container_type='vector')
-    module.add_container('std::vector< ns3::SrListElement_s >', 'ns3::SrListElement_s', container_type='vector')
-    module.add_container('std::vector< ns3::MacCeListElement_s >', 'ns3::MacCeListElement_s', container_type='vector')
-    module.add_container('std::vector< ns3::BuildDataListElement_s >', 'ns3::BuildDataListElement_s', container_type='vector')
-    module.add_container('std::vector< ns3::BuildRarListElement_s >', 'ns3::BuildRarListElement_s', container_type='vector')
-    module.add_container('std::vector< ns3::BuildBroadcastListElement_s >', 'ns3::BuildBroadcastListElement_s', container_type='vector')
-    module.add_container('std::vector< ns3::UlDciListElement_s >', 'ns3::UlDciListElement_s', container_type='vector')
-    module.add_container('std::vector< ns3::PhichListElement_s >', 'ns3::PhichListElement_s', container_type='vector')
-    module.add_container('std::vector< int >', 'int', container_type='vector')
-    module.add_container('ns3::HarqProcessInfoList_t', 'ns3::HarqProcessInfoElement_t', container_type='vector')
-    module.add_container('std::list< ns3::LteRrcSap::SrbToAddMod >', 'ns3::LteRrcSap::SrbToAddMod', container_type='list')
-    module.add_container('std::list< ns3::LteRrcSap::DrbToAddMod >', 'ns3::LteRrcSap::DrbToAddMod', container_type='list')
-    module.add_container('std::list< unsigned char >', 'unsigned char', container_type='list')
-    module.add_container('std::list< ns3::LteRrcSap::CellsToAddMod >', 'ns3::LteRrcSap::CellsToAddMod', container_type='list')
-    module.add_container('std::list< ns3::LteRrcSap::BlackCellsToAddMod >', 'ns3::LteRrcSap::BlackCellsToAddMod', container_type='list')
-    module.add_container('std::list< ns3::LteRrcSap::MeasObjectToAddMod >', 'ns3::LteRrcSap::MeasObjectToAddMod', container_type='list')
-    module.add_container('std::list< ns3::LteRrcSap::ReportConfigToAddMod >', 'ns3::LteRrcSap::ReportConfigToAddMod', container_type='list')
-    module.add_container('std::list< ns3::LteRrcSap::MeasIdToAddMod >', 'ns3::LteRrcSap::MeasIdToAddMod', container_type='list')
-    module.add_container('std::list< unsigned int >', 'unsigned int', container_type='list')
-    module.add_container('std::list< ns3::LteRrcSap::MeasResultEutra >', 'ns3::LteRrcSap::MeasResultEutra', container_type='list')
-    module.add_container('std::vector< ns3::LteUeCphySapUser::UeMeasurementsElement >', 'ns3::LteUeCphySapUser::UeMeasurementsElement', container_type='vector')
-    module.add_container('std::vector< ns3::HigherLayerSelected_s >', 'ns3::HigherLayerSelected_s', container_type='vector')
-    module.add_container('std::vector< ns3::SiMessageListElement_s >', 'ns3::SiMessageListElement_s', container_type='vector')
-    module.add_container('std::list< ns3::Ptr< ns3::Packet > >', 'ns3::Ptr< ns3::Packet >', container_type='list')
-    module.add_container('std::vector< double >', 'double', container_type='vector')
-    module.add_container('ns3::Bands', 'ns3::BandInfo', container_type='vector')
-    module.add_container('std::map< unsigned int, unsigned int >', ('unsigned int', 'unsigned int'), container_type='map')
-    module.add_container('std::list< ns3::Ptr< ns3::LteControlMessage > >', 'ns3::Ptr< ns3::LteControlMessage >', container_type='list')
-    module.add_container('std::list< ns3::UlDciLteControlMessage >', 'ns3::UlDciLteControlMessage', container_type='list')
-    typehandlers.add_type_alias('std::map< ns3::ImsiLcidPair_t, unsigned long long, std::less< ns3::ImsiLcidPair_t >, std::allocator< std::pair< ns3::ImsiLcidPair_t const, unsigned long long > > >', 'ns3::Uint64Map')
-    typehandlers.add_type_alias('std::map< ns3::ImsiLcidPair_t, unsigned long long, std::less< ns3::ImsiLcidPair_t >, std::allocator< std::pair< ns3::ImsiLcidPair_t const, unsigned long long > > >*', 'ns3::Uint64Map*')
-    typehandlers.add_type_alias('std::map< ns3::ImsiLcidPair_t, unsigned long long, std::less< ns3::ImsiLcidPair_t >, std::allocator< std::pair< ns3::ImsiLcidPair_t const, unsigned long long > > >&', 'ns3::Uint64Map&')
-    typehandlers.add_type_alias('ns3::Callback< void, ns3::Ptr< ns3::Packet const >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'ns3::GenericPhyTxEndCallback')
-    typehandlers.add_type_alias('ns3::Callback< void, ns3::Ptr< ns3::Packet const >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >*', 'ns3::GenericPhyTxEndCallback*')
-    typehandlers.add_type_alias('ns3::Callback< void, ns3::Ptr< ns3::Packet const >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >&', 'ns3::GenericPhyTxEndCallback&')
-    typehandlers.add_type_alias('std::vector< std::vector< std::vector< ns3::RlcPduListElement_s, std::allocator< ns3::RlcPduListElement_s > >, std::allocator< std::vector< ns3::RlcPduListElement_s, std::allocator< ns3::RlcPduListElement_s > > > >, std::allocator< std::vector< std::vector< ns3::RlcPduListElement_s, std::allocator< ns3::RlcPduListElement_s > >, std::allocator< std::vector< ns3::RlcPduListElement_s, std::allocator< ns3::RlcPduListElement_s > > > > > >', 'ns3::DlHarqRlcPduListBuffer_t')
-    typehandlers.add_type_alias('std::vector< std::vector< std::vector< ns3::RlcPduListElement_s, std::allocator< ns3::RlcPduListElement_s > >, std::allocator< std::vector< ns3::RlcPduListElement_s, std::allocator< ns3::RlcPduListElement_s > > > >, std::allocator< std::vector< std::vector< ns3::RlcPduListElement_s, std::allocator< ns3::RlcPduListElement_s > >, std::allocator< std::vector< ns3::RlcPduListElement_s, std::allocator< ns3::RlcPduListElement_s > > > > > >*', 'ns3::DlHarqRlcPduListBuffer_t*')
-    typehandlers.add_type_alias('std::vector< std::vector< std::vector< ns3::RlcPduListElement_s, std::allocator< ns3::RlcPduListElement_s > >, std::allocator< std::vector< ns3::RlcPduListElement_s, std::allocator< ns3::RlcPduListElement_s > > > >, std::allocator< std::vector< std::vector< ns3::RlcPduListElement_s, std::allocator< ns3::RlcPduListElement_s > >, std::allocator< std::vector< ns3::RlcPduListElement_s, std::allocator< ns3::RlcPduListElement_s > > > > > >&', 'ns3::DlHarqRlcPduListBuffer_t&')
-    typehandlers.add_type_alias('ns3::Callback< void, unsigned short, ns3::Ptr< ns3::SpectrumValue >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'ns3::LtePhyRxPssCallback')
-    typehandlers.add_type_alias('ns3::Callback< void, unsigned short, ns3::Ptr< ns3::SpectrumValue >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >*', 'ns3::LtePhyRxPssCallback*')
-    typehandlers.add_type_alias('ns3::Callback< void, unsigned short, ns3::Ptr< ns3::SpectrumValue >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >&', 'ns3::LtePhyRxPssCallback&')
-    typehandlers.add_type_alias('ns3::Callback< void, ns3::Ptr< ns3::Packet const >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'ns3::LtePhyTxEndCallback')
-    typehandlers.add_type_alias('ns3::Callback< void, ns3::Ptr< ns3::Packet const >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >*', 'ns3::LtePhyTxEndCallback*')
-    typehandlers.add_type_alias('ns3::Callback< void, ns3::Ptr< ns3::Packet const >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >&', 'ns3::LtePhyTxEndCallback&')
-    typehandlers.add_type_alias('void ( * ) ( std::ostream & ) *', 'ns3::LogNodePrinter')
-    typehandlers.add_type_alias('void ( * ) ( std::ostream & ) **', 'ns3::LogNodePrinter*')
-    typehandlers.add_type_alias('void ( * ) ( std::ostream & ) *&', 'ns3::LogNodePrinter&')
-    typehandlers.add_type_alias('ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'ns3::GenericPhyRxStartCallback')
-    typehandlers.add_type_alias('ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >*', 'ns3::GenericPhyRxStartCallback*')
-    typehandlers.add_type_alias('ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >&', 'ns3::GenericPhyRxStartCallback&')
-    typehandlers.add_type_alias('ns3::Callback< void, ns3::Ptr< ns3::Packet >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'ns3::LtePhyRxDataEndOkCallback')
-    typehandlers.add_type_alias('ns3::Callback< void, ns3::Ptr< ns3::Packet >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >*', 'ns3::LtePhyRxDataEndOkCallback*')
-    typehandlers.add_type_alias('ns3::Callback< void, ns3::Ptr< ns3::Packet >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >&', 'ns3::LtePhyRxDataEndOkCallback&')
-    typehandlers.add_type_alias('ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'ns3::LtePhyRxDataEndErrorCallback')
-    typehandlers.add_type_alias('ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >*', 'ns3::LtePhyRxDataEndErrorCallback*')
-    typehandlers.add_type_alias('ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >&', 'ns3::LtePhyRxDataEndErrorCallback&')
-    typehandlers.add_type_alias('std::vector< ns3::HarqProcessInfoElement_t, std::allocator< ns3::HarqProcessInfoElement_t > >', 'ns3::HarqProcessInfoList_t')
-    typehandlers.add_type_alias('std::vector< ns3::HarqProcessInfoElement_t, std::allocator< ns3::HarqProcessInfoElement_t > >*', 'ns3::HarqProcessInfoList_t*')
-    typehandlers.add_type_alias('std::vector< ns3::HarqProcessInfoElement_t, std::allocator< ns3::HarqProcessInfoElement_t > >&', 'ns3::HarqProcessInfoList_t&')
-    typehandlers.add_type_alias('ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'ns3::LtePhyRxCtrlEndErrorCallback')
-    typehandlers.add_type_alias('ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >*', 'ns3::LtePhyRxCtrlEndErrorCallback*')
-    typehandlers.add_type_alias('ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >&', 'ns3::LtePhyRxCtrlEndErrorCallback&')
-    typehandlers.add_type_alias('ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'ns3::GenericPhyRxEndErrorCallback')
-    typehandlers.add_type_alias('ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >*', 'ns3::GenericPhyRxEndErrorCallback*')
-    typehandlers.add_type_alias('ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >&', 'ns3::GenericPhyRxEndErrorCallback&')
-    typehandlers.add_type_alias('std::vector< double, std::allocator< double > >', 'ns3::Values')
-    typehandlers.add_type_alias('std::vector< double, std::allocator< double > >*', 'ns3::Values*')
-    typehandlers.add_type_alias('std::vector< double, std::allocator< double > >&', 'ns3::Values&')
-    typehandlers.add_type_alias('std::vector< unsigned char, std::allocator< unsigned char > >', 'ns3::DlHarqProcessesStatus_t')
-    typehandlers.add_type_alias('std::vector< unsigned char, std::allocator< unsigned char > >*', 'ns3::DlHarqProcessesStatus_t*')
-    typehandlers.add_type_alias('std::vector< unsigned char, std::allocator< unsigned char > >&', 'ns3::DlHarqProcessesStatus_t&')
-    typehandlers.add_type_alias('ns3::Callback< bool, ns3::Ptr< ns3::Packet >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'ns3::GenericPhyTxStartCallback')
-    typehandlers.add_type_alias('ns3::Callback< bool, ns3::Ptr< ns3::Packet >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >*', 'ns3::GenericPhyTxStartCallback*')
-    typehandlers.add_type_alias('ns3::Callback< bool, ns3::Ptr< ns3::Packet >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >&', 'ns3::GenericPhyTxStartCallback&')
-    typehandlers.add_type_alias('std::vector< ns3::BandInfo, std::allocator< ns3::BandInfo > >', 'ns3::Bands')
-    typehandlers.add_type_alias('std::vector< ns3::BandInfo, std::allocator< ns3::BandInfo > >*', 'ns3::Bands*')
-    typehandlers.add_type_alias('std::vector< ns3::BandInfo, std::allocator< ns3::BandInfo > >&', 'ns3::Bands&')
-    typehandlers.add_type_alias('ns3::Callback< void, ns3::DlInfoListElement_s, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'ns3::LtePhyDlHarqFeedbackCallback')
-    typehandlers.add_type_alias('ns3::Callback< void, ns3::DlInfoListElement_s, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >*', 'ns3::LtePhyDlHarqFeedbackCallback*')
-    typehandlers.add_type_alias('ns3::Callback< void, ns3::DlInfoListElement_s, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >&', 'ns3::LtePhyDlHarqFeedbackCallback&')
-    typehandlers.add_type_alias('std::map< ns3::TbId_t, ns3::tbInfo_t, std::less< ns3::TbId_t >, std::allocator< std::pair< ns3::TbId_t const, ns3::tbInfo_t > > >', 'ns3::expectedTbs_t')
-    typehandlers.add_type_alias('std::map< ns3::TbId_t, ns3::tbInfo_t, std::less< ns3::TbId_t >, std::allocator< std::pair< ns3::TbId_t const, ns3::tbInfo_t > > >*', 'ns3::expectedTbs_t*')
-    typehandlers.add_type_alias('std::map< ns3::TbId_t, ns3::tbInfo_t, std::less< ns3::TbId_t >, std::allocator< std::pair< ns3::TbId_t const, ns3::tbInfo_t > > >&', 'ns3::expectedTbs_t&')
-    typehandlers.add_type_alias('ns3::Vector3D', 'ns3::Vector')
-    typehandlers.add_type_alias('ns3::Vector3D*', 'ns3::Vector*')
-    typehandlers.add_type_alias('ns3::Vector3D&', 'ns3::Vector&')
+    module.add_container('std::vector< ns3::CeBitmap_e >', 'ns3::CeBitmap_e', container_type=u'vector')
+    module.add_container('std::vector< std::vector< ns3::RlcPduListElement_s > >', 'std::vector< ns3::RlcPduListElement_s >', container_type=u'vector')
+    module.add_container('std::vector< unsigned char >', 'unsigned char', container_type=u'vector')
+    module.add_container('std::vector< unsigned short >', 'short unsigned int', container_type=u'vector')
+    module.add_container('std::vector< ns3::DlInfoListElement_s::HarqStatus_e >', 'ns3::DlInfoListElement_s::HarqStatus_e', container_type=u'vector')
+    module.add_container('std::list< ns3::EpcEnbS1SapProvider::BearerToBeSwitched >', 'ns3::EpcEnbS1SapProvider::BearerToBeSwitched', container_type=u'list')
+    module.add_container('std::list< ns3::EpcS11SapMme::BearerContextCreated >', 'ns3::EpcS11SapMme::BearerContextCreated', container_type=u'list')
+    module.add_container('std::list< ns3::EpcS11SapSgw::BearerContextToBeCreated >', 'ns3::EpcS11SapSgw::BearerContextToBeCreated', container_type=u'list')
+    module.add_container('std::list< ns3::EpcS1apSapEnb::ErabToBeSetupItem >', 'ns3::EpcS1apSapEnb::ErabToBeSetupItem', container_type=u'list')
+    module.add_container('std::list< ns3::EpcS1apSapEnb::ErabSwitchedInUplinkItem >', 'ns3::EpcS1apSapEnb::ErabSwitchedInUplinkItem', container_type=u'list')
+    module.add_container('std::list< ns3::EpcS1apSapMme::ErabSetupItem >', 'ns3::EpcS1apSapMme::ErabSetupItem', container_type=u'list')
+    module.add_container('std::list< ns3::EpcS1apSapMme::ErabSwitchedInDownlinkItem >', 'ns3::EpcS1apSapMme::ErabSwitchedInDownlinkItem', container_type=u'list')
+    module.add_container('std::vector< ns3::EpcX2Sap::UlInterferenceOverloadIndicationItem >', 'ns3::EpcX2Sap::UlInterferenceOverloadIndicationItem', container_type=u'vector')
+    module.add_container('std::vector< ns3::EpcX2Sap::UlHighInterferenceInformationItem >', 'ns3::EpcX2Sap::UlHighInterferenceInformationItem', container_type=u'vector')
+    module.add_container('std::vector< bool >', 'bool', container_type=u'vector')
+    module.add_container('std::vector< ns3::EpcX2Sap::ErabToBeSetupItem >', 'ns3::EpcX2Sap::ErabToBeSetupItem', container_type=u'vector')
+    module.add_container('std::vector< ns3::EpcX2Sap::ErabAdmittedItem >', 'ns3::EpcX2Sap::ErabAdmittedItem', container_type=u'vector')
+    module.add_container('std::vector< ns3::EpcX2Sap::ErabNotAdmittedItem >', 'ns3::EpcX2Sap::ErabNotAdmittedItem', container_type=u'vector')
+    module.add_container('std::vector< ns3::EpcX2Sap::ErabsSubjectToStatusTransferItem >', 'ns3::EpcX2Sap::ErabsSubjectToStatusTransferItem', container_type=u'vector')
+    module.add_container('std::vector< ns3::EpcX2Sap::CellInformationItem >', 'ns3::EpcX2Sap::CellInformationItem', container_type=u'vector')
+    module.add_container('std::vector< ns3::EpcX2Sap::CellMeasurementResultItem >', 'ns3::EpcX2Sap::CellMeasurementResultItem', container_type=u'vector')
+    module.add_container('std::vector< ns3::VendorSpecificListElement_s >', 'ns3::VendorSpecificListElement_s', container_type=u'vector')
+    module.add_container('std::vector< ns3::LogicalChannelConfigListElement_s >', 'ns3::LogicalChannelConfigListElement_s', container_type=u'vector')
+    module.add_container('std::vector< ns3::PagingInfoListElement_s >', 'ns3::PagingInfoListElement_s', container_type=u'vector')
+    module.add_container('std::vector< ns3::DlInfoListElement_s >', 'ns3::DlInfoListElement_s', container_type=u'vector')
+    module.add_container('std::vector< ns3::RachListElement_s >', 'ns3::RachListElement_s', container_type=u'vector')
+    module.add_container('std::vector< ns3::CqiListElement_s >', 'ns3::CqiListElement_s', container_type=u'vector')
+    module.add_container('std::vector< ns3::UlInfoListElement_s >', 'ns3::UlInfoListElement_s', container_type=u'vector')
+    module.add_container('std::vector< ns3::SrListElement_s >', 'ns3::SrListElement_s', container_type=u'vector')
+    module.add_container('std::vector< ns3::MacCeListElement_s >', 'ns3::MacCeListElement_s', container_type=u'vector')
+    module.add_container('std::vector< ns3::BuildDataListElement_s >', 'ns3::BuildDataListElement_s', container_type=u'vector')
+    module.add_container('std::vector< ns3::BuildRarListElement_s >', 'ns3::BuildRarListElement_s', container_type=u'vector')
+    module.add_container('std::vector< ns3::BuildBroadcastListElement_s >', 'ns3::BuildBroadcastListElement_s', container_type=u'vector')
+    module.add_container('std::vector< ns3::UlDciListElement_s >', 'ns3::UlDciListElement_s', container_type=u'vector')
+    module.add_container('std::vector< ns3::PhichListElement_s >', 'ns3::PhichListElement_s', container_type=u'vector')
+    module.add_container('std::vector< int >', 'int', container_type=u'vector')
+    module.add_container('ns3::HarqProcessInfoList_t', 'ns3::HarqProcessInfoElement_t', container_type=u'vector')
+    module.add_container('std::list< ns3::LteRrcSap::SrbToAddMod >', 'ns3::LteRrcSap::SrbToAddMod', container_type=u'list')
+    module.add_container('std::list< ns3::LteRrcSap::DrbToAddMod >', 'ns3::LteRrcSap::DrbToAddMod', container_type=u'list')
+    module.add_container('std::list< unsigned char >', 'unsigned char', container_type=u'list')
+    module.add_container('std::list< ns3::LteRrcSap::CellsToAddMod >', 'ns3::LteRrcSap::CellsToAddMod', container_type=u'list')
+    module.add_container('std::list< ns3::LteRrcSap::BlackCellsToAddMod >', 'ns3::LteRrcSap::BlackCellsToAddMod', container_type=u'list')
+    module.add_container('std::list< ns3::LteRrcSap::MeasObjectToAddMod >', 'ns3::LteRrcSap::MeasObjectToAddMod', container_type=u'list')
+    module.add_container('std::list< ns3::LteRrcSap::ReportConfigToAddMod >', 'ns3::LteRrcSap::ReportConfigToAddMod', container_type=u'list')
+    module.add_container('std::list< ns3::LteRrcSap::MeasIdToAddMod >', 'ns3::LteRrcSap::MeasIdToAddMod', container_type=u'list')
+    module.add_container('std::list< unsigned int >', 'unsigned int', container_type=u'list')
+    module.add_container('std::list< ns3::LteRrcSap::MeasResultEutra >', 'ns3::LteRrcSap::MeasResultEutra', container_type=u'list')
+    module.add_container('std::vector< ns3::LteUeCphySapUser::UeMeasurementsElement >', 'ns3::LteUeCphySapUser::UeMeasurementsElement', container_type=u'vector')
+    module.add_container('std::vector< ns3::HigherLayerSelected_s >', 'ns3::HigherLayerSelected_s', container_type=u'vector')
+    module.add_container('std::vector< ns3::SiMessageListElement_s >', 'ns3::SiMessageListElement_s', 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::vector< double >', 'double', container_type=u'vector')
+    module.add_container('ns3::Bands', 'ns3::BandInfo', container_type=u'vector')
+    module.add_container('std::map< unsigned int, unsigned int >', ('unsigned int', 'unsigned int'), container_type=u'map')
+    module.add_container('std::list< ns3::Ptr< ns3::LteControlMessage > >', 'ns3::Ptr< ns3::LteControlMessage >', container_type=u'list')
+    module.add_container('std::list< ns3::UlDciLteControlMessage >', 'ns3::UlDciLteControlMessage', container_type=u'list')
+    typehandlers.add_type_alias(u'std::map< ns3::ImsiLcidPair_t, unsigned long long, std::less< ns3::ImsiLcidPair_t >, std::allocator< std::pair< ns3::ImsiLcidPair_t const, unsigned long long > > >', u'ns3::Uint64Map')
+    typehandlers.add_type_alias(u'std::map< ns3::ImsiLcidPair_t, unsigned long long, std::less< ns3::ImsiLcidPair_t >, std::allocator< std::pair< ns3::ImsiLcidPair_t const, unsigned long long > > >*', u'ns3::Uint64Map*')
+    typehandlers.add_type_alias(u'std::map< ns3::ImsiLcidPair_t, unsigned long long, std::less< ns3::ImsiLcidPair_t >, std::allocator< std::pair< ns3::ImsiLcidPair_t const, unsigned long long > > >&', u'ns3::Uint64Map&')
+    typehandlers.add_type_alias(u'ns3::Callback< void, ns3::Ptr< ns3::Packet const >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', u'ns3::GenericPhyTxEndCallback')
+    typehandlers.add_type_alias(u'ns3::Callback< void, ns3::Ptr< ns3::Packet const >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >*', u'ns3::GenericPhyTxEndCallback*')
+    typehandlers.add_type_alias(u'ns3::Callback< void, ns3::Ptr< ns3::Packet const >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >&', u'ns3::GenericPhyTxEndCallback&')
+    typehandlers.add_type_alias(u'std::vector< std::vector< std::vector< ns3::RlcPduListElement_s, std::allocator< ns3::RlcPduListElement_s > >, std::allocator< std::vector< ns3::RlcPduListElement_s, std::allocator< ns3::RlcPduListElement_s > > > >, std::allocator< std::vector< std::vector< ns3::RlcPduListElement_s, std::allocator< ns3::RlcPduListElement_s > >, std::allocator< std::vector< ns3::RlcPduListElement_s, std::allocator< ns3::RlcPduListElement_s > > > > > >', u'ns3::DlHarqRlcPduListBuffer_t')
+    typehandlers.add_type_alias(u'std::vector< std::vector< std::vector< ns3::RlcPduListElement_s, std::allocator< ns3::RlcPduListElement_s > >, std::allocator< std::vector< ns3::RlcPduListElement_s, std::allocator< ns3::RlcPduListElement_s > > > >, std::allocator< std::vector< std::vector< ns3::RlcPduListElement_s, std::allocator< ns3::RlcPduListElement_s > >, std::allocator< std::vector< ns3::RlcPduListElement_s, std::allocator< ns3::RlcPduListElement_s > > > > > >*', u'ns3::DlHarqRlcPduListBuffer_t*')
+    typehandlers.add_type_alias(u'std::vector< std::vector< std::vector< ns3::RlcPduListElement_s, std::allocator< ns3::RlcPduListElement_s > >, std::allocator< std::vector< ns3::RlcPduListElement_s, std::allocator< ns3::RlcPduListElement_s > > > >, std::allocator< std::vector< std::vector< ns3::RlcPduListElement_s, std::allocator< ns3::RlcPduListElement_s > >, std::allocator< std::vector< ns3::RlcPduListElement_s, std::allocator< ns3::RlcPduListElement_s > > > > > >&', u'ns3::DlHarqRlcPduListBuffer_t&')
+    typehandlers.add_type_alias(u'ns3::Callback< void, unsigned short, ns3::Ptr< ns3::SpectrumValue >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', u'ns3::LtePhyRxPssCallback')
+    typehandlers.add_type_alias(u'ns3::Callback< void, unsigned short, ns3::Ptr< ns3::SpectrumValue >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >*', u'ns3::LtePhyRxPssCallback*')
+    typehandlers.add_type_alias(u'ns3::Callback< void, unsigned short, ns3::Ptr< ns3::SpectrumValue >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >&', u'ns3::LtePhyRxPssCallback&')
+    typehandlers.add_type_alias(u'ns3::Callback< void, ns3::Ptr< ns3::Packet const >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', u'ns3::LtePhyTxEndCallback')
+    typehandlers.add_type_alias(u'ns3::Callback< void, ns3::Ptr< ns3::Packet const >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >*', u'ns3::LtePhyTxEndCallback*')
+    typehandlers.add_type_alias(u'ns3::Callback< void, ns3::Ptr< ns3::Packet const >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >&', u'ns3::LtePhyTxEndCallback&')
+    typehandlers.add_type_alias(u'void ( * ) ( std::ostream & ) *', u'ns3::LogNodePrinter')
+    typehandlers.add_type_alias(u'void ( * ) ( std::ostream & ) **', u'ns3::LogNodePrinter*')
+    typehandlers.add_type_alias(u'void ( * ) ( std::ostream & ) *&', u'ns3::LogNodePrinter&')
+    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::GenericPhyRxStartCallback')
+    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::GenericPhyRxStartCallback*')
+    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::GenericPhyRxStartCallback&')
+    typehandlers.add_type_alias(u'ns3::Callback< void, ns3::Ptr< ns3::Packet >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', u'ns3::LtePhyRxDataEndOkCallback')
+    typehandlers.add_type_alias(u'ns3::Callback< void, ns3::Ptr< ns3::Packet >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >*', u'ns3::LtePhyRxDataEndOkCallback*')
+    typehandlers.add_type_alias(u'ns3::Callback< void, ns3::Ptr< ns3::Packet >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >&', u'ns3::LtePhyRxDataEndOkCallback&')
+    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::LtePhyRxDataEndErrorCallback')
+    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::LtePhyRxDataEndErrorCallback*')
+    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::LtePhyRxDataEndErrorCallback&')
+    typehandlers.add_type_alias(u'std::vector< ns3::HarqProcessInfoElement_t, std::allocator< ns3::HarqProcessInfoElement_t > >', u'ns3::HarqProcessInfoList_t')
+    typehandlers.add_type_alias(u'std::vector< ns3::HarqProcessInfoElement_t, std::allocator< ns3::HarqProcessInfoElement_t > >*', u'ns3::HarqProcessInfoList_t*')
+    typehandlers.add_type_alias(u'std::vector< ns3::HarqProcessInfoElement_t, std::allocator< ns3::HarqProcessInfoElement_t > >&', u'ns3::HarqProcessInfoList_t&')
+    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::LtePhyRxCtrlEndErrorCallback')
+    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::LtePhyRxCtrlEndErrorCallback*')
+    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::LtePhyRxCtrlEndErrorCallback&')
+    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&')
+    typehandlers.add_type_alias(u'std::vector< double, std::allocator< double > >', u'ns3::Values')
+    typehandlers.add_type_alias(u'std::vector< double, std::allocator< double > >*', u'ns3::Values*')
+    typehandlers.add_type_alias(u'std::vector< double, std::allocator< double > >&', u'ns3::Values&')
+    typehandlers.add_type_alias(u'std::vector< unsigned char, std::allocator< unsigned char > >', u'ns3::DlHarqProcessesStatus_t')
+    typehandlers.add_type_alias(u'std::vector< unsigned char, std::allocator< unsigned char > >*', u'ns3::DlHarqProcessesStatus_t*')
+    typehandlers.add_type_alias(u'std::vector< unsigned char, std::allocator< unsigned char > >&', u'ns3::DlHarqProcessesStatus_t&')
+    typehandlers.add_type_alias(u'ns3::Callback< bool, ns3::Ptr< ns3::Packet >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', u'ns3::GenericPhyTxStartCallback')
+    typehandlers.add_type_alias(u'ns3::Callback< bool, ns3::Ptr< ns3::Packet >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >*', u'ns3::GenericPhyTxStartCallback*')
+    typehandlers.add_type_alias(u'ns3::Callback< bool, ns3::Ptr< ns3::Packet >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >&', u'ns3::GenericPhyTxStartCallback&')
+    typehandlers.add_type_alias(u'std::vector< ns3::BandInfo, std::allocator< ns3::BandInfo > >', u'ns3::Bands')
+    typehandlers.add_type_alias(u'std::vector< ns3::BandInfo, std::allocator< ns3::BandInfo > >*', u'ns3::Bands*')
+    typehandlers.add_type_alias(u'std::vector< ns3::BandInfo, std::allocator< ns3::BandInfo > >&', u'ns3::Bands&')
+    typehandlers.add_type_alias(u'ns3::Callback< void, ns3::DlInfoListElement_s, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', u'ns3::LtePhyDlHarqFeedbackCallback')
+    typehandlers.add_type_alias(u'ns3::Callback< void, ns3::DlInfoListElement_s, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >*', u'ns3::LtePhyDlHarqFeedbackCallback*')
+    typehandlers.add_type_alias(u'ns3::Callback< void, ns3::DlInfoListElement_s, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >&', u'ns3::LtePhyDlHarqFeedbackCallback&')
+    typehandlers.add_type_alias(u'std::map< ns3::TbId_t, ns3::tbInfo_t, std::less< ns3::TbId_t >, std::allocator< std::pair< ns3::TbId_t const, ns3::tbInfo_t > > >', u'ns3::expectedTbs_t')
+    typehandlers.add_type_alias(u'std::map< ns3::TbId_t, ns3::tbInfo_t, std::less< ns3::TbId_t >, std::allocator< std::pair< ns3::TbId_t const, ns3::tbInfo_t > > >*', u'ns3::expectedTbs_t*')
+    typehandlers.add_type_alias(u'std::map< ns3::TbId_t, ns3::tbInfo_t, std::less< ns3::TbId_t >, std::allocator< std::pair< ns3::TbId_t const, ns3::tbInfo_t > > >&', u'ns3::expectedTbs_t&')
+    typehandlers.add_type_alias(u'ns3::Vector3D', u'ns3::Vector')
+    typehandlers.add_type_alias(u'ns3::Vector3D*', u'ns3::Vector*')
+    typehandlers.add_type_alias(u'ns3::Vector3D&', u'ns3::Vector&')
     module.add_typedef(root_module['ns3::Vector3D'], 'Vector')
-    typehandlers.add_type_alias('void ( * ) ( std::ostream & ) *', 'ns3::LogTimePrinter')
-    typehandlers.add_type_alias('void ( * ) ( std::ostream & ) **', 'ns3::LogTimePrinter*')
-    typehandlers.add_type_alias('void ( * ) ( std::ostream & ) *&', 'ns3::LogTimePrinter&')
-    typehandlers.add_type_alias('ns3::Vector3DValue', 'ns3::VectorValue')
-    typehandlers.add_type_alias('ns3::Vector3DValue*', 'ns3::VectorValue*')
-    typehandlers.add_type_alias('ns3::Vector3DValue&', 'ns3::VectorValue&')
+    typehandlers.add_type_alias(u'void ( * ) ( std::ostream & ) *', u'ns3::LogTimePrinter')
+    typehandlers.add_type_alias(u'void ( * ) ( std::ostream & ) **', u'ns3::LogTimePrinter*')
+    typehandlers.add_type_alias(u'void ( * ) ( std::ostream & ) *&', u'ns3::LogTimePrinter&')
+    typehandlers.add_type_alias(u'ns3::Vector3DValue', u'ns3::VectorValue')
+    typehandlers.add_type_alias(u'ns3::Vector3DValue*', u'ns3::VectorValue*')
+    typehandlers.add_type_alias(u'ns3::Vector3DValue&', u'ns3::VectorValue&')
     module.add_typedef(root_module['ns3::Vector3DValue'], 'VectorValue')
-    typehandlers.add_type_alias('std::vector< ns3::UlDciListElement_s, std::allocator< ns3::UlDciListElement_s > >', 'ns3::UlHarqProcessesDciBuffer_t')
-    typehandlers.add_type_alias('std::vector< ns3::UlDciListElement_s, std::allocator< ns3::UlDciListElement_s > >*', 'ns3::UlHarqProcessesDciBuffer_t*')
-    typehandlers.add_type_alias('std::vector< ns3::UlDciListElement_s, std::allocator< ns3::UlDciListElement_s > >&', 'ns3::UlHarqProcessesDciBuffer_t&')
-    typehandlers.add_type_alias('ns3::Callback< void, std::list< ns3::Ptr< ns3::LteControlMessage >, std::allocator< ns3::Ptr< ns3::LteControlMessage > > >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'ns3::LtePhyRxCtrlEndOkCallback')
-    typehandlers.add_type_alias('ns3::Callback< void, std::list< ns3::Ptr< ns3::LteControlMessage >, std::allocator< ns3::Ptr< ns3::LteControlMessage > > >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >*', 'ns3::LtePhyRxCtrlEndOkCallback*')
-    typehandlers.add_type_alias('ns3::Callback< void, std::list< ns3::Ptr< ns3::LteControlMessage >, std::allocator< ns3::Ptr< ns3::LteControlMessage > > >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >&', 'ns3::LtePhyRxCtrlEndOkCallback&')
-    typehandlers.add_type_alias('uint32_t', 'ns3::SpectrumModelUid_t')
-    typehandlers.add_type_alias('uint32_t*', 'ns3::SpectrumModelUid_t*')
-    typehandlers.add_type_alias('uint32_t&', 'ns3::SpectrumModelUid_t&')
-    typehandlers.add_type_alias('std::map< ns3::ImsiLcidPair_t, double, std::less< ns3::ImsiLcidPair_t >, std::allocator< std::pair< ns3::ImsiLcidPair_t const, double > > >', 'ns3::DoubleMap')
-    typehandlers.add_type_alias('std::map< ns3::ImsiLcidPair_t, double, std::less< ns3::ImsiLcidPair_t >, std::allocator< std::pair< ns3::ImsiLcidPair_t const, double > > >*', 'ns3::DoubleMap*')
-    typehandlers.add_type_alias('std::map< ns3::ImsiLcidPair_t, double, std::less< ns3::ImsiLcidPair_t >, std::allocator< std::pair< ns3::ImsiLcidPair_t const, double > > >&', 'ns3::DoubleMap&')
-    typehandlers.add_type_alias('std::map< ns3::ImsiLcidPair_t, unsigned int, std::less< ns3::ImsiLcidPair_t >, std::allocator< std::pair< ns3::ImsiLcidPair_t const, unsigned int > > >', 'ns3::Uint32Map')
-    typehandlers.add_type_alias('std::map< ns3::ImsiLcidPair_t, unsigned int, std::less< ns3::ImsiLcidPair_t >, std::allocator< std::pair< ns3::ImsiLcidPair_t const, unsigned int > > >*', 'ns3::Uint32Map*')
-    typehandlers.add_type_alias('std::map< ns3::ImsiLcidPair_t, unsigned int, std::less< ns3::ImsiLcidPair_t >, std::allocator< std::pair< ns3::ImsiLcidPair_t const, unsigned int > > >&', 'ns3::Uint32Map&')
-    typehandlers.add_type_alias('ns3::Callback< void, ns3::UlInfoListElement_s, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'ns3::LtePhyUlHarqFeedbackCallback')
-    typehandlers.add_type_alias('ns3::Callback< void, ns3::UlInfoListElement_s, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >*', 'ns3::LtePhyUlHarqFeedbackCallback*')
-    typehandlers.add_type_alias('ns3::Callback< void, ns3::UlInfoListElement_s, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >&', 'ns3::LtePhyUlHarqFeedbackCallback&')
-    typehandlers.add_type_alias('std::vector< std::vector< ns3::RlcPduListElement_s, std::allocator< ns3::RlcPduListElement_s > >, std::allocator< std::vector< ns3::RlcPduListElement_s, std::allocator< ns3::RlcPduListElement_s > > > >', 'ns3::RlcPduList_t')
-    typehandlers.add_type_alias('std::vector< std::vector< ns3::RlcPduListElement_s, std::allocator< ns3::RlcPduListElement_s > >, std::allocator< std::vector< ns3::RlcPduListElement_s, std::allocator< ns3::RlcPduListElement_s > > > >*', 'ns3::RlcPduList_t*')
-    typehandlers.add_type_alias('std::vector< std::vector< ns3::RlcPduListElement_s, std::allocator< ns3::RlcPduListElement_s > >, std::allocator< std::vector< ns3::RlcPduListElement_s, std::allocator< ns3::RlcPduListElement_s > > > >&', 'ns3::RlcPduList_t&')
-    typehandlers.add_type_alias('std::vector< ns3::DlDciListElement_s, std::allocator< ns3::DlDciListElement_s > >', 'ns3::DlHarqProcessesDciBuffer_t')
-    typehandlers.add_type_alias('std::vector< ns3::DlDciListElement_s, std::allocator< ns3::DlDciListElement_s > >*', 'ns3::DlHarqProcessesDciBuffer_t*')
-    typehandlers.add_type_alias('std::vector< ns3::DlDciListElement_s, std::allocator< ns3::DlDciListElement_s > >&', 'ns3::DlHarqProcessesDciBuffer_t&')
-    typehandlers.add_type_alias('ns3::Vector3DChecker', 'ns3::VectorChecker')
-    typehandlers.add_type_alias('ns3::Vector3DChecker*', 'ns3::VectorChecker*')
-    typehandlers.add_type_alias('ns3::Vector3DChecker&', 'ns3::VectorChecker&')
+    typehandlers.add_type_alias(u'std::vector< ns3::UlDciListElement_s, std::allocator< ns3::UlDciListElement_s > >', u'ns3::UlHarqProcessesDciBuffer_t')
+    typehandlers.add_type_alias(u'std::vector< ns3::UlDciListElement_s, std::allocator< ns3::UlDciListElement_s > >*', u'ns3::UlHarqProcessesDciBuffer_t*')
+    typehandlers.add_type_alias(u'std::vector< ns3::UlDciListElement_s, std::allocator< ns3::UlDciListElement_s > >&', u'ns3::UlHarqProcessesDciBuffer_t&')
+    typehandlers.add_type_alias(u'ns3::Callback< void, std::list< ns3::Ptr< ns3::LteControlMessage >, std::allocator< ns3::Ptr< ns3::LteControlMessage > > >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', u'ns3::LtePhyRxCtrlEndOkCallback')
+    typehandlers.add_type_alias(u'ns3::Callback< void, std::list< ns3::Ptr< ns3::LteControlMessage >, std::allocator< ns3::Ptr< ns3::LteControlMessage > > >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >*', u'ns3::LtePhyRxCtrlEndOkCallback*')
+    typehandlers.add_type_alias(u'ns3::Callback< void, std::list< ns3::Ptr< ns3::LteControlMessage >, std::allocator< ns3::Ptr< ns3::LteControlMessage > > >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >&', u'ns3::LtePhyRxCtrlEndOkCallback&')
+    typehandlers.add_type_alias(u'uint32_t', u'ns3::SpectrumModelUid_t')
+    typehandlers.add_type_alias(u'uint32_t*', u'ns3::SpectrumModelUid_t*')
+    typehandlers.add_type_alias(u'uint32_t&', u'ns3::SpectrumModelUid_t&')
+    typehandlers.add_type_alias(u'std::map< ns3::ImsiLcidPair_t, double, std::less< ns3::ImsiLcidPair_t >, std::allocator< std::pair< ns3::ImsiLcidPair_t const, double > > >', u'ns3::DoubleMap')
+    typehandlers.add_type_alias(u'std::map< ns3::ImsiLcidPair_t, double, std::less< ns3::ImsiLcidPair_t >, std::allocator< std::pair< ns3::ImsiLcidPair_t const, double > > >*', u'ns3::DoubleMap*')
+    typehandlers.add_type_alias(u'std::map< ns3::ImsiLcidPair_t, double, std::less< ns3::ImsiLcidPair_t >, std::allocator< std::pair< ns3::ImsiLcidPair_t const, double > > >&', u'ns3::DoubleMap&')
+    typehandlers.add_type_alias(u'std::map< ns3::ImsiLcidPair_t, unsigned int, std::less< ns3::ImsiLcidPair_t >, std::allocator< std::pair< ns3::ImsiLcidPair_t const, unsigned int > > >', u'ns3::Uint32Map')
+    typehandlers.add_type_alias(u'std::map< ns3::ImsiLcidPair_t, unsigned int, std::less< ns3::ImsiLcidPair_t >, std::allocator< std::pair< ns3::ImsiLcidPair_t const, unsigned int > > >*', u'ns3::Uint32Map*')
+    typehandlers.add_type_alias(u'std::map< ns3::ImsiLcidPair_t, unsigned int, std::less< ns3::ImsiLcidPair_t >, std::allocator< std::pair< ns3::ImsiLcidPair_t const, unsigned int > > >&', u'ns3::Uint32Map&')
+    typehandlers.add_type_alias(u'ns3::Callback< void, ns3::UlInfoListElement_s, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', u'ns3::LtePhyUlHarqFeedbackCallback')
+    typehandlers.add_type_alias(u'ns3::Callback< void, ns3::UlInfoListElement_s, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >*', u'ns3::LtePhyUlHarqFeedbackCallback*')
+    typehandlers.add_type_alias(u'ns3::Callback< void, ns3::UlInfoListElement_s, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >&', u'ns3::LtePhyUlHarqFeedbackCallback&')
+    typehandlers.add_type_alias(u'std::vector< std::vector< ns3::RlcPduListElement_s, std::allocator< ns3::RlcPduListElement_s > >, std::allocator< std::vector< ns3::RlcPduListElement_s, std::allocator< ns3::RlcPduListElement_s > > > >', u'ns3::RlcPduList_t')
+    typehandlers.add_type_alias(u'std::vector< std::vector< ns3::RlcPduListElement_s, std::allocator< ns3::RlcPduListElement_s > >, std::allocator< std::vector< ns3::RlcPduListElement_s, std::allocator< ns3::RlcPduListElement_s > > > >*', u'ns3::RlcPduList_t*')
+    typehandlers.add_type_alias(u'std::vector< std::vector< ns3::RlcPduListElement_s, std::allocator< ns3::RlcPduListElement_s > >, std::allocator< std::vector< ns3::RlcPduListElement_s, std::allocator< ns3::RlcPduListElement_s > > > >&', u'ns3::RlcPduList_t&')
+    typehandlers.add_type_alias(u'std::vector< ns3::DlDciListElement_s, std::allocator< ns3::DlDciListElement_s > >', u'ns3::DlHarqProcessesDciBuffer_t')
+    typehandlers.add_type_alias(u'std::vector< ns3::DlDciListElement_s, std::allocator< ns3::DlDciListElement_s > >*', u'ns3::DlHarqProcessesDciBuffer_t*')
+    typehandlers.add_type_alias(u'std::vector< ns3::DlDciListElement_s, std::allocator< ns3::DlDciListElement_s > >&', u'ns3::DlHarqProcessesDciBuffer_t&')
+    typehandlers.add_type_alias(u'ns3::Vector3DChecker', u'ns3::VectorChecker')
+    typehandlers.add_type_alias(u'ns3::Vector3DChecker*', u'ns3::VectorChecker*')
+    typehandlers.add_type_alias(u'ns3::Vector3DChecker&', u'ns3::VectorChecker&')
     module.add_typedef(root_module['ns3::Vector3DChecker'], 'VectorChecker')
-    typehandlers.add_type_alias('std::vector< unsigned char, std::allocator< unsigned char > >', 'ns3::DlHarqProcessesTimer_t')
-    typehandlers.add_type_alias('std::vector< unsigned char, std::allocator< unsigned char > >*', 'ns3::DlHarqProcessesTimer_t*')
-    typehandlers.add_type_alias('std::vector< unsigned char, std::allocator< unsigned char > >&', 'ns3::DlHarqProcessesTimer_t&')
-    typehandlers.add_type_alias('std::map< ns3::ImsiLcidPair_t, ns3::LteFlowId_t, std::less< ns3::ImsiLcidPair_t >, std::allocator< std::pair< ns3::ImsiLcidPair_t const, ns3::LteFlowId_t > > >', 'ns3::FlowIdMap')
-    typehandlers.add_type_alias('std::map< ns3::ImsiLcidPair_t, ns3::LteFlowId_t, std::less< ns3::ImsiLcidPair_t >, std::allocator< std::pair< ns3::ImsiLcidPair_t const, ns3::LteFlowId_t > > >*', 'ns3::FlowIdMap*')
-    typehandlers.add_type_alias('std::map< ns3::ImsiLcidPair_t, ns3::LteFlowId_t, std::less< ns3::ImsiLcidPair_t >, std::allocator< std::pair< ns3::ImsiLcidPair_t const, ns3::LteFlowId_t > > >&', 'ns3::FlowIdMap&')
-    typehandlers.add_type_alias('std::map< ns3::ImsiLcidPair_t, ns3::Ptr< ns3::MinMaxAvgTotalCalculator< unsigned int > >, std::less< ns3::ImsiLcidPair_t >, std::allocator< std::pair< ns3::ImsiLcidPair_t const, ns3::Ptr< ns3::MinMaxAvgTotalCalculator< unsigned int > > > > >', 'ns3::Uint32StatsMap')
-    typehandlers.add_type_alias('std::map< ns3::ImsiLcidPair_t, ns3::Ptr< ns3::MinMaxAvgTotalCalculator< unsigned int > >, std::less< ns3::ImsiLcidPair_t >, std::allocator< std::pair< ns3::ImsiLcidPair_t const, ns3::Ptr< ns3::MinMaxAvgTotalCalculator< unsigned int > > > > >*', 'ns3::Uint32StatsMap*')
-    typehandlers.add_type_alias('std::map< ns3::ImsiLcidPair_t, ns3::Ptr< ns3::MinMaxAvgTotalCalculator< unsigned int > >, std::less< ns3::ImsiLcidPair_t >, std::allocator< std::pair< ns3::ImsiLcidPair_t const, ns3::Ptr< ns3::MinMaxAvgTotalCalculator< unsigned int > > > > >&', 'ns3::Uint32StatsMap&')
-    typehandlers.add_type_alias('ns3::Callback< void, ns3::Ptr< ns3::Packet >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'ns3::GenericPhyRxEndOkCallback')
-    typehandlers.add_type_alias('ns3::Callback< void, ns3::Ptr< ns3::Packet >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >*', 'ns3::GenericPhyRxEndOkCallback*')
-    typehandlers.add_type_alias('ns3::Callback< void, ns3::Ptr< ns3::Packet >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >&', 'ns3::GenericPhyRxEndOkCallback&')
-    typehandlers.add_type_alias('std::vector< std::vector< ns3::Ptr< ns3::PacketBurst >, std::allocator< ns3::Ptr< ns3::PacketBurst > > >, std::allocator< std::vector< ns3::Ptr< ns3::PacketBurst >, std::allocator< ns3::Ptr< ns3::PacketBurst > > > > >', 'ns3::DlHarqProcessesBuffer_t')
-    typehandlers.add_type_alias('std::vector< std::vector< ns3::Ptr< ns3::PacketBurst >, std::allocator< ns3::Ptr< ns3::PacketBurst > > >, std::allocator< std::vector< ns3::Ptr< ns3::PacketBurst >, std::allocator< ns3::Ptr< ns3::PacketBurst > > > > >*', 'ns3::DlHarqProcessesBuffer_t*')
-    typehandlers.add_type_alias('std::vector< std::vector< ns3::Ptr< ns3::PacketBurst >, std::allocator< ns3::Ptr< ns3::PacketBurst > > >, std::allocator< std::vector< ns3::Ptr< ns3::PacketBurst >, std::allocator< ns3::Ptr< ns3::PacketBurst > > > > >&', 'ns3::DlHarqProcessesBuffer_t&')
-    typehandlers.add_type_alias('std::map< ns3::ImsiLcidPair_t, ns3::Ptr< ns3::MinMaxAvgTotalCalculator< unsigned long long > >, std::less< ns3::ImsiLcidPair_t >, std::allocator< std::pair< ns3::ImsiLcidPair_t const, ns3::Ptr< ns3::MinMaxAvgTotalCalculator< unsigned long long > > > > >', 'ns3::Uint64StatsMap')
-    typehandlers.add_type_alias('std::map< ns3::ImsiLcidPair_t, ns3::Ptr< ns3::MinMaxAvgTotalCalculator< unsigned long long > >, std::less< ns3::ImsiLcidPair_t >, std::allocator< std::pair< ns3::ImsiLcidPair_t const, ns3::Ptr< ns3::MinMaxAvgTotalCalculator< unsigned long long > > > > >*', 'ns3::Uint64StatsMap*')
-    typehandlers.add_type_alias('std::map< ns3::ImsiLcidPair_t, ns3::Ptr< ns3::MinMaxAvgTotalCalculator< unsigned long long > >, std::less< ns3::ImsiLcidPair_t >, std::allocator< std::pair< ns3::ImsiLcidPair_t const, ns3::Ptr< ns3::MinMaxAvgTotalCalculator< unsigned long long > > > > >&', 'ns3::Uint64StatsMap&')
-    typehandlers.add_type_alias('std::vector< unsigned char, std::allocator< unsigned char > >', 'ns3::UlHarqProcessesStatus_t')
-    typehandlers.add_type_alias('std::vector< unsigned char, std::allocator< unsigned char > >*', 'ns3::UlHarqProcessesStatus_t*')
-    typehandlers.add_type_alias('std::vector< unsigned char, std::allocator< unsigned char > >&', 'ns3::UlHarqProcessesStatus_t&')
+    typehandlers.add_type_alias(u'std::vector< unsigned char, std::allocator< unsigned char > >', u'ns3::DlHarqProcessesTimer_t')
+    typehandlers.add_type_alias(u'std::vector< unsigned char, std::allocator< unsigned char > >*', u'ns3::DlHarqProcessesTimer_t*')
+    typehandlers.add_type_alias(u'std::vector< unsigned char, std::allocator< unsigned char > >&', u'ns3::DlHarqProcessesTimer_t&')
+    typehandlers.add_type_alias(u'std::map< ns3::ImsiLcidPair_t, ns3::LteFlowId_t, std::less< ns3::ImsiLcidPair_t >, std::allocator< std::pair< ns3::ImsiLcidPair_t const, ns3::LteFlowId_t > > >', u'ns3::FlowIdMap')
+    typehandlers.add_type_alias(u'std::map< ns3::ImsiLcidPair_t, ns3::LteFlowId_t, std::less< ns3::ImsiLcidPair_t >, std::allocator< std::pair< ns3::ImsiLcidPair_t const, ns3::LteFlowId_t > > >*', u'ns3::FlowIdMap*')
+    typehandlers.add_type_alias(u'std::map< ns3::ImsiLcidPair_t, ns3::LteFlowId_t, std::less< ns3::ImsiLcidPair_t >, std::allocator< std::pair< ns3::ImsiLcidPair_t const, ns3::LteFlowId_t > > >&', u'ns3::FlowIdMap&')
+    typehandlers.add_type_alias(u'std::map< ns3::ImsiLcidPair_t, ns3::Ptr< ns3::MinMaxAvgTotalCalculator< unsigned int > >, std::less< ns3::ImsiLcidPair_t >, std::allocator< std::pair< ns3::ImsiLcidPair_t const, ns3::Ptr< ns3::MinMaxAvgTotalCalculator< unsigned int > > > > >', u'ns3::Uint32StatsMap')
+    typehandlers.add_type_alias(u'std::map< ns3::ImsiLcidPair_t, ns3::Ptr< ns3::MinMaxAvgTotalCalculator< unsigned int > >, std::less< ns3::ImsiLcidPair_t >, std::allocator< std::pair< ns3::ImsiLcidPair_t const, ns3::Ptr< ns3::MinMaxAvgTotalCalculator< unsigned int > > > > >*', u'ns3::Uint32StatsMap*')
+    typehandlers.add_type_alias(u'std::map< ns3::ImsiLcidPair_t, ns3::Ptr< ns3::MinMaxAvgTotalCalculator< unsigned int > >, std::less< ns3::ImsiLcidPair_t >, std::allocator< std::pair< ns3::ImsiLcidPair_t const, ns3::Ptr< ns3::MinMaxAvgTotalCalculator< unsigned int > > > > >&', u'ns3::Uint32StatsMap&')
+    typehandlers.add_type_alias(u'ns3::Callback< void, ns3::Ptr< ns3::Packet >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', u'ns3::GenericPhyRxEndOkCallback')
+    typehandlers.add_type_alias(u'ns3::Callback< void, ns3::Ptr< ns3::Packet >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >*', u'ns3::GenericPhyRxEndOkCallback*')
+    typehandlers.add_type_alias(u'ns3::Callback< void, ns3::Ptr< ns3::Packet >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >&', u'ns3::GenericPhyRxEndOkCallback&')
+    typehandlers.add_type_alias(u'std::vector< std::vector< ns3::Ptr< ns3::PacketBurst >, std::allocator< ns3::Ptr< ns3::PacketBurst > > >, std::allocator< std::vector< ns3::Ptr< ns3::PacketBurst >, std::allocator< ns3::Ptr< ns3::PacketBurst > > > > >', u'ns3::DlHarqProcessesBuffer_t')
+    typehandlers.add_type_alias(u'std::vector< std::vector< ns3::Ptr< ns3::PacketBurst >, std::allocator< ns3::Ptr< ns3::PacketBurst > > >, std::allocator< std::vector< ns3::Ptr< ns3::PacketBurst >, std::allocator< ns3::Ptr< ns3::PacketBurst > > > > >*', u'ns3::DlHarqProcessesBuffer_t*')
+    typehandlers.add_type_alias(u'std::vector< std::vector< ns3::Ptr< ns3::PacketBurst >, std::allocator< ns3::Ptr< ns3::PacketBurst > > >, std::allocator< std::vector< ns3::Ptr< ns3::PacketBurst >, std::allocator< ns3::Ptr< ns3::PacketBurst > > > > >&', u'ns3::DlHarqProcessesBuffer_t&')
+    typehandlers.add_type_alias(u'std::map< ns3::ImsiLcidPair_t, ns3::Ptr< ns3::MinMaxAvgTotalCalculator< unsigned long long > >, std::less< ns3::ImsiLcidPair_t >, std::allocator< std::pair< ns3::ImsiLcidPair_t const, ns3::Ptr< ns3::MinMaxAvgTotalCalculator< unsigned long long > > > > >', u'ns3::Uint64StatsMap')
+    typehandlers.add_type_alias(u'std::map< ns3::ImsiLcidPair_t, ns3::Ptr< ns3::MinMaxAvgTotalCalculator< unsigned long long > >, std::less< ns3::ImsiLcidPair_t >, std::allocator< std::pair< ns3::ImsiLcidPair_t const, ns3::Ptr< ns3::MinMaxAvgTotalCalculator< unsigned long long > > > > >*', u'ns3::Uint64StatsMap*')
+    typehandlers.add_type_alias(u'std::map< ns3::ImsiLcidPair_t, ns3::Ptr< ns3::MinMaxAvgTotalCalculator< unsigned long long > >, std::less< ns3::ImsiLcidPair_t >, std::allocator< std::pair< ns3::ImsiLcidPair_t const, ns3::Ptr< ns3::MinMaxAvgTotalCalculator< unsigned long long > > > > >&', u'ns3::Uint64StatsMap&')
+    typehandlers.add_type_alias(u'std::vector< unsigned char, std::allocator< unsigned char > >', u'ns3::UlHarqProcessesStatus_t')
+    typehandlers.add_type_alias(u'std::vector< unsigned char, std::allocator< unsigned char > >*', u'ns3::UlHarqProcessesStatus_t*')
+    typehandlers.add_type_alias(u'std::vector< unsigned char, std::allocator< unsigned char > >&', u'ns3::UlHarqProcessesStatus_t&')
     
     ## Register a nested module for the namespace Config
     
@@ -1518,8 +1476,8 @@
     
     ## config.h (module 'core'): ns3::Config::MatchContainer [class]
     module.add_class('MatchContainer', import_from_module='ns.core')
-    module.add_container('std::vector< ns3::Ptr< ns3::Object > >', 'ns3::Ptr< ns3::Object >', container_type='vector')
-    module.add_container('std::vector< std::string >', 'std::string', container_type='vector')
+    module.add_container('std::vector< ns3::Ptr< ns3::Object > >', 'ns3::Ptr< ns3::Object >', container_type=u'vector')
+    module.add_container('std::vector< std::string >', 'std::string', container_type=u'vector')
 
 def register_types_ns3_FatalImpl(module):
     root_module = module.get_root()
@@ -1530,12 +1488,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('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('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(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&')
+    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&')
     
     ## Register a nested module for the namespace Function
     
@@ -1578,6 +1536,7 @@
     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_Ns3CqasFlowPerf_t_methods(root_module, root_module['ns3::CqasFlowPerf_t'])
     register_Ns3CqiConfig_s_methods(root_module, root_module['ns3::CqiConfig_s'])
     register_Ns3CqiListElement_s_methods(root_module, root_module['ns3::CqiListElement_s'])
     register_Ns3DataOutputCallback_methods(root_module, root_module['ns3::DataOutputCallback'])
@@ -1669,20 +1628,12 @@
     register_Ns3ImsiLcidPair_t_methods(root_module, root_module['ns3::ImsiLcidPair_t'])
     register_Ns3Inet6SocketAddress_methods(root_module, root_module['ns3::Inet6SocketAddress'])
     register_Ns3InetSocketAddress_methods(root_module, root_module['ns3::InetSocketAddress'])
-    register_Ns3IntToType__0_methods(root_module, root_module['ns3::IntToType< 0 >'])
-    register_Ns3IntToType__1_methods(root_module, root_module['ns3::IntToType< 1 >'])
-    register_Ns3IntToType__2_methods(root_module, root_module['ns3::IntToType< 2 >'])
-    register_Ns3IntToType__3_methods(root_module, root_module['ns3::IntToType< 3 >'])
-    register_Ns3IntToType__4_methods(root_module, root_module['ns3::IntToType< 4 >'])
-    register_Ns3IntToType__5_methods(root_module, root_module['ns3::IntToType< 5 >'])
-    register_Ns3IntToType__6_methods(root_module, root_module['ns3::IntToType< 6 >'])
     register_Ns3Ipv4Address_methods(root_module, root_module['ns3::Ipv4Address'])
     register_Ns3Ipv4AddressHelper_methods(root_module, root_module['ns3::Ipv4AddressHelper'])
     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'])
     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_Ns3LogComponent_methods(root_module, root_module['ns3::LogComponent'])
     register_Ns3LogicalChannelConfigListElement_s_methods(root_module, root_module['ns3::LogicalChannelConfigListElement_s'])
@@ -1811,6 +1762,7 @@
     register_Ns3PacketTagList_methods(root_module, root_module['ns3::PacketTagList'])
     register_Ns3PacketTagListTagData_methods(root_module, root_module['ns3::PacketTagList::TagData'])
     register_Ns3PagingInfoListElement_s_methods(root_module, root_module['ns3::PagingInfoListElement_s'])
+    register_Ns3ParameterLogger_methods(root_module, root_module['ns3::ParameterLogger'])
     register_Ns3PhichListElement_s_methods(root_module, root_module['ns3::PhichListElement_s'])
     register_Ns3PhyReceptionStatParameters_methods(root_module, root_module['ns3::PhyReceptionStatParameters'])
     register_Ns3PhyTransmissionStatParameters_methods(root_module, root_module['ns3::PhyTransmissionStatParameters'])
@@ -1832,8 +1784,7 @@
     register_Ns3TagBuffer_methods(root_module, root_module['ns3::TagBuffer'])
     register_Ns3TbId_t_methods(root_module, root_module['ns3::TbId_t'])
     register_Ns3TbStats_t_methods(root_module, root_module['ns3::TbStats_t'])
-    register_Ns3Timer_methods(root_module, root_module['ns3::Timer'])
-    register_Ns3TimerImpl_methods(root_module, root_module['ns3::TimerImpl'])
+    register_Ns3TimeWithUnit_methods(root_module, root_module['ns3::TimeWithUnit'])
     register_Ns3TransmissionModesLayers_methods(root_module, root_module['ns3::TransmissionModesLayers'])
     register_Ns3TypeId_methods(root_module, root_module['ns3::TypeId'])
     register_Ns3TypeIdAttributeInformation_methods(root_module, root_module['ns3::TypeId::AttributeInformation'])
@@ -1862,7 +1813,6 @@
     register_Ns3EpsBearerTag_methods(root_module, root_module['ns3::EpsBearerTag'])
     register_Ns3Header_methods(root_module, root_module['ns3::Header'])
     register_Ns3Ipv4Header_methods(root_module, root_module['ns3::Ipv4Header'])
-    register_Ns3Ipv6Header_methods(root_module, root_module['ns3::Ipv6Header'])
     register_Ns3LteEnbRrcSapProvider_methods(root_module, root_module['ns3::LteEnbRrcSapProvider'])
     register_Ns3LteEnbRrcSapProviderCompleteSetupUeParameters_methods(root_module, root_module['ns3::LteEnbRrcSapProvider::CompleteSetupUeParameters'])
     register_Ns3LteEnbRrcSapUser_methods(root_module, root_module['ns3::LteEnbRrcSapUser'])
@@ -1976,7 +1926,6 @@
     register_Ns3GammaRandomVariable_methods(root_module, root_module['ns3::GammaRandomVariable'])
     register_Ns3GtpuHeader_methods(root_module, root_module['ns3::GtpuHeader'])
     register_Ns3IntegerValue_methods(root_module, root_module['ns3::IntegerValue'])
-    register_Ns3IpL4Protocol_methods(root_module, root_module['ns3::IpL4Protocol'])
     register_Ns3Ipv4_methods(root_module, root_module['ns3::Ipv4'])
     register_Ns3Ipv4AddressChecker_methods(root_module, root_module['ns3::Ipv4AddressChecker'])
     register_Ns3Ipv4AddressValue_methods(root_module, root_module['ns3::Ipv4AddressValue'])
@@ -1986,7 +1935,6 @@
     register_Ns3Ipv4Route_methods(root_module, root_module['ns3::Ipv4Route'])
     register_Ns3Ipv6AddressChecker_methods(root_module, root_module['ns3::Ipv6AddressChecker'])
     register_Ns3Ipv6AddressValue_methods(root_module, root_module['ns3::Ipv6AddressValue'])
-    register_Ns3Ipv6Interface_methods(root_module, root_module['ns3::Ipv6Interface'])
     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'])
@@ -2081,6 +2029,7 @@
     register_Ns3AddressChecker_methods(root_module, root_module['ns3::AddressChecker'])
     register_Ns3AddressValue_methods(root_module, root_module['ns3::AddressValue'])
     register_Ns3BsrLteControlMessage_methods(root_module, root_module['ns3::BsrLteControlMessage'])
+    register_Ns3CqaFfMacScheduler_methods(root_module, root_module['ns3::CqaFfMacScheduler'])
     register_Ns3DlCqiLteControlMessage_methods(root_module, root_module['ns3::DlCqiLteControlMessage'])
     register_Ns3DlDciLteControlMessage_methods(root_module, root_module['ns3::DlDciLteControlMessage'])
     register_Ns3DlHarqFeedbackLteControlMessage_methods(root_module, root_module['ns3::DlHarqFeedbackLteControlMessage'])
@@ -2388,6 +2337,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', 
@@ -2400,6 +2353,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', 
@@ -2694,6 +2651,25 @@
                    is_static=True, visibility='protected')
     return
 
+def register_Ns3CqasFlowPerf_t_methods(root_module, cls):
+    ## cqa-ff-mac-scheduler.h (module 'lte'): ns3::CqasFlowPerf_t::CqasFlowPerf_t() [constructor]
+    cls.add_constructor([])
+    ## cqa-ff-mac-scheduler.h (module 'lte'): ns3::CqasFlowPerf_t::CqasFlowPerf_t(ns3::CqasFlowPerf_t const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::CqasFlowPerf_t const &', 'arg0')])
+    ## cqa-ff-mac-scheduler.h (module 'lte'): ns3::CqasFlowPerf_t::flowStart [variable]
+    cls.add_instance_attribute('flowStart', 'ns3::Time', is_const=False)
+    ## cqa-ff-mac-scheduler.h (module 'lte'): ns3::CqasFlowPerf_t::lastAveragedThroughput [variable]
+    cls.add_instance_attribute('lastAveragedThroughput', 'double', is_const=False)
+    ## cqa-ff-mac-scheduler.h (module 'lte'): ns3::CqasFlowPerf_t::lastTtiBytesTransmitted [variable]
+    cls.add_instance_attribute('lastTtiBytesTransmitted', 'unsigned int', is_const=False)
+    ## cqa-ff-mac-scheduler.h (module 'lte'): ns3::CqasFlowPerf_t::secondLastAveragedThroughput [variable]
+    cls.add_instance_attribute('secondLastAveragedThroughput', 'double', is_const=False)
+    ## cqa-ff-mac-scheduler.h (module 'lte'): ns3::CqasFlowPerf_t::targetThroughput [variable]
+    cls.add_instance_attribute('targetThroughput', 'double', is_const=False)
+    ## cqa-ff-mac-scheduler.h (module 'lte'): ns3::CqasFlowPerf_t::totalBytesTransmitted [variable]
+    cls.add_instance_attribute('totalBytesTransmitted', 'long unsigned int', is_const=False)
+    return
+
 def register_Ns3CqiConfig_s_methods(root_module, cls):
     ## ff-mac-common.h (module 'lte'): ns3::CqiConfig_s::CqiConfig_s() [constructor]
     cls.add_constructor([])
@@ -4539,55 +4515,6 @@
                    [param('uint16_t', 'port')])
     return
 
-def register_Ns3IntToType__0_methods(root_module, cls):
-    ## int-to-type.h (module 'core'): ns3::IntToType<0>::IntToType() [constructor]
-    cls.add_constructor([])
-    ## int-to-type.h (module 'core'): ns3::IntToType<0>::IntToType(ns3::IntToType<0> const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::IntToType< 0 > const &', 'arg0')])
-    return
-
-def register_Ns3IntToType__1_methods(root_module, cls):
-    ## int-to-type.h (module 'core'): ns3::IntToType<1>::IntToType() [constructor]
-    cls.add_constructor([])
-    ## int-to-type.h (module 'core'): ns3::IntToType<1>::IntToType(ns3::IntToType<1> const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::IntToType< 1 > const &', 'arg0')])
-    return
-
-def register_Ns3IntToType__2_methods(root_module, cls):
-    ## int-to-type.h (module 'core'): ns3::IntToType<2>::IntToType() [constructor]
-    cls.add_constructor([])
-    ## int-to-type.h (module 'core'): ns3::IntToType<2>::IntToType(ns3::IntToType<2> const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::IntToType< 2 > const &', 'arg0')])
-    return
-
-def register_Ns3IntToType__3_methods(root_module, cls):
-    ## int-to-type.h (module 'core'): ns3::IntToType<3>::IntToType() [constructor]
-    cls.add_constructor([])
-    ## int-to-type.h (module 'core'): ns3::IntToType<3>::IntToType(ns3::IntToType<3> const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::IntToType< 3 > const &', 'arg0')])
-    return
-
-def register_Ns3IntToType__4_methods(root_module, cls):
-    ## int-to-type.h (module 'core'): ns3::IntToType<4>::IntToType() [constructor]
-    cls.add_constructor([])
-    ## int-to-type.h (module 'core'): ns3::IntToType<4>::IntToType(ns3::IntToType<4> const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::IntToType< 4 > const &', 'arg0')])
-    return
-
-def register_Ns3IntToType__5_methods(root_module, cls):
-    ## int-to-type.h (module 'core'): ns3::IntToType<5>::IntToType() [constructor]
-    cls.add_constructor([])
-    ## int-to-type.h (module 'core'): ns3::IntToType<5>::IntToType(ns3::IntToType<5> const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::IntToType< 5 > const &', 'arg0')])
-    return
-
-def register_Ns3IntToType__6_methods(root_module, cls):
-    ## int-to-type.h (module 'core'): ns3::IntToType<6>::IntToType() [constructor]
-    cls.add_constructor([])
-    ## int-to-type.h (module 'core'): ns3::IntToType<6>::IntToType(ns3::IntToType<6> const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::IntToType< 6 > const &', 'arg0')])
-    return
-
 def register_Ns3Ipv4Address_methods(root_module, cls):
     cls.add_binary_comparison_operator('!=')
     cls.add_binary_comparison_operator('<')
@@ -5096,61 +5023,6 @@
                    [param('uint8_t *', 'address')])
     return
 
-def register_Ns3Ipv6InterfaceAddress_methods(root_module, cls):
-    cls.add_binary_comparison_operator('!=')
-    cls.add_output_stream_operator()
-    cls.add_binary_comparison_operator('==')
-    ## ipv6-interface-address.h (module 'internet'): ns3::Ipv6InterfaceAddress::Ipv6InterfaceAddress() [constructor]
-    cls.add_constructor([])
-    ## ipv6-interface-address.h (module 'internet'): ns3::Ipv6InterfaceAddress::Ipv6InterfaceAddress(ns3::Ipv6Address address) [constructor]
-    cls.add_constructor([param('ns3::Ipv6Address', 'address')])
-    ## ipv6-interface-address.h (module 'internet'): ns3::Ipv6InterfaceAddress::Ipv6InterfaceAddress(ns3::Ipv6Address address, ns3::Ipv6Prefix prefix) [constructor]
-    cls.add_constructor([param('ns3::Ipv6Address', 'address'), param('ns3::Ipv6Prefix', 'prefix')])
-    ## ipv6-interface-address.h (module 'internet'): ns3::Ipv6InterfaceAddress::Ipv6InterfaceAddress(ns3::Ipv6InterfaceAddress const & o) [copy constructor]
-    cls.add_constructor([param('ns3::Ipv6InterfaceAddress const &', 'o')])
-    ## ipv6-interface-address.h (module 'internet'): ns3::Ipv6Address ns3::Ipv6InterfaceAddress::GetAddress() const [member function]
-    cls.add_method('GetAddress', 
-                   'ns3::Ipv6Address', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface-address.h (module 'internet'): uint32_t ns3::Ipv6InterfaceAddress::GetNsDadUid() const [member function]
-    cls.add_method('GetNsDadUid', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface-address.h (module 'internet'): ns3::Ipv6Prefix ns3::Ipv6InterfaceAddress::GetPrefix() const [member function]
-    cls.add_method('GetPrefix', 
-                   'ns3::Ipv6Prefix', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface-address.h (module 'internet'): ns3::Ipv6InterfaceAddress::Scope_e ns3::Ipv6InterfaceAddress::GetScope() const [member function]
-    cls.add_method('GetScope', 
-                   'ns3::Ipv6InterfaceAddress::Scope_e', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface-address.h (module 'internet'): ns3::Ipv6InterfaceAddress::State_e ns3::Ipv6InterfaceAddress::GetState() const [member function]
-    cls.add_method('GetState', 
-                   'ns3::Ipv6InterfaceAddress::State_e', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface-address.h (module 'internet'): void ns3::Ipv6InterfaceAddress::SetAddress(ns3::Ipv6Address address) [member function]
-    cls.add_method('SetAddress', 
-                   'void', 
-                   [param('ns3::Ipv6Address', 'address')])
-    ## ipv6-interface-address.h (module 'internet'): void ns3::Ipv6InterfaceAddress::SetNsDadUid(uint32_t uid) [member function]
-    cls.add_method('SetNsDadUid', 
-                   'void', 
-                   [param('uint32_t', 'uid')])
-    ## ipv6-interface-address.h (module 'internet'): void ns3::Ipv6InterfaceAddress::SetScope(ns3::Ipv6InterfaceAddress::Scope_e scope) [member function]
-    cls.add_method('SetScope', 
-                   'void', 
-                   [param('ns3::Ipv6InterfaceAddress::Scope_e', 'scope')])
-    ## ipv6-interface-address.h (module 'internet'): void ns3::Ipv6InterfaceAddress::SetState(ns3::Ipv6InterfaceAddress::State_e state) [member function]
-    cls.add_method('SetState', 
-                   'void', 
-                   [param('ns3::Ipv6InterfaceAddress::State_e', 'state')])
-    return
-
 def register_Ns3Ipv6Prefix_methods(root_module, cls):
     cls.add_binary_comparison_operator('!=')
     cls.add_output_stream_operator()
@@ -5212,29 +5084,25 @@
 def register_Ns3LogComponent_methods(root_module, cls):
     ## log.h (module 'core'): ns3::LogComponent::LogComponent(ns3::LogComponent const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::LogComponent const &', 'arg0')])
-    ## log.h (module 'core'): ns3::LogComponent::LogComponent(std::string const & name) [constructor]
-    cls.add_constructor([param('std::string const &', 'name')])
-    ## log.h (module 'core'): void ns3::LogComponent::Disable(ns3::LogLevel level) [member function]
+    ## log.h (module 'core'): ns3::LogComponent::LogComponent(std::string const & name, ns3::LogLevel const mask=::ns3::LOG_NONE) [constructor]
+    cls.add_constructor([param('std::string const &', 'name'), param('ns3::LogLevel const', 'mask', default_value='::ns3::LOG_NONE')])
+    ## log.h (module 'core'): void ns3::LogComponent::Disable(ns3::LogLevel const level) [member function]
     cls.add_method('Disable', 
                    'void', 
-                   [param('ns3::LogLevel', 'level')])
-    ## log.h (module 'core'): void ns3::LogComponent::Enable(ns3::LogLevel level) [member function]
+                   [param('ns3::LogLevel const', 'level')])
+    ## log.h (module 'core'): void ns3::LogComponent::Enable(ns3::LogLevel const level) [member function]
     cls.add_method('Enable', 
                    'void', 
-                   [param('ns3::LogLevel', 'level')])
-    ## log.h (module 'core'): void ns3::LogComponent::EnvVarCheck(std::string const & name) [member function]
-    cls.add_method('EnvVarCheck', 
-                   'void', 
-                   [param('std::string const &', 'name')])
-    ## log.h (module 'core'): std::string ns3::LogComponent::GetLevelLabel(ns3::LogLevel const level) const [member function]
+                   [param('ns3::LogLevel const', 'level')])
+    ## log.h (module 'core'): static std::string ns3::LogComponent::GetLevelLabel(ns3::LogLevel const level) [member function]
     cls.add_method('GetLevelLabel', 
                    'std::string', 
                    [param('ns3::LogLevel const', 'level')], 
-                   is_const=True)
-    ## log.h (module 'core'): bool ns3::LogComponent::IsEnabled(ns3::LogLevel level) const [member function]
+                   is_static=True)
+    ## log.h (module 'core'): bool ns3::LogComponent::IsEnabled(ns3::LogLevel const level) const [member function]
     cls.add_method('IsEnabled', 
                    'bool', 
-                   [param('ns3::LogLevel', 'level')], 
+                   [param('ns3::LogLevel const', 'level')], 
                    is_const=True)
     ## log.h (module 'core'): bool ns3::LogComponent::IsNoneEnabled() const [member function]
     cls.add_method('IsNoneEnabled', 
@@ -5246,6 +5114,10 @@
                    'char const *', 
                    [], 
                    is_const=True)
+    ## log.h (module 'core'): void ns3::LogComponent::SetMask(ns3::LogLevel const level) [member function]
+    cls.add_method('SetMask', 
+                   'void', 
+                   [param('ns3::LogLevel const', 'level')])
     return
 
 def register_Ns3LogicalChannelConfigListElement_s_methods(root_module, cls):
@@ -7664,6 +7536,13 @@
     cls.add_instance_attribute('m_pagingSubframe', 'uint8_t', is_const=False)
     return
 
+def register_Ns3ParameterLogger_methods(root_module, cls):
+    ## log.h (module 'core'): ns3::ParameterLogger::ParameterLogger(ns3::ParameterLogger const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::ParameterLogger const &', 'arg0')])
+    ## log.h (module 'core'): ns3::ParameterLogger::ParameterLogger(std::ostream & os) [constructor]
+    cls.add_constructor([param('std::ostream &', 'os')])
+    return
+
 def register_Ns3PhichListElement_s_methods(root_module, cls):
     ## ff-mac-common.h (module 'lte'): ns3::PhichListElement_s::PhichListElement_s() [constructor]
     cls.add_constructor([])
@@ -7845,8 +7724,8 @@
 def register_Ns3SequenceNumber10_methods(root_module, cls):
     cls.add_output_stream_operator()
     cls.add_binary_comparison_operator('!=')
-    cls.add_binary_numeric_operator('+', root_module['ns3::SequenceNumber10'], root_module['ns3::SequenceNumber10'], param('uint16_t', 'right'))
-    cls.add_binary_numeric_operator('-', root_module['ns3::SequenceNumber10'], root_module['ns3::SequenceNumber10'], param('uint16_t', 'right'))
+    cls.add_binary_numeric_operator('+', root_module['ns3::SequenceNumber10'], root_module['ns3::SequenceNumber10'], param('uint16_t', u'right'))
+    cls.add_binary_numeric_operator('-', root_module['ns3::SequenceNumber10'], root_module['ns3::SequenceNumber10'], param('uint16_t', u'right'))
     cls.add_binary_comparison_operator('<')
     cls.add_binary_comparison_operator('<=')
     cls.add_binary_comparison_operator('==')
@@ -8200,88 +8079,12 @@
     cls.add_instance_attribute('tbler', 'double', is_const=False)
     return
 
-def register_Ns3Timer_methods(root_module, cls):
-    ## timer.h (module 'core'): ns3::Timer::Timer(ns3::Timer const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::Timer const &', 'arg0')])
-    ## timer.h (module 'core'): ns3::Timer::Timer() [constructor]
-    cls.add_constructor([])
-    ## timer.h (module 'core'): ns3::Timer::Timer(ns3::Timer::DestroyPolicy destroyPolicy) [constructor]
-    cls.add_constructor([param('ns3::Timer::DestroyPolicy', 'destroyPolicy')])
-    ## timer.h (module 'core'): void ns3::Timer::Cancel() [member function]
-    cls.add_method('Cancel', 
-                   'void', 
-                   [])
-    ## timer.h (module 'core'): ns3::Time ns3::Timer::GetDelay() const [member function]
-    cls.add_method('GetDelay', 
-                   'ns3::Time', 
-                   [], 
-                   is_const=True)
-    ## timer.h (module 'core'): ns3::Time ns3::Timer::GetDelayLeft() const [member function]
-    cls.add_method('GetDelayLeft', 
-                   'ns3::Time', 
-                   [], 
-                   is_const=True)
-    ## timer.h (module 'core'): ns3::Timer::State ns3::Timer::GetState() const [member function]
-    cls.add_method('GetState', 
-                   'ns3::Timer::State', 
-                   [], 
-                   is_const=True)
-    ## timer.h (module 'core'): bool ns3::Timer::IsExpired() const [member function]
-    cls.add_method('IsExpired', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## timer.h (module 'core'): bool ns3::Timer::IsRunning() const [member function]
-    cls.add_method('IsRunning', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## timer.h (module 'core'): bool ns3::Timer::IsSuspended() const [member function]
-    cls.add_method('IsSuspended', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## timer.h (module 'core'): void ns3::Timer::Remove() [member function]
-    cls.add_method('Remove', 
-                   'void', 
-                   [])
-    ## timer.h (module 'core'): void ns3::Timer::Resume() [member function]
-    cls.add_method('Resume', 
-                   'void', 
-                   [])
-    ## timer.h (module 'core'): void ns3::Timer::Schedule() [member function]
-    cls.add_method('Schedule', 
-                   'void', 
-                   [])
-    ## timer.h (module 'core'): void ns3::Timer::Schedule(ns3::Time delay) [member function]
-    cls.add_method('Schedule', 
-                   'void', 
-                   [param('ns3::Time', 'delay')])
-    ## timer.h (module 'core'): void ns3::Timer::SetDelay(ns3::Time const & delay) [member function]
-    cls.add_method('SetDelay', 
-                   'void', 
-                   [param('ns3::Time const &', 'delay')])
-    ## timer.h (module 'core'): void ns3::Timer::Suspend() [member function]
-    cls.add_method('Suspend', 
-                   'void', 
-                   [])
-    return
-
-def register_Ns3TimerImpl_methods(root_module, cls):
-    ## timer-impl.h (module 'core'): ns3::TimerImpl::TimerImpl() [constructor]
-    cls.add_constructor([])
-    ## timer-impl.h (module 'core'): ns3::TimerImpl::TimerImpl(ns3::TimerImpl const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::TimerImpl const &', 'arg0')])
-    ## timer-impl.h (module 'core'): void ns3::TimerImpl::Invoke() [member function]
-    cls.add_method('Invoke', 
-                   'void', 
-                   [], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## timer-impl.h (module 'core'): ns3::EventId ns3::TimerImpl::Schedule(ns3::Time const & delay) [member function]
-    cls.add_method('Schedule', 
-                   'ns3::EventId', 
-                   [param('ns3::Time const &', 'delay')], 
-                   is_pure_virtual=True, is_virtual=True)
+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_Ns3TransmissionModesLayers_methods(root_module, cls):
@@ -8710,63 +8513,19 @@
     return
 
 def register_Ns3Int64x64_t_methods(root_module, cls):
-    cls.add_binary_comparison_operator('<=')
     cls.add_binary_comparison_operator('!=')
-    cls.add_inplace_numeric_operator('+=', 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 &', '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_comparison_operator('<=')
+    cls.add_inplace_numeric_operator('+=', 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_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_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_output_stream_operator()
     cls.add_binary_comparison_operator('==')
     cls.add_binary_comparison_operator('>=')
@@ -8774,6 +8533,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]
@@ -8814,6 +8575,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_Ns3PfsFlowPerf_t_methods(root_module, cls):
@@ -9213,106 +8976,6 @@
                    [param('uint8_t', 'ttl')])
     return
 
-def register_Ns3Ipv6Header_methods(root_module, cls):
-    ## ipv6-header.h (module 'internet'): ns3::Ipv6Header::Ipv6Header(ns3::Ipv6Header const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::Ipv6Header const &', 'arg0')])
-    ## ipv6-header.h (module 'internet'): ns3::Ipv6Header::Ipv6Header() [constructor]
-    cls.add_constructor([])
-    ## ipv6-header.h (module 'internet'): uint32_t ns3::Ipv6Header::Deserialize(ns3::Buffer::Iterator start) [member function]
-    cls.add_method('Deserialize', 
-                   'uint32_t', 
-                   [param('ns3::Buffer::Iterator', 'start')], 
-                   is_virtual=True)
-    ## ipv6-header.h (module 'internet'): ns3::Ipv6Address ns3::Ipv6Header::GetDestinationAddress() const [member function]
-    cls.add_method('GetDestinationAddress', 
-                   'ns3::Ipv6Address', 
-                   [], 
-                   is_const=True)
-    ## ipv6-header.h (module 'internet'): uint32_t ns3::Ipv6Header::GetFlowLabel() const [member function]
-    cls.add_method('GetFlowLabel', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    ## ipv6-header.h (module 'internet'): uint8_t ns3::Ipv6Header::GetHopLimit() const [member function]
-    cls.add_method('GetHopLimit', 
-                   'uint8_t', 
-                   [], 
-                   is_const=True)
-    ## ipv6-header.h (module 'internet'): ns3::TypeId ns3::Ipv6Header::GetInstanceTypeId() const [member function]
-    cls.add_method('GetInstanceTypeId', 
-                   'ns3::TypeId', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## ipv6-header.h (module 'internet'): uint8_t ns3::Ipv6Header::GetNextHeader() const [member function]
-    cls.add_method('GetNextHeader', 
-                   'uint8_t', 
-                   [], 
-                   is_const=True)
-    ## ipv6-header.h (module 'internet'): uint16_t ns3::Ipv6Header::GetPayloadLength() const [member function]
-    cls.add_method('GetPayloadLength', 
-                   'uint16_t', 
-                   [], 
-                   is_const=True)
-    ## ipv6-header.h (module 'internet'): uint32_t ns3::Ipv6Header::GetSerializedSize() const [member function]
-    cls.add_method('GetSerializedSize', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## ipv6-header.h (module 'internet'): ns3::Ipv6Address ns3::Ipv6Header::GetSourceAddress() const [member function]
-    cls.add_method('GetSourceAddress', 
-                   'ns3::Ipv6Address', 
-                   [], 
-                   is_const=True)
-    ## ipv6-header.h (module 'internet'): uint8_t ns3::Ipv6Header::GetTrafficClass() const [member function]
-    cls.add_method('GetTrafficClass', 
-                   'uint8_t', 
-                   [], 
-                   is_const=True)
-    ## ipv6-header.h (module 'internet'): static ns3::TypeId ns3::Ipv6Header::GetTypeId() [member function]
-    cls.add_method('GetTypeId', 
-                   'ns3::TypeId', 
-                   [], 
-                   is_static=True)
-    ## ipv6-header.h (module 'internet'): void ns3::Ipv6Header::Print(std::ostream & os) const [member function]
-    cls.add_method('Print', 
-                   'void', 
-                   [param('std::ostream &', 'os')], 
-                   is_const=True, is_virtual=True)
-    ## ipv6-header.h (module 'internet'): void ns3::Ipv6Header::Serialize(ns3::Buffer::Iterator start) const [member function]
-    cls.add_method('Serialize', 
-                   'void', 
-                   [param('ns3::Buffer::Iterator', 'start')], 
-                   is_const=True, is_virtual=True)
-    ## ipv6-header.h (module 'internet'): void ns3::Ipv6Header::SetDestinationAddress(ns3::Ipv6Address dst) [member function]
-    cls.add_method('SetDestinationAddress', 
-                   'void', 
-                   [param('ns3::Ipv6Address', 'dst')])
-    ## ipv6-header.h (module 'internet'): void ns3::Ipv6Header::SetFlowLabel(uint32_t flow) [member function]
-    cls.add_method('SetFlowLabel', 
-                   'void', 
-                   [param('uint32_t', 'flow')])
-    ## ipv6-header.h (module 'internet'): void ns3::Ipv6Header::SetHopLimit(uint8_t limit) [member function]
-    cls.add_method('SetHopLimit', 
-                   'void', 
-                   [param('uint8_t', 'limit')])
-    ## ipv6-header.h (module 'internet'): void ns3::Ipv6Header::SetNextHeader(uint8_t next) [member function]
-    cls.add_method('SetNextHeader', 
-                   'void', 
-                   [param('uint8_t', 'next')])
-    ## ipv6-header.h (module 'internet'): void ns3::Ipv6Header::SetPayloadLength(uint16_t len) [member function]
-    cls.add_method('SetPayloadLength', 
-                   'void', 
-                   [param('uint16_t', 'len')])
-    ## ipv6-header.h (module 'internet'): void ns3::Ipv6Header::SetSourceAddress(ns3::Ipv6Address src) [member function]
-    cls.add_method('SetSourceAddress', 
-                   'void', 
-                   [param('ns3::Ipv6Address', 'src')])
-    ## ipv6-header.h (module 'internet'): void ns3::Ipv6Header::SetTrafficClass(uint8_t traffic) [member function]
-    cls.add_method('SetTrafficClass', 
-                   'void', 
-                   [param('uint8_t', 'traffic')])
-    return
-
 def register_Ns3LteEnbRrcSapProvider_methods(root_module, cls):
     ## lte-rrc-sap.h (module 'lte'): ns3::LteEnbRrcSapProvider::LteEnbRrcSapProvider() [constructor]
     cls.add_constructor([])
@@ -11239,24 +10902,24 @@
     return
 
 def register_Ns3SpectrumValue_methods(root_module, cls):
-    cls.add_binary_numeric_operator('*', root_module['ns3::SpectrumValue'], root_module['ns3::SpectrumValue'], param('double', 'right'))
-    cls.add_binary_numeric_operator('*', root_module['ns3::SpectrumValue'], root_module['ns3::SpectrumValue'], param('ns3::SpectrumValue const &', 'right'))
-    cls.add_binary_numeric_operator('+', root_module['ns3::SpectrumValue'], root_module['ns3::SpectrumValue'], param('double', 'right'))
-    cls.add_binary_numeric_operator('+', root_module['ns3::SpectrumValue'], root_module['ns3::SpectrumValue'], param('ns3::SpectrumValue const &', 'right'))
+    cls.add_binary_numeric_operator('*', root_module['ns3::SpectrumValue'], root_module['ns3::SpectrumValue'], param('double', u'right'))
+    cls.add_binary_numeric_operator('*', root_module['ns3::SpectrumValue'], root_module['ns3::SpectrumValue'], param('ns3::SpectrumValue const &', u'right'))
+    cls.add_binary_numeric_operator('+', root_module['ns3::SpectrumValue'], root_module['ns3::SpectrumValue'], param('double', u'right'))
+    cls.add_binary_numeric_operator('+', root_module['ns3::SpectrumValue'], root_module['ns3::SpectrumValue'], param('ns3::SpectrumValue const &', u'right'))
     cls.add_unary_numeric_operator('-')
-    cls.add_binary_numeric_operator('-', root_module['ns3::SpectrumValue'], root_module['ns3::SpectrumValue'], param('double', 'right'))
-    cls.add_binary_numeric_operator('-', root_module['ns3::SpectrumValue'], root_module['ns3::SpectrumValue'], param('ns3::SpectrumValue const &', 'right'))
-    cls.add_binary_numeric_operator('/', root_module['ns3::SpectrumValue'], root_module['ns3::SpectrumValue'], param('double', 'right'))
-    cls.add_binary_numeric_operator('/', root_module['ns3::SpectrumValue'], root_module['ns3::SpectrumValue'], param('ns3::SpectrumValue const &', 'right'))
+    cls.add_binary_numeric_operator('-', root_module['ns3::SpectrumValue'], root_module['ns3::SpectrumValue'], param('double', u'right'))
+    cls.add_binary_numeric_operator('-', root_module['ns3::SpectrumValue'], root_module['ns3::SpectrumValue'], param('ns3::SpectrumValue const &', u'right'))
+    cls.add_binary_numeric_operator('/', root_module['ns3::SpectrumValue'], root_module['ns3::SpectrumValue'], param('double', u'right'))
+    cls.add_binary_numeric_operator('/', root_module['ns3::SpectrumValue'], root_module['ns3::SpectrumValue'], param('ns3::SpectrumValue const &', u'right'))
     cls.add_output_stream_operator()
-    cls.add_inplace_numeric_operator('*=', param('ns3::SpectrumValue const &', 'right'))
-    cls.add_inplace_numeric_operator('*=', param('double', 'right'))
-    cls.add_inplace_numeric_operator('+=', param('ns3::SpectrumValue const &', 'right'))
-    cls.add_inplace_numeric_operator('+=', param('double', 'right'))
-    cls.add_inplace_numeric_operator('-=', param('ns3::SpectrumValue const &', 'right'))
-    cls.add_inplace_numeric_operator('-=', param('double', 'right'))
-    cls.add_inplace_numeric_operator('/=', param('ns3::SpectrumValue const &', 'right'))
-    cls.add_inplace_numeric_operator('/=', param('double', 'right'))
+    cls.add_inplace_numeric_operator('*=', param('ns3::SpectrumValue const &', u'right'))
+    cls.add_inplace_numeric_operator('*=', param('double', u'right'))
+    cls.add_inplace_numeric_operator('+=', param('ns3::SpectrumValue const &', u'right'))
+    cls.add_inplace_numeric_operator('+=', param('double', u'right'))
+    cls.add_inplace_numeric_operator('-=', param('ns3::SpectrumValue const &', u'right'))
+    cls.add_inplace_numeric_operator('-=', param('double', u'right'))
+    cls.add_inplace_numeric_operator('/=', param('ns3::SpectrumValue const &', u'right'))
+    cls.add_inplace_numeric_operator('/=', param('double', u'right'))
     ## spectrum-value.h (module 'spectrum'): ns3::SpectrumValue::SpectrumValue(ns3::SpectrumValue const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::SpectrumValue const &', 'arg0')])
     ## spectrum-value.h (module 'spectrum'): ns3::SpectrumValue::SpectrumValue(ns3::Ptr<ns3::SpectrumModel const> sm) [constructor]
@@ -11309,14 +10972,16 @@
     return
 
 def register_Ns3Time_methods(root_module, cls):
-    cls.add_binary_comparison_operator('<=')
     cls.add_binary_comparison_operator('!=')
-    cls.add_inplace_numeric_operator('+=', 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('ns3::Time const &', 'right'))
+    cls.add_binary_comparison_operator('<=')
+    cls.add_inplace_numeric_operator('+=', 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_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_inplace_numeric_operator('-=', param('ns3::Time const &', '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('>=')
@@ -11342,6 +11007,11 @@
     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', 
@@ -14240,63 +13910,6 @@
                    [param('int64_t const &', 'value')])
     return
 
-def register_Ns3IpL4Protocol_methods(root_module, cls):
-    ## ip-l4-protocol.h (module 'internet'): ns3::IpL4Protocol::IpL4Protocol() [constructor]
-    cls.add_constructor([])
-    ## ip-l4-protocol.h (module 'internet'): ns3::IpL4Protocol::IpL4Protocol(ns3::IpL4Protocol const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::IpL4Protocol const &', 'arg0')])
-    ## ip-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::IpL4Protocol::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 >', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## ip-l4-protocol.h (module 'internet'): 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> ns3::IpL4Protocol::GetDownTarget6() const [member function]
-    cls.add_method('GetDownTarget6', 
-                   '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 >', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## ip-l4-protocol.h (module 'internet'): int ns3::IpL4Protocol::GetProtocolNumber() const [member function]
-    cls.add_method('GetProtocolNumber', 
-                   'int', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## ip-l4-protocol.h (module 'internet'): static ns3::TypeId ns3::IpL4Protocol::GetTypeId() [member function]
-    cls.add_method('GetTypeId', 
-                   'ns3::TypeId', 
-                   [], 
-                   is_static=True)
-    ## ip-l4-protocol.h (module 'internet'): ns3::IpL4Protocol::RxStatus ns3::IpL4Protocol::Receive(ns3::Ptr<ns3::Packet> p, ns3::Ipv4Header const & header, 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')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## ip-l4-protocol.h (module 'internet'): ns3::IpL4Protocol::RxStatus ns3::IpL4Protocol::Receive(ns3::Ptr<ns3::Packet> p, ns3::Ipv6Header const & header, 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')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## ip-l4-protocol.h (module 'internet'): void ns3::IpL4Protocol::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', 
-                   'void', 
-                   [param('ns3::Ipv4Address', 'icmpSource'), param('uint8_t', 'icmpTtl'), param('uint8_t', 'icmpType'), param('uint8_t', 'icmpCode'), param('uint32_t', 'icmpInfo'), param('ns3::Ipv4Address', 'payloadSource'), param('ns3::Ipv4Address', 'payloadDestination'), param('uint8_t const *', 'payload')], 
-                   is_virtual=True)
-    ## ip-l4-protocol.h (module 'internet'): void ns3::IpL4Protocol::ReceiveIcmp(ns3::Ipv6Address icmpSource, uint8_t icmpTtl, uint8_t icmpType, uint8_t icmpCode, uint32_t icmpInfo, ns3::Ipv6Address payloadSource, ns3::Ipv6Address payloadDestination, uint8_t const * payload) [member function]
-    cls.add_method('ReceiveIcmp', 
-                   'void', 
-                   [param('ns3::Ipv6Address', 'icmpSource'), param('uint8_t', 'icmpTtl'), param('uint8_t', 'icmpType'), param('uint8_t', 'icmpCode'), param('uint32_t', 'icmpInfo'), param('ns3::Ipv6Address', 'payloadSource'), param('ns3::Ipv6Address', 'payloadDestination'), param('uint8_t const *', 'payload')], 
-                   is_virtual=True)
-    ## ip-l4-protocol.h (module 'internet'): void ns3::IpL4Protocol::SetDownTarget(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> cb) [member function]
-    cls.add_method('SetDownTarget', 
-                   'void', 
-                   [param('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 >', 'cb')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## ip-l4-protocol.h (module 'internet'): void ns3::IpL4Protocol::SetDownTarget6(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) [member function]
-    cls.add_method('SetDownTarget6', 
-                   '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_pure_virtual=True, is_virtual=True)
-    return
-
 def register_Ns3Ipv4_methods(root_module, cls):
     ## ipv4.h (module 'internet'): ns3::Ipv4::Ipv4(ns3::Ipv4 const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::Ipv4 const &', 'arg0')])
@@ -14692,151 +14305,6 @@
                    [param('ns3::Ipv6Address const &', 'value')])
     return
 
-def register_Ns3Ipv6Interface_methods(root_module, cls):
-    ## ipv6-interface.h (module 'internet'): ns3::Ipv6Interface::Ipv6Interface(ns3::Ipv6Interface const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::Ipv6Interface const &', 'arg0')])
-    ## ipv6-interface.h (module 'internet'): ns3::Ipv6Interface::Ipv6Interface() [constructor]
-    cls.add_constructor([])
-    ## ipv6-interface.h (module 'internet'): bool ns3::Ipv6Interface::AddAddress(ns3::Ipv6InterfaceAddress iface) [member function]
-    cls.add_method('AddAddress', 
-                   'bool', 
-                   [param('ns3::Ipv6InterfaceAddress', 'iface')])
-    ## ipv6-interface.h (module 'internet'): ns3::Ipv6InterfaceAddress ns3::Ipv6Interface::GetAddress(uint32_t index) const [member function]
-    cls.add_method('GetAddress', 
-                   'ns3::Ipv6InterfaceAddress', 
-                   [param('uint32_t', 'index')], 
-                   is_const=True)
-    ## ipv6-interface.h (module 'internet'): ns3::Ipv6InterfaceAddress ns3::Ipv6Interface::GetAddressMatchingDestination(ns3::Ipv6Address dst) [member function]
-    cls.add_method('GetAddressMatchingDestination', 
-                   'ns3::Ipv6InterfaceAddress', 
-                   [param('ns3::Ipv6Address', 'dst')])
-    ## ipv6-interface.h (module 'internet'): uint16_t ns3::Ipv6Interface::GetBaseReachableTime() const [member function]
-    cls.add_method('GetBaseReachableTime', 
-                   'uint16_t', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface.h (module 'internet'): uint8_t ns3::Ipv6Interface::GetCurHopLimit() const [member function]
-    cls.add_method('GetCurHopLimit', 
-                   'uint8_t', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface.h (module 'internet'): ns3::Ptr<ns3::NetDevice> ns3::Ipv6Interface::GetDevice() const [member function]
-    cls.add_method('GetDevice', 
-                   'ns3::Ptr< ns3::NetDevice >', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## ipv6-interface.h (module 'internet'): ns3::Ipv6InterfaceAddress ns3::Ipv6Interface::GetLinkLocalAddress() const [member function]
-    cls.add_method('GetLinkLocalAddress', 
-                   'ns3::Ipv6InterfaceAddress', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface.h (module 'internet'): uint16_t ns3::Ipv6Interface::GetMetric() const [member function]
-    cls.add_method('GetMetric', 
-                   'uint16_t', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface.h (module 'internet'): uint32_t ns3::Ipv6Interface::GetNAddresses() const [member function]
-    cls.add_method('GetNAddresses', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface.h (module 'internet'): uint16_t ns3::Ipv6Interface::GetReachableTime() const [member function]
-    cls.add_method('GetReachableTime', 
-                   'uint16_t', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface.h (module 'internet'): uint16_t ns3::Ipv6Interface::GetRetransTimer() const [member function]
-    cls.add_method('GetRetransTimer', 
-                   'uint16_t', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface.h (module 'internet'): static ns3::TypeId ns3::Ipv6Interface::GetTypeId() [member function]
-    cls.add_method('GetTypeId', 
-                   'ns3::TypeId', 
-                   [], 
-                   is_static=True)
-    ## ipv6-interface.h (module 'internet'): bool ns3::Ipv6Interface::IsDown() const [member function]
-    cls.add_method('IsDown', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface.h (module 'internet'): bool ns3::Ipv6Interface::IsForwarding() const [member function]
-    cls.add_method('IsForwarding', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface.h (module 'internet'): bool ns3::Ipv6Interface::IsUp() const [member function]
-    cls.add_method('IsUp', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface.h (module 'internet'): ns3::Ipv6InterfaceAddress ns3::Ipv6Interface::RemoveAddress(uint32_t index) [member function]
-    cls.add_method('RemoveAddress', 
-                   'ns3::Ipv6InterfaceAddress', 
-                   [param('uint32_t', 'index')])
-    ## ipv6-interface.h (module 'internet'): ns3::Ipv6InterfaceAddress ns3::Ipv6Interface::RemoveAddress(ns3::Ipv6Address address) [member function]
-    cls.add_method('RemoveAddress', 
-                   'ns3::Ipv6InterfaceAddress', 
-                   [param('ns3::Ipv6Address', 'address')])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::Send(ns3::Ptr<ns3::Packet> p, ns3::Ipv6Address dest) [member function]
-    cls.add_method('Send', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::Packet >', 'p'), param('ns3::Ipv6Address', 'dest')])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetBaseReachableTime(uint16_t baseReachableTime) [member function]
-    cls.add_method('SetBaseReachableTime', 
-                   'void', 
-                   [param('uint16_t', 'baseReachableTime')])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetCurHopLimit(uint8_t curHopLimit) [member function]
-    cls.add_method('SetCurHopLimit', 
-                   'void', 
-                   [param('uint8_t', 'curHopLimit')])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetDevice(ns3::Ptr<ns3::NetDevice> device) [member function]
-    cls.add_method('SetDevice', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::NetDevice >', 'device')])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetDown() [member function]
-    cls.add_method('SetDown', 
-                   'void', 
-                   [])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetForwarding(bool forward) [member function]
-    cls.add_method('SetForwarding', 
-                   'void', 
-                   [param('bool', 'forward')])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetMetric(uint16_t metric) [member function]
-    cls.add_method('SetMetric', 
-                   'void', 
-                   [param('uint16_t', 'metric')])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetNode(ns3::Ptr<ns3::Node> node) [member function]
-    cls.add_method('SetNode', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::Node >', 'node')])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetNsDadUid(ns3::Ipv6Address address, uint32_t uid) [member function]
-    cls.add_method('SetNsDadUid', 
-                   'void', 
-                   [param('ns3::Ipv6Address', 'address'), param('uint32_t', 'uid')])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetReachableTime(uint16_t reachableTime) [member function]
-    cls.add_method('SetReachableTime', 
-                   'void', 
-                   [param('uint16_t', 'reachableTime')])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetRetransTimer(uint16_t retransTimer) [member function]
-    cls.add_method('SetRetransTimer', 
-                   'void', 
-                   [param('uint16_t', 'retransTimer')])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetState(ns3::Ipv6Address address, ns3::Ipv6InterfaceAddress::State_e state) [member function]
-    cls.add_method('SetState', 
-                   'void', 
-                   [param('ns3::Ipv6Address', 'address'), param('ns3::Ipv6InterfaceAddress::State_e', 'state')])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetUp() [member function]
-    cls.add_method('SetUp', 
-                   'void', 
-                   [])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::DoDispose() [member function]
-    cls.add_method('DoDispose', 
-                   'void', 
-                   [], 
-                   visibility='protected', is_virtual=True)
-    return
-
 def register_Ns3Ipv6PrefixChecker_methods(root_module, cls):
     ## ipv6-address.h (module 'network'): ns3::Ipv6PrefixChecker::Ipv6PrefixChecker() [constructor]
     cls.add_constructor([])
@@ -17541,10 +17009,10 @@
                    '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')])
     return
 
 def register_Ns3ParetoRandomVariable_methods(root_module, cls):
@@ -19312,6 +18780,47 @@
                    [param('ns3::MacCeListElement_s', 'bsr')])
     return
 
+def register_Ns3CqaFfMacScheduler_methods(root_module, cls):
+    ## cqa-ff-mac-scheduler.h (module 'lte'): ns3::CqaFfMacScheduler::CqaFfMacScheduler(ns3::CqaFfMacScheduler const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::CqaFfMacScheduler const &', 'arg0')])
+    ## cqa-ff-mac-scheduler.h (module 'lte'): ns3::CqaFfMacScheduler::CqaFfMacScheduler() [constructor]
+    cls.add_constructor([])
+    ## cqa-ff-mac-scheduler.h (module 'lte'): void ns3::CqaFfMacScheduler::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    ## cqa-ff-mac-scheduler.h (module 'lte'): ns3::FfMacCschedSapProvider * ns3::CqaFfMacScheduler::GetFfMacCschedSapProvider() [member function]
+    cls.add_method('GetFfMacCschedSapProvider', 
+                   'ns3::FfMacCschedSapProvider *', 
+                   [], 
+                   is_virtual=True)
+    ## cqa-ff-mac-scheduler.h (module 'lte'): ns3::FfMacSchedSapProvider * ns3::CqaFfMacScheduler::GetFfMacSchedSapProvider() [member function]
+    cls.add_method('GetFfMacSchedSapProvider', 
+                   'ns3::FfMacSchedSapProvider *', 
+                   [], 
+                   is_virtual=True)
+    ## cqa-ff-mac-scheduler.h (module 'lte'): static ns3::TypeId ns3::CqaFfMacScheduler::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## cqa-ff-mac-scheduler.h (module 'lte'): void ns3::CqaFfMacScheduler::SetFfMacCschedSapUser(ns3::FfMacCschedSapUser * s) [member function]
+    cls.add_method('SetFfMacCschedSapUser', 
+                   'void', 
+                   [param('ns3::FfMacCschedSapUser *', 's')], 
+                   is_virtual=True)
+    ## cqa-ff-mac-scheduler.h (module 'lte'): void ns3::CqaFfMacScheduler::SetFfMacSchedSapUser(ns3::FfMacSchedSapUser * s) [member function]
+    cls.add_method('SetFfMacSchedSapUser', 
+                   'void', 
+                   [param('ns3::FfMacSchedSapUser *', 's')], 
+                   is_virtual=True)
+    ## cqa-ff-mac-scheduler.h (module 'lte'): void ns3::CqaFfMacScheduler::TransmissionModeConfigurationUpdate(uint16_t rnti, uint8_t txMode) [member function]
+    cls.add_method('TransmissionModeConfigurationUpdate', 
+                   'void', 
+                   [param('uint16_t', 'rnti'), param('uint8_t', 'txMode')])
+    return
+
 def register_Ns3DlCqiLteControlMessage_methods(root_module, cls):
     ## lte-control-messages.h (module 'lte'): ns3::DlCqiLteControlMessage::DlCqiLteControlMessage(ns3::DlCqiLteControlMessage const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::DlCqiLteControlMessage const &', 'arg0')])
diff -Naur ns-3.19/src/lte/bindings/modulegen__gcc_LP64.py ns-3.20/src/lte/bindings/modulegen__gcc_LP64.py
--- ns-3.19/src/lte/bindings/modulegen__gcc_LP64.py	2014-06-17 10:34:00.588635503 -0700
+++ ns-3.20/src/lte/bindings/modulegen__gcc_LP64.py	2014-06-17 10:33:13.940995599 -0700
@@ -70,6 +70,8 @@
     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')
+    ## cqa-ff-mac-scheduler.h (module 'lte'): ns3::CqasFlowPerf_t [struct]
+    module.add_class('CqasFlowPerf_t')
     ## ff-mac-common.h (module 'lte'): ns3::CqiConfig_s [struct]
     module.add_class('CqiConfig_s')
     ## ff-mac-common.h (module 'lte'): ns3::CqiListElement_s [struct]
@@ -292,34 +294,6 @@
     module.add_class('InetSocketAddress', import_from_module='ns.network')
     ## inet-socket-address.h (module 'network'): ns3::InetSocketAddress [class]
     root_module['ns3::InetSocketAddress'].implicitly_converts_to(root_module['ns3::Address'])
-    ## int-to-type.h (module 'core'): ns3::IntToType<0> [struct]
-    module.add_class('IntToType', import_from_module='ns.core', template_parameters=['0'])
-    ## int-to-type.h (module 'core'): ns3::IntToType<0>::v_e [enumeration]
-    module.add_enum('v_e', ['value'], outer_class=root_module['ns3::IntToType< 0 >'], import_from_module='ns.core')
-    ## int-to-type.h (module 'core'): ns3::IntToType<1> [struct]
-    module.add_class('IntToType', import_from_module='ns.core', template_parameters=['1'])
-    ## int-to-type.h (module 'core'): ns3::IntToType<1>::v_e [enumeration]
-    module.add_enum('v_e', ['value'], outer_class=root_module['ns3::IntToType< 1 >'], import_from_module='ns.core')
-    ## int-to-type.h (module 'core'): ns3::IntToType<2> [struct]
-    module.add_class('IntToType', import_from_module='ns.core', template_parameters=['2'])
-    ## int-to-type.h (module 'core'): ns3::IntToType<2>::v_e [enumeration]
-    module.add_enum('v_e', ['value'], outer_class=root_module['ns3::IntToType< 2 >'], import_from_module='ns.core')
-    ## int-to-type.h (module 'core'): ns3::IntToType<3> [struct]
-    module.add_class('IntToType', import_from_module='ns.core', template_parameters=['3'])
-    ## int-to-type.h (module 'core'): ns3::IntToType<3>::v_e [enumeration]
-    module.add_enum('v_e', ['value'], outer_class=root_module['ns3::IntToType< 3 >'], import_from_module='ns.core')
-    ## int-to-type.h (module 'core'): ns3::IntToType<4> [struct]
-    module.add_class('IntToType', import_from_module='ns.core', template_parameters=['4'])
-    ## int-to-type.h (module 'core'): ns3::IntToType<4>::v_e [enumeration]
-    module.add_enum('v_e', ['value'], outer_class=root_module['ns3::IntToType< 4 >'], import_from_module='ns.core')
-    ## int-to-type.h (module 'core'): ns3::IntToType<5> [struct]
-    module.add_class('IntToType', import_from_module='ns.core', template_parameters=['5'])
-    ## int-to-type.h (module 'core'): ns3::IntToType<5>::v_e [enumeration]
-    module.add_enum('v_e', ['value'], outer_class=root_module['ns3::IntToType< 5 >'], import_from_module='ns.core')
-    ## int-to-type.h (module 'core'): ns3::IntToType<6> [struct]
-    module.add_class('IntToType', import_from_module='ns.core', template_parameters=['6'])
-    ## int-to-type.h (module 'core'): ns3::IntToType<6>::v_e [enumeration]
-    module.add_enum('v_e', ['value'], outer_class=root_module['ns3::IntToType< 6 >'], 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]
@@ -338,12 +312,6 @@
     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-interface-address.h (module 'internet'): ns3::Ipv6InterfaceAddress [class]
-    module.add_class('Ipv6InterfaceAddress', import_from_module='ns.internet')
-    ## ipv6-interface-address.h (module 'internet'): ns3::Ipv6InterfaceAddress::State_e [enumeration]
-    module.add_enum('State_e', ['TENTATIVE', 'DEPRECATED', 'PREFERRED', 'PERMANENT', 'HOMEADDRESS', 'TENTATIVE_OPTIMISTIC', 'INVALID'], outer_class=root_module['ns3::Ipv6InterfaceAddress'], import_from_module='ns.internet')
-    ## ipv6-interface-address.h (module 'internet'): ns3::Ipv6InterfaceAddress::Scope_e [enumeration]
-    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')
     ## log.h (module 'core'): ns3::LogComponent [class]
@@ -640,6 +608,8 @@
     module.add_enum('TagData_e', ['MAX_SIZE'], outer_class=root_module['ns3::PacketTagList::TagData'], import_from_module='ns.network')
     ## ff-mac-common.h (module 'lte'): ns3::PagingInfoListElement_s [struct]
     module.add_class('PagingInfoListElement_s')
+    ## log.h (module 'core'): ns3::ParameterLogger [class]
+    module.add_class('ParameterLogger', import_from_module='ns.core')
     ## ff-mac-common.h (module 'lte'): ns3::PhichListElement_s [struct]
     module.add_class('PhichListElement_s')
     ## ff-mac-common.h (module 'lte'): ns3::PhichListElement_s::Phich_e [enumeration]
@@ -684,14 +654,8 @@
     module.add_class('TbId_t')
     ## lte-mi-error-model.h (module 'lte'): ns3::TbStats_t [struct]
     module.add_class('TbStats_t')
-    ## timer.h (module 'core'): ns3::Timer [class]
-    module.add_class('Timer', import_from_module='ns.core')
-    ## timer.h (module 'core'): ns3::Timer::DestroyPolicy [enumeration]
-    module.add_enum('DestroyPolicy', ['CANCEL_ON_DESTROY', 'REMOVE_ON_DESTROY', 'CHECK_ON_DESTROY'], outer_class=root_module['ns3::Timer'], import_from_module='ns.core')
-    ## timer.h (module 'core'): ns3::Timer::State [enumeration]
-    module.add_enum('State', ['RUNNING', 'EXPIRED', 'SUSPENDED'], outer_class=root_module['ns3::Timer'], import_from_module='ns.core')
-    ## timer-impl.h (module 'core'): ns3::TimerImpl [class]
-    module.add_class('TimerImpl', allow_subclassing=True, import_from_module='ns.core')
+    ## nstime.h (module 'core'): ns3::TimeWithUnit [class]
+    module.add_class('TimeWithUnit', import_from_module='ns.core')
     ## lte-common.h (module 'lte'): ns3::TransmissionModesLayers [class]
     module.add_class('TransmissionModesLayers')
     ## type-id.h (module 'core'): ns3::TypeId [class]
@@ -734,6 +698,8 @@
     module.add_class('fdtbfqsFlowPerf_t')
     ## 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')
     ## pf-ff-mac-scheduler.h (module 'lte'): ns3::pfsFlowPerf_t [struct]
     module.add_class('pfsFlowPerf_t')
     ## pss-ff-mac-scheduler.h (module 'lte'): ns3::pssFlowPerf_t [struct]
@@ -758,10 +724,6 @@
     module.add_enum('DscpType', ['DscpDefault', 'DSCP_CS1', 'DSCP_AF11', 'DSCP_AF12', 'DSCP_AF13', 'DSCP_CS2', 'DSCP_AF21', 'DSCP_AF22', 'DSCP_AF23', 'DSCP_CS3', 'DSCP_AF31', 'DSCP_AF32', 'DSCP_AF33', 'DSCP_CS4', 'DSCP_AF41', 'DSCP_AF42', 'DSCP_AF43', 'DSCP_CS5', 'DSCP_EF', 'DSCP_CS6', 'DSCP_CS7'], outer_class=root_module['ns3::Ipv4Header'], import_from_module='ns.internet')
     ## ipv4-header.h (module 'internet'): ns3::Ipv4Header::EcnType [enumeration]
     module.add_enum('EcnType', ['ECN_NotECT', 'ECN_ECT1', 'ECN_ECT0', 'ECN_CE'], outer_class=root_module['ns3::Ipv4Header'], import_from_module='ns.internet')
-    ## ipv6-header.h (module 'internet'): ns3::Ipv6Header [class]
-    module.add_class('Ipv6Header', import_from_module='ns.internet', parent=root_module['ns3::Header'])
-    ## ipv6-header.h (module 'internet'): ns3::Ipv6Header::NextHeader_e [enumeration]
-    module.add_enum('NextHeader_e', ['IPV6_EXT_HOP_BY_HOP', 'IPV6_IPV4', 'IPV6_TCP', 'IPV6_UDP', 'IPV6_IPV6', 'IPV6_EXT_ROUTING', 'IPV6_EXT_FRAGMENTATION', 'IPV6_EXT_CONFIDENTIALITY', 'IPV6_EXT_AUTHENTIFICATION', 'IPV6_ICMPV6', 'IPV6_EXT_END', 'IPV6_EXT_DESTINATION', 'IPV6_SCTP', 'IPV6_EXT_MOBILITY', 'IPV6_UDP_LITE'], outer_class=root_module['ns3::Ipv6Header'], import_from_module='ns.internet')
     ## lte-rrc-sap.h (module 'lte'): ns3::LteEnbRrcSapProvider [class]
     module.add_class('LteEnbRrcSapProvider', parent=root_module['ns3::LteRrcSap'])
     ## lte-rrc-sap.h (module 'lte'): ns3::LteEnbRrcSapProvider::CompleteSetupUeParameters [struct]
@@ -1034,10 +996,6 @@
     module.add_class('GtpuHeader', parent=root_module['ns3::Header'])
     ## integer.h (module 'core'): ns3::IntegerValue [class]
     module.add_class('IntegerValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
-    ## ip-l4-protocol.h (module 'internet'): ns3::IpL4Protocol [class]
-    module.add_class('IpL4Protocol', import_from_module='ns.internet', parent=root_module['ns3::Object'])
-    ## ip-l4-protocol.h (module 'internet'): ns3::IpL4Protocol::RxStatus [enumeration]
-    module.add_enum('RxStatus', ['RX_OK', 'RX_CSUM_FAILED', 'RX_ENDPOINT_CLOSED', 'RX_ENDPOINT_UNREACH'], outer_class=root_module['ns3::IpL4Protocol'], import_from_module='ns.internet')
     ## ipv4.h (module 'internet'): ns3::Ipv4 [class]
     module.add_class('Ipv4', import_from_module='ns.internet', parent=root_module['ns3::Object'])
     ## ipv4-address.h (module 'network'): ns3::Ipv4AddressChecker [class]
@@ -1056,8 +1014,6 @@
     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-interface.h (module 'internet'): ns3::Ipv6Interface [class]
-    module.add_class('Ipv6Interface', import_from_module='ns.internet', parent=root_module['ns3::Object'])
     ## 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]
@@ -1262,6 +1218,8 @@
     module.add_class('AddressValue', import_from_module='ns.network', parent=root_module['ns3::AttributeValue'])
     ## lte-control-messages.h (module 'lte'): ns3::BsrLteControlMessage [class]
     module.add_class('BsrLteControlMessage', parent=root_module['ns3::LteControlMessage'])
+    ## cqa-ff-mac-scheduler.h (module 'lte'): ns3::CqaFfMacScheduler [class]
+    module.add_class('CqaFfMacScheduler', parent=root_module['ns3::FfMacScheduler'])
     ## lte-control-messages.h (module 'lte'): ns3::DlCqiLteControlMessage [class]
     module.add_class('DlCqiLteControlMessage', parent=root_module['ns3::LteControlMessage'])
     ## lte-control-messages.h (module 'lte'): ns3::DlDciLteControlMessage [class]
@@ -1318,176 +1276,176 @@
     module.add_class('RrcConnectionSetupHeader', parent=root_module['ns3::RrcDlCcchMessage'])
     ## lte-enb-net-device.h (module 'lte'): ns3::LteEnbNetDevice [class]
     module.add_class('LteEnbNetDevice', parent=root_module['ns3::LteNetDevice'])
-    module.add_container('std::vector< ns3::CeBitmap_e >', 'ns3::CeBitmap_e', container_type='vector')
-    module.add_container('std::vector< std::vector< ns3::RlcPduListElement_s > >', 'std::vector< ns3::RlcPduListElement_s >', container_type='vector')
-    module.add_container('std::vector< unsigned char >', 'unsigned char', container_type='vector')
-    module.add_container('std::vector< unsigned short >', 'short unsigned int', container_type='vector')
-    module.add_container('std::vector< ns3::DlInfoListElement_s::HarqStatus_e >', 'ns3::DlInfoListElement_s::HarqStatus_e', container_type='vector')
-    module.add_container('std::list< ns3::EpcEnbS1SapProvider::BearerToBeSwitched >', 'ns3::EpcEnbS1SapProvider::BearerToBeSwitched', container_type='list')
-    module.add_container('std::list< ns3::EpcS11SapMme::BearerContextCreated >', 'ns3::EpcS11SapMme::BearerContextCreated', container_type='list')
-    module.add_container('std::list< ns3::EpcS11SapSgw::BearerContextToBeCreated >', 'ns3::EpcS11SapSgw::BearerContextToBeCreated', container_type='list')
-    module.add_container('std::list< ns3::EpcS1apSapEnb::ErabToBeSetupItem >', 'ns3::EpcS1apSapEnb::ErabToBeSetupItem', container_type='list')
-    module.add_container('std::list< ns3::EpcS1apSapEnb::ErabSwitchedInUplinkItem >', 'ns3::EpcS1apSapEnb::ErabSwitchedInUplinkItem', container_type='list')
-    module.add_container('std::list< ns3::EpcS1apSapMme::ErabSetupItem >', 'ns3::EpcS1apSapMme::ErabSetupItem', container_type='list')
-    module.add_container('std::list< ns3::EpcS1apSapMme::ErabSwitchedInDownlinkItem >', 'ns3::EpcS1apSapMme::ErabSwitchedInDownlinkItem', container_type='list')
-    module.add_container('std::vector< ns3::EpcX2Sap::UlInterferenceOverloadIndicationItem >', 'ns3::EpcX2Sap::UlInterferenceOverloadIndicationItem', container_type='vector')
-    module.add_container('std::vector< ns3::EpcX2Sap::UlHighInterferenceInformationItem >', 'ns3::EpcX2Sap::UlHighInterferenceInformationItem', container_type='vector')
-    module.add_container('std::vector< bool >', 'bool', container_type='vector')
-    module.add_container('std::vector< ns3::EpcX2Sap::ErabToBeSetupItem >', 'ns3::EpcX2Sap::ErabToBeSetupItem', container_type='vector')
-    module.add_container('std::vector< ns3::EpcX2Sap::ErabAdmittedItem >', 'ns3::EpcX2Sap::ErabAdmittedItem', container_type='vector')
-    module.add_container('std::vector< ns3::EpcX2Sap::ErabNotAdmittedItem >', 'ns3::EpcX2Sap::ErabNotAdmittedItem', container_type='vector')
-    module.add_container('std::vector< ns3::EpcX2Sap::ErabsSubjectToStatusTransferItem >', 'ns3::EpcX2Sap::ErabsSubjectToStatusTransferItem', container_type='vector')
-    module.add_container('std::vector< ns3::EpcX2Sap::CellInformationItem >', 'ns3::EpcX2Sap::CellInformationItem', container_type='vector')
-    module.add_container('std::vector< ns3::EpcX2Sap::CellMeasurementResultItem >', 'ns3::EpcX2Sap::CellMeasurementResultItem', container_type='vector')
-    module.add_container('std::vector< ns3::VendorSpecificListElement_s >', 'ns3::VendorSpecificListElement_s', container_type='vector')
-    module.add_container('std::vector< ns3::LogicalChannelConfigListElement_s >', 'ns3::LogicalChannelConfigListElement_s', container_type='vector')
-    module.add_container('std::vector< ns3::PagingInfoListElement_s >', 'ns3::PagingInfoListElement_s', container_type='vector')
-    module.add_container('std::vector< ns3::DlInfoListElement_s >', 'ns3::DlInfoListElement_s', container_type='vector')
-    module.add_container('std::vector< ns3::RachListElement_s >', 'ns3::RachListElement_s', container_type='vector')
-    module.add_container('std::vector< ns3::CqiListElement_s >', 'ns3::CqiListElement_s', container_type='vector')
-    module.add_container('std::vector< ns3::UlInfoListElement_s >', 'ns3::UlInfoListElement_s', container_type='vector')
-    module.add_container('std::vector< ns3::SrListElement_s >', 'ns3::SrListElement_s', container_type='vector')
-    module.add_container('std::vector< ns3::MacCeListElement_s >', 'ns3::MacCeListElement_s', container_type='vector')
-    module.add_container('std::vector< ns3::BuildDataListElement_s >', 'ns3::BuildDataListElement_s', container_type='vector')
-    module.add_container('std::vector< ns3::BuildRarListElement_s >', 'ns3::BuildRarListElement_s', container_type='vector')
-    module.add_container('std::vector< ns3::BuildBroadcastListElement_s >', 'ns3::BuildBroadcastListElement_s', container_type='vector')
-    module.add_container('std::vector< ns3::UlDciListElement_s >', 'ns3::UlDciListElement_s', container_type='vector')
-    module.add_container('std::vector< ns3::PhichListElement_s >', 'ns3::PhichListElement_s', container_type='vector')
-    module.add_container('std::vector< int >', 'int', container_type='vector')
-    module.add_container('ns3::HarqProcessInfoList_t', 'ns3::HarqProcessInfoElement_t', container_type='vector')
-    module.add_container('std::list< ns3::LteRrcSap::SrbToAddMod >', 'ns3::LteRrcSap::SrbToAddMod', container_type='list')
-    module.add_container('std::list< ns3::LteRrcSap::DrbToAddMod >', 'ns3::LteRrcSap::DrbToAddMod', container_type='list')
-    module.add_container('std::list< unsigned char >', 'unsigned char', container_type='list')
-    module.add_container('std::list< ns3::LteRrcSap::CellsToAddMod >', 'ns3::LteRrcSap::CellsToAddMod', container_type='list')
-    module.add_container('std::list< ns3::LteRrcSap::BlackCellsToAddMod >', 'ns3::LteRrcSap::BlackCellsToAddMod', container_type='list')
-    module.add_container('std::list< ns3::LteRrcSap::MeasObjectToAddMod >', 'ns3::LteRrcSap::MeasObjectToAddMod', container_type='list')
-    module.add_container('std::list< ns3::LteRrcSap::ReportConfigToAddMod >', 'ns3::LteRrcSap::ReportConfigToAddMod', container_type='list')
-    module.add_container('std::list< ns3::LteRrcSap::MeasIdToAddMod >', 'ns3::LteRrcSap::MeasIdToAddMod', container_type='list')
-    module.add_container('std::list< unsigned int >', 'unsigned int', container_type='list')
-    module.add_container('std::list< ns3::LteRrcSap::MeasResultEutra >', 'ns3::LteRrcSap::MeasResultEutra', container_type='list')
-    module.add_container('std::vector< ns3::LteUeCphySapUser::UeMeasurementsElement >', 'ns3::LteUeCphySapUser::UeMeasurementsElement', container_type='vector')
-    module.add_container('std::vector< ns3::HigherLayerSelected_s >', 'ns3::HigherLayerSelected_s', container_type='vector')
-    module.add_container('std::vector< ns3::SiMessageListElement_s >', 'ns3::SiMessageListElement_s', container_type='vector')
-    module.add_container('std::list< ns3::Ptr< ns3::Packet > >', 'ns3::Ptr< ns3::Packet >', container_type='list')
-    module.add_container('std::vector< double >', 'double', container_type='vector')
-    module.add_container('ns3::Bands', 'ns3::BandInfo', container_type='vector')
-    module.add_container('std::map< unsigned int, unsigned int >', ('unsigned int', 'unsigned int'), container_type='map')
-    module.add_container('std::list< ns3::Ptr< ns3::LteControlMessage > >', 'ns3::Ptr< ns3::LteControlMessage >', container_type='list')
-    module.add_container('std::list< ns3::UlDciLteControlMessage >', 'ns3::UlDciLteControlMessage', container_type='list')
-    typehandlers.add_type_alias('std::map< ns3::ImsiLcidPair_t, unsigned long, std::less< ns3::ImsiLcidPair_t >, std::allocator< std::pair< ns3::ImsiLcidPair_t const, unsigned long > > >', 'ns3::Uint64Map')
-    typehandlers.add_type_alias('std::map< ns3::ImsiLcidPair_t, unsigned long, std::less< ns3::ImsiLcidPair_t >, std::allocator< std::pair< ns3::ImsiLcidPair_t const, unsigned long > > >*', 'ns3::Uint64Map*')
-    typehandlers.add_type_alias('std::map< ns3::ImsiLcidPair_t, unsigned long, std::less< ns3::ImsiLcidPair_t >, std::allocator< std::pair< ns3::ImsiLcidPair_t const, unsigned long > > >&', 'ns3::Uint64Map&')
-    typehandlers.add_type_alias('ns3::Callback< void, ns3::Ptr< ns3::Packet const >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'ns3::GenericPhyTxEndCallback')
-    typehandlers.add_type_alias('ns3::Callback< void, ns3::Ptr< ns3::Packet const >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >*', 'ns3::GenericPhyTxEndCallback*')
-    typehandlers.add_type_alias('ns3::Callback< void, ns3::Ptr< ns3::Packet const >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >&', 'ns3::GenericPhyTxEndCallback&')
-    typehandlers.add_type_alias('std::vector< std::vector< std::vector< ns3::RlcPduListElement_s, std::allocator< ns3::RlcPduListElement_s > >, std::allocator< std::vector< ns3::RlcPduListElement_s, std::allocator< ns3::RlcPduListElement_s > > > >, std::allocator< std::vector< std::vector< ns3::RlcPduListElement_s, std::allocator< ns3::RlcPduListElement_s > >, std::allocator< std::vector< ns3::RlcPduListElement_s, std::allocator< ns3::RlcPduListElement_s > > > > > >', 'ns3::DlHarqRlcPduListBuffer_t')
-    typehandlers.add_type_alias('std::vector< std::vector< std::vector< ns3::RlcPduListElement_s, std::allocator< ns3::RlcPduListElement_s > >, std::allocator< std::vector< ns3::RlcPduListElement_s, std::allocator< ns3::RlcPduListElement_s > > > >, std::allocator< std::vector< std::vector< ns3::RlcPduListElement_s, std::allocator< ns3::RlcPduListElement_s > >, std::allocator< std::vector< ns3::RlcPduListElement_s, std::allocator< ns3::RlcPduListElement_s > > > > > >*', 'ns3::DlHarqRlcPduListBuffer_t*')
-    typehandlers.add_type_alias('std::vector< std::vector< std::vector< ns3::RlcPduListElement_s, std::allocator< ns3::RlcPduListElement_s > >, std::allocator< std::vector< ns3::RlcPduListElement_s, std::allocator< ns3::RlcPduListElement_s > > > >, std::allocator< std::vector< std::vector< ns3::RlcPduListElement_s, std::allocator< ns3::RlcPduListElement_s > >, std::allocator< std::vector< ns3::RlcPduListElement_s, std::allocator< ns3::RlcPduListElement_s > > > > > >&', 'ns3::DlHarqRlcPduListBuffer_t&')
-    typehandlers.add_type_alias('ns3::Callback< void, unsigned short, ns3::Ptr< ns3::SpectrumValue >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'ns3::LtePhyRxPssCallback')
-    typehandlers.add_type_alias('ns3::Callback< void, unsigned short, ns3::Ptr< ns3::SpectrumValue >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >*', 'ns3::LtePhyRxPssCallback*')
-    typehandlers.add_type_alias('ns3::Callback< void, unsigned short, ns3::Ptr< ns3::SpectrumValue >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >&', 'ns3::LtePhyRxPssCallback&')
-    typehandlers.add_type_alias('ns3::Callback< void, ns3::Ptr< ns3::Packet const >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'ns3::LtePhyTxEndCallback')
-    typehandlers.add_type_alias('ns3::Callback< void, ns3::Ptr< ns3::Packet const >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >*', 'ns3::LtePhyTxEndCallback*')
-    typehandlers.add_type_alias('ns3::Callback< void, ns3::Ptr< ns3::Packet const >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >&', 'ns3::LtePhyTxEndCallback&')
-    typehandlers.add_type_alias('void ( * ) ( std::ostream & ) *', 'ns3::LogNodePrinter')
-    typehandlers.add_type_alias('void ( * ) ( std::ostream & ) **', 'ns3::LogNodePrinter*')
-    typehandlers.add_type_alias('void ( * ) ( std::ostream & ) *&', 'ns3::LogNodePrinter&')
-    typehandlers.add_type_alias('ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'ns3::GenericPhyRxStartCallback')
-    typehandlers.add_type_alias('ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >*', 'ns3::GenericPhyRxStartCallback*')
-    typehandlers.add_type_alias('ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >&', 'ns3::GenericPhyRxStartCallback&')
-    typehandlers.add_type_alias('ns3::Callback< void, ns3::Ptr< ns3::Packet >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'ns3::LtePhyRxDataEndOkCallback')
-    typehandlers.add_type_alias('ns3::Callback< void, ns3::Ptr< ns3::Packet >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >*', 'ns3::LtePhyRxDataEndOkCallback*')
-    typehandlers.add_type_alias('ns3::Callback< void, ns3::Ptr< ns3::Packet >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >&', 'ns3::LtePhyRxDataEndOkCallback&')
-    typehandlers.add_type_alias('ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'ns3::LtePhyRxDataEndErrorCallback')
-    typehandlers.add_type_alias('ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >*', 'ns3::LtePhyRxDataEndErrorCallback*')
-    typehandlers.add_type_alias('ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >&', 'ns3::LtePhyRxDataEndErrorCallback&')
-    typehandlers.add_type_alias('std::vector< ns3::HarqProcessInfoElement_t, std::allocator< ns3::HarqProcessInfoElement_t > >', 'ns3::HarqProcessInfoList_t')
-    typehandlers.add_type_alias('std::vector< ns3::HarqProcessInfoElement_t, std::allocator< ns3::HarqProcessInfoElement_t > >*', 'ns3::HarqProcessInfoList_t*')
-    typehandlers.add_type_alias('std::vector< ns3::HarqProcessInfoElement_t, std::allocator< ns3::HarqProcessInfoElement_t > >&', 'ns3::HarqProcessInfoList_t&')
-    typehandlers.add_type_alias('ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'ns3::LtePhyRxCtrlEndErrorCallback')
-    typehandlers.add_type_alias('ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >*', 'ns3::LtePhyRxCtrlEndErrorCallback*')
-    typehandlers.add_type_alias('ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >&', 'ns3::LtePhyRxCtrlEndErrorCallback&')
-    typehandlers.add_type_alias('ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'ns3::GenericPhyRxEndErrorCallback')
-    typehandlers.add_type_alias('ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >*', 'ns3::GenericPhyRxEndErrorCallback*')
-    typehandlers.add_type_alias('ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >&', 'ns3::GenericPhyRxEndErrorCallback&')
-    typehandlers.add_type_alias('std::vector< double, std::allocator< double > >', 'ns3::Values')
-    typehandlers.add_type_alias('std::vector< double, std::allocator< double > >*', 'ns3::Values*')
-    typehandlers.add_type_alias('std::vector< double, std::allocator< double > >&', 'ns3::Values&')
-    typehandlers.add_type_alias('std::vector< unsigned char, std::allocator< unsigned char > >', 'ns3::DlHarqProcessesStatus_t')
-    typehandlers.add_type_alias('std::vector< unsigned char, std::allocator< unsigned char > >*', 'ns3::DlHarqProcessesStatus_t*')
-    typehandlers.add_type_alias('std::vector< unsigned char, std::allocator< unsigned char > >&', 'ns3::DlHarqProcessesStatus_t&')
-    typehandlers.add_type_alias('ns3::Callback< bool, ns3::Ptr< ns3::Packet >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'ns3::GenericPhyTxStartCallback')
-    typehandlers.add_type_alias('ns3::Callback< bool, ns3::Ptr< ns3::Packet >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >*', 'ns3::GenericPhyTxStartCallback*')
-    typehandlers.add_type_alias('ns3::Callback< bool, ns3::Ptr< ns3::Packet >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >&', 'ns3::GenericPhyTxStartCallback&')
-    typehandlers.add_type_alias('std::vector< ns3::BandInfo, std::allocator< ns3::BandInfo > >', 'ns3::Bands')
-    typehandlers.add_type_alias('std::vector< ns3::BandInfo, std::allocator< ns3::BandInfo > >*', 'ns3::Bands*')
-    typehandlers.add_type_alias('std::vector< ns3::BandInfo, std::allocator< ns3::BandInfo > >&', 'ns3::Bands&')
-    typehandlers.add_type_alias('ns3::Callback< void, ns3::DlInfoListElement_s, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'ns3::LtePhyDlHarqFeedbackCallback')
-    typehandlers.add_type_alias('ns3::Callback< void, ns3::DlInfoListElement_s, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >*', 'ns3::LtePhyDlHarqFeedbackCallback*')
-    typehandlers.add_type_alias('ns3::Callback< void, ns3::DlInfoListElement_s, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >&', 'ns3::LtePhyDlHarqFeedbackCallback&')
-    typehandlers.add_type_alias('std::map< ns3::TbId_t, ns3::tbInfo_t, std::less< ns3::TbId_t >, std::allocator< std::pair< ns3::TbId_t const, ns3::tbInfo_t > > >', 'ns3::expectedTbs_t')
-    typehandlers.add_type_alias('std::map< ns3::TbId_t, ns3::tbInfo_t, std::less< ns3::TbId_t >, std::allocator< std::pair< ns3::TbId_t const, ns3::tbInfo_t > > >*', 'ns3::expectedTbs_t*')
-    typehandlers.add_type_alias('std::map< ns3::TbId_t, ns3::tbInfo_t, std::less< ns3::TbId_t >, std::allocator< std::pair< ns3::TbId_t const, ns3::tbInfo_t > > >&', 'ns3::expectedTbs_t&')
-    typehandlers.add_type_alias('ns3::Vector3D', 'ns3::Vector')
-    typehandlers.add_type_alias('ns3::Vector3D*', 'ns3::Vector*')
-    typehandlers.add_type_alias('ns3::Vector3D&', 'ns3::Vector&')
+    module.add_container('std::vector< ns3::CeBitmap_e >', 'ns3::CeBitmap_e', container_type=u'vector')
+    module.add_container('std::vector< std::vector< ns3::RlcPduListElement_s > >', 'std::vector< ns3::RlcPduListElement_s >', container_type=u'vector')
+    module.add_container('std::vector< unsigned char >', 'unsigned char', container_type=u'vector')
+    module.add_container('std::vector< unsigned short >', 'short unsigned int', container_type=u'vector')
+    module.add_container('std::vector< ns3::DlInfoListElement_s::HarqStatus_e >', 'ns3::DlInfoListElement_s::HarqStatus_e', container_type=u'vector')
+    module.add_container('std::list< ns3::EpcEnbS1SapProvider::BearerToBeSwitched >', 'ns3::EpcEnbS1SapProvider::BearerToBeSwitched', container_type=u'list')
+    module.add_container('std::list< ns3::EpcS11SapMme::BearerContextCreated >', 'ns3::EpcS11SapMme::BearerContextCreated', container_type=u'list')
+    module.add_container('std::list< ns3::EpcS11SapSgw::BearerContextToBeCreated >', 'ns3::EpcS11SapSgw::BearerContextToBeCreated', container_type=u'list')
+    module.add_container('std::list< ns3::EpcS1apSapEnb::ErabToBeSetupItem >', 'ns3::EpcS1apSapEnb::ErabToBeSetupItem', container_type=u'list')
+    module.add_container('std::list< ns3::EpcS1apSapEnb::ErabSwitchedInUplinkItem >', 'ns3::EpcS1apSapEnb::ErabSwitchedInUplinkItem', container_type=u'list')
+    module.add_container('std::list< ns3::EpcS1apSapMme::ErabSetupItem >', 'ns3::EpcS1apSapMme::ErabSetupItem', container_type=u'list')
+    module.add_container('std::list< ns3::EpcS1apSapMme::ErabSwitchedInDownlinkItem >', 'ns3::EpcS1apSapMme::ErabSwitchedInDownlinkItem', container_type=u'list')
+    module.add_container('std::vector< ns3::EpcX2Sap::UlInterferenceOverloadIndicationItem >', 'ns3::EpcX2Sap::UlInterferenceOverloadIndicationItem', container_type=u'vector')
+    module.add_container('std::vector< ns3::EpcX2Sap::UlHighInterferenceInformationItem >', 'ns3::EpcX2Sap::UlHighInterferenceInformationItem', container_type=u'vector')
+    module.add_container('std::vector< bool >', 'bool', container_type=u'vector')
+    module.add_container('std::vector< ns3::EpcX2Sap::ErabToBeSetupItem >', 'ns3::EpcX2Sap::ErabToBeSetupItem', container_type=u'vector')
+    module.add_container('std::vector< ns3::EpcX2Sap::ErabAdmittedItem >', 'ns3::EpcX2Sap::ErabAdmittedItem', container_type=u'vector')
+    module.add_container('std::vector< ns3::EpcX2Sap::ErabNotAdmittedItem >', 'ns3::EpcX2Sap::ErabNotAdmittedItem', container_type=u'vector')
+    module.add_container('std::vector< ns3::EpcX2Sap::ErabsSubjectToStatusTransferItem >', 'ns3::EpcX2Sap::ErabsSubjectToStatusTransferItem', container_type=u'vector')
+    module.add_container('std::vector< ns3::EpcX2Sap::CellInformationItem >', 'ns3::EpcX2Sap::CellInformationItem', container_type=u'vector')
+    module.add_container('std::vector< ns3::EpcX2Sap::CellMeasurementResultItem >', 'ns3::EpcX2Sap::CellMeasurementResultItem', container_type=u'vector')
+    module.add_container('std::vector< ns3::VendorSpecificListElement_s >', 'ns3::VendorSpecificListElement_s', container_type=u'vector')
+    module.add_container('std::vector< ns3::LogicalChannelConfigListElement_s >', 'ns3::LogicalChannelConfigListElement_s', container_type=u'vector')
+    module.add_container('std::vector< ns3::PagingInfoListElement_s >', 'ns3::PagingInfoListElement_s', container_type=u'vector')
+    module.add_container('std::vector< ns3::DlInfoListElement_s >', 'ns3::DlInfoListElement_s', container_type=u'vector')
+    module.add_container('std::vector< ns3::RachListElement_s >', 'ns3::RachListElement_s', container_type=u'vector')
+    module.add_container('std::vector< ns3::CqiListElement_s >', 'ns3::CqiListElement_s', container_type=u'vector')
+    module.add_container('std::vector< ns3::UlInfoListElement_s >', 'ns3::UlInfoListElement_s', container_type=u'vector')
+    module.add_container('std::vector< ns3::SrListElement_s >', 'ns3::SrListElement_s', container_type=u'vector')
+    module.add_container('std::vector< ns3::MacCeListElement_s >', 'ns3::MacCeListElement_s', container_type=u'vector')
+    module.add_container('std::vector< ns3::BuildDataListElement_s >', 'ns3::BuildDataListElement_s', container_type=u'vector')
+    module.add_container('std::vector< ns3::BuildRarListElement_s >', 'ns3::BuildRarListElement_s', container_type=u'vector')
+    module.add_container('std::vector< ns3::BuildBroadcastListElement_s >', 'ns3::BuildBroadcastListElement_s', container_type=u'vector')
+    module.add_container('std::vector< ns3::UlDciListElement_s >', 'ns3::UlDciListElement_s', container_type=u'vector')
+    module.add_container('std::vector< ns3::PhichListElement_s >', 'ns3::PhichListElement_s', container_type=u'vector')
+    module.add_container('std::vector< int >', 'int', container_type=u'vector')
+    module.add_container('ns3::HarqProcessInfoList_t', 'ns3::HarqProcessInfoElement_t', container_type=u'vector')
+    module.add_container('std::list< ns3::LteRrcSap::SrbToAddMod >', 'ns3::LteRrcSap::SrbToAddMod', container_type=u'list')
+    module.add_container('std::list< ns3::LteRrcSap::DrbToAddMod >', 'ns3::LteRrcSap::DrbToAddMod', container_type=u'list')
+    module.add_container('std::list< unsigned char >', 'unsigned char', container_type=u'list')
+    module.add_container('std::list< ns3::LteRrcSap::CellsToAddMod >', 'ns3::LteRrcSap::CellsToAddMod', container_type=u'list')
+    module.add_container('std::list< ns3::LteRrcSap::BlackCellsToAddMod >', 'ns3::LteRrcSap::BlackCellsToAddMod', container_type=u'list')
+    module.add_container('std::list< ns3::LteRrcSap::MeasObjectToAddMod >', 'ns3::LteRrcSap::MeasObjectToAddMod', container_type=u'list')
+    module.add_container('std::list< ns3::LteRrcSap::ReportConfigToAddMod >', 'ns3::LteRrcSap::ReportConfigToAddMod', container_type=u'list')
+    module.add_container('std::list< ns3::LteRrcSap::MeasIdToAddMod >', 'ns3::LteRrcSap::MeasIdToAddMod', container_type=u'list')
+    module.add_container('std::list< unsigned int >', 'unsigned int', container_type=u'list')
+    module.add_container('std::list< ns3::LteRrcSap::MeasResultEutra >', 'ns3::LteRrcSap::MeasResultEutra', container_type=u'list')
+    module.add_container('std::vector< ns3::LteUeCphySapUser::UeMeasurementsElement >', 'ns3::LteUeCphySapUser::UeMeasurementsElement', container_type=u'vector')
+    module.add_container('std::vector< ns3::HigherLayerSelected_s >', 'ns3::HigherLayerSelected_s', container_type=u'vector')
+    module.add_container('std::vector< ns3::SiMessageListElement_s >', 'ns3::SiMessageListElement_s', 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::vector< double >', 'double', container_type=u'vector')
+    module.add_container('ns3::Bands', 'ns3::BandInfo', container_type=u'vector')
+    module.add_container('std::map< unsigned int, unsigned int >', ('unsigned int', 'unsigned int'), container_type=u'map')
+    module.add_container('std::list< ns3::Ptr< ns3::LteControlMessage > >', 'ns3::Ptr< ns3::LteControlMessage >', container_type=u'list')
+    module.add_container('std::list< ns3::UlDciLteControlMessage >', 'ns3::UlDciLteControlMessage', container_type=u'list')
+    typehandlers.add_type_alias(u'std::map< ns3::ImsiLcidPair_t, unsigned long, std::less< ns3::ImsiLcidPair_t >, std::allocator< std::pair< ns3::ImsiLcidPair_t const, unsigned long > > >', u'ns3::Uint64Map')
+    typehandlers.add_type_alias(u'std::map< ns3::ImsiLcidPair_t, unsigned long, std::less< ns3::ImsiLcidPair_t >, std::allocator< std::pair< ns3::ImsiLcidPair_t const, unsigned long > > >*', u'ns3::Uint64Map*')
+    typehandlers.add_type_alias(u'std::map< ns3::ImsiLcidPair_t, unsigned long, std::less< ns3::ImsiLcidPair_t >, std::allocator< std::pair< ns3::ImsiLcidPair_t const, unsigned long > > >&', u'ns3::Uint64Map&')
+    typehandlers.add_type_alias(u'ns3::Callback< void, ns3::Ptr< ns3::Packet const >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', u'ns3::GenericPhyTxEndCallback')
+    typehandlers.add_type_alias(u'ns3::Callback< void, ns3::Ptr< ns3::Packet const >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >*', u'ns3::GenericPhyTxEndCallback*')
+    typehandlers.add_type_alias(u'ns3::Callback< void, ns3::Ptr< ns3::Packet const >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >&', u'ns3::GenericPhyTxEndCallback&')
+    typehandlers.add_type_alias(u'std::vector< std::vector< std::vector< ns3::RlcPduListElement_s, std::allocator< ns3::RlcPduListElement_s > >, std::allocator< std::vector< ns3::RlcPduListElement_s, std::allocator< ns3::RlcPduListElement_s > > > >, std::allocator< std::vector< std::vector< ns3::RlcPduListElement_s, std::allocator< ns3::RlcPduListElement_s > >, std::allocator< std::vector< ns3::RlcPduListElement_s, std::allocator< ns3::RlcPduListElement_s > > > > > >', u'ns3::DlHarqRlcPduListBuffer_t')
+    typehandlers.add_type_alias(u'std::vector< std::vector< std::vector< ns3::RlcPduListElement_s, std::allocator< ns3::RlcPduListElement_s > >, std::allocator< std::vector< ns3::RlcPduListElement_s, std::allocator< ns3::RlcPduListElement_s > > > >, std::allocator< std::vector< std::vector< ns3::RlcPduListElement_s, std::allocator< ns3::RlcPduListElement_s > >, std::allocator< std::vector< ns3::RlcPduListElement_s, std::allocator< ns3::RlcPduListElement_s > > > > > >*', u'ns3::DlHarqRlcPduListBuffer_t*')
+    typehandlers.add_type_alias(u'std::vector< std::vector< std::vector< ns3::RlcPduListElement_s, std::allocator< ns3::RlcPduListElement_s > >, std::allocator< std::vector< ns3::RlcPduListElement_s, std::allocator< ns3::RlcPduListElement_s > > > >, std::allocator< std::vector< std::vector< ns3::RlcPduListElement_s, std::allocator< ns3::RlcPduListElement_s > >, std::allocator< std::vector< ns3::RlcPduListElement_s, std::allocator< ns3::RlcPduListElement_s > > > > > >&', u'ns3::DlHarqRlcPduListBuffer_t&')
+    typehandlers.add_type_alias(u'ns3::Callback< void, unsigned short, ns3::Ptr< ns3::SpectrumValue >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', u'ns3::LtePhyRxPssCallback')
+    typehandlers.add_type_alias(u'ns3::Callback< void, unsigned short, ns3::Ptr< ns3::SpectrumValue >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >*', u'ns3::LtePhyRxPssCallback*')
+    typehandlers.add_type_alias(u'ns3::Callback< void, unsigned short, ns3::Ptr< ns3::SpectrumValue >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >&', u'ns3::LtePhyRxPssCallback&')
+    typehandlers.add_type_alias(u'ns3::Callback< void, ns3::Ptr< ns3::Packet const >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', u'ns3::LtePhyTxEndCallback')
+    typehandlers.add_type_alias(u'ns3::Callback< void, ns3::Ptr< ns3::Packet const >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >*', u'ns3::LtePhyTxEndCallback*')
+    typehandlers.add_type_alias(u'ns3::Callback< void, ns3::Ptr< ns3::Packet const >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >&', u'ns3::LtePhyTxEndCallback&')
+    typehandlers.add_type_alias(u'void ( * ) ( std::ostream & ) *', u'ns3::LogNodePrinter')
+    typehandlers.add_type_alias(u'void ( * ) ( std::ostream & ) **', u'ns3::LogNodePrinter*')
+    typehandlers.add_type_alias(u'void ( * ) ( std::ostream & ) *&', u'ns3::LogNodePrinter&')
+    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::GenericPhyRxStartCallback')
+    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::GenericPhyRxStartCallback*')
+    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::GenericPhyRxStartCallback&')
+    typehandlers.add_type_alias(u'ns3::Callback< void, ns3::Ptr< ns3::Packet >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', u'ns3::LtePhyRxDataEndOkCallback')
+    typehandlers.add_type_alias(u'ns3::Callback< void, ns3::Ptr< ns3::Packet >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >*', u'ns3::LtePhyRxDataEndOkCallback*')
+    typehandlers.add_type_alias(u'ns3::Callback< void, ns3::Ptr< ns3::Packet >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >&', u'ns3::LtePhyRxDataEndOkCallback&')
+    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::LtePhyRxDataEndErrorCallback')
+    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::LtePhyRxDataEndErrorCallback*')
+    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::LtePhyRxDataEndErrorCallback&')
+    typehandlers.add_type_alias(u'std::vector< ns3::HarqProcessInfoElement_t, std::allocator< ns3::HarqProcessInfoElement_t > >', u'ns3::HarqProcessInfoList_t')
+    typehandlers.add_type_alias(u'std::vector< ns3::HarqProcessInfoElement_t, std::allocator< ns3::HarqProcessInfoElement_t > >*', u'ns3::HarqProcessInfoList_t*')
+    typehandlers.add_type_alias(u'std::vector< ns3::HarqProcessInfoElement_t, std::allocator< ns3::HarqProcessInfoElement_t > >&', u'ns3::HarqProcessInfoList_t&')
+    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::LtePhyRxCtrlEndErrorCallback')
+    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::LtePhyRxCtrlEndErrorCallback*')
+    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::LtePhyRxCtrlEndErrorCallback&')
+    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&')
+    typehandlers.add_type_alias(u'std::vector< double, std::allocator< double > >', u'ns3::Values')
+    typehandlers.add_type_alias(u'std::vector< double, std::allocator< double > >*', u'ns3::Values*')
+    typehandlers.add_type_alias(u'std::vector< double, std::allocator< double > >&', u'ns3::Values&')
+    typehandlers.add_type_alias(u'std::vector< unsigned char, std::allocator< unsigned char > >', u'ns3::DlHarqProcessesStatus_t')
+    typehandlers.add_type_alias(u'std::vector< unsigned char, std::allocator< unsigned char > >*', u'ns3::DlHarqProcessesStatus_t*')
+    typehandlers.add_type_alias(u'std::vector< unsigned char, std::allocator< unsigned char > >&', u'ns3::DlHarqProcessesStatus_t&')
+    typehandlers.add_type_alias(u'ns3::Callback< bool, ns3::Ptr< ns3::Packet >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', u'ns3::GenericPhyTxStartCallback')
+    typehandlers.add_type_alias(u'ns3::Callback< bool, ns3::Ptr< ns3::Packet >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >*', u'ns3::GenericPhyTxStartCallback*')
+    typehandlers.add_type_alias(u'ns3::Callback< bool, ns3::Ptr< ns3::Packet >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >&', u'ns3::GenericPhyTxStartCallback&')
+    typehandlers.add_type_alias(u'std::vector< ns3::BandInfo, std::allocator< ns3::BandInfo > >', u'ns3::Bands')
+    typehandlers.add_type_alias(u'std::vector< ns3::BandInfo, std::allocator< ns3::BandInfo > >*', u'ns3::Bands*')
+    typehandlers.add_type_alias(u'std::vector< ns3::BandInfo, std::allocator< ns3::BandInfo > >&', u'ns3::Bands&')
+    typehandlers.add_type_alias(u'ns3::Callback< void, ns3::DlInfoListElement_s, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', u'ns3::LtePhyDlHarqFeedbackCallback')
+    typehandlers.add_type_alias(u'ns3::Callback< void, ns3::DlInfoListElement_s, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >*', u'ns3::LtePhyDlHarqFeedbackCallback*')
+    typehandlers.add_type_alias(u'ns3::Callback< void, ns3::DlInfoListElement_s, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >&', u'ns3::LtePhyDlHarqFeedbackCallback&')
+    typehandlers.add_type_alias(u'std::map< ns3::TbId_t, ns3::tbInfo_t, std::less< ns3::TbId_t >, std::allocator< std::pair< ns3::TbId_t const, ns3::tbInfo_t > > >', u'ns3::expectedTbs_t')
+    typehandlers.add_type_alias(u'std::map< ns3::TbId_t, ns3::tbInfo_t, std::less< ns3::TbId_t >, std::allocator< std::pair< ns3::TbId_t const, ns3::tbInfo_t > > >*', u'ns3::expectedTbs_t*')
+    typehandlers.add_type_alias(u'std::map< ns3::TbId_t, ns3::tbInfo_t, std::less< ns3::TbId_t >, std::allocator< std::pair< ns3::TbId_t const, ns3::tbInfo_t > > >&', u'ns3::expectedTbs_t&')
+    typehandlers.add_type_alias(u'ns3::Vector3D', u'ns3::Vector')
+    typehandlers.add_type_alias(u'ns3::Vector3D*', u'ns3::Vector*')
+    typehandlers.add_type_alias(u'ns3::Vector3D&', u'ns3::Vector&')
     module.add_typedef(root_module['ns3::Vector3D'], 'Vector')
-    typehandlers.add_type_alias('void ( * ) ( std::ostream & ) *', 'ns3::LogTimePrinter')
-    typehandlers.add_type_alias('void ( * ) ( std::ostream & ) **', 'ns3::LogTimePrinter*')
-    typehandlers.add_type_alias('void ( * ) ( std::ostream & ) *&', 'ns3::LogTimePrinter&')
-    typehandlers.add_type_alias('ns3::Vector3DValue', 'ns3::VectorValue')
-    typehandlers.add_type_alias('ns3::Vector3DValue*', 'ns3::VectorValue*')
-    typehandlers.add_type_alias('ns3::Vector3DValue&', 'ns3::VectorValue&')
+    typehandlers.add_type_alias(u'void ( * ) ( std::ostream & ) *', u'ns3::LogTimePrinter')
+    typehandlers.add_type_alias(u'void ( * ) ( std::ostream & ) **', u'ns3::LogTimePrinter*')
+    typehandlers.add_type_alias(u'void ( * ) ( std::ostream & ) *&', u'ns3::LogTimePrinter&')
+    typehandlers.add_type_alias(u'ns3::Vector3DValue', u'ns3::VectorValue')
+    typehandlers.add_type_alias(u'ns3::Vector3DValue*', u'ns3::VectorValue*')
+    typehandlers.add_type_alias(u'ns3::Vector3DValue&', u'ns3::VectorValue&')
     module.add_typedef(root_module['ns3::Vector3DValue'], 'VectorValue')
-    typehandlers.add_type_alias('std::vector< ns3::UlDciListElement_s, std::allocator< ns3::UlDciListElement_s > >', 'ns3::UlHarqProcessesDciBuffer_t')
-    typehandlers.add_type_alias('std::vector< ns3::UlDciListElement_s, std::allocator< ns3::UlDciListElement_s > >*', 'ns3::UlHarqProcessesDciBuffer_t*')
-    typehandlers.add_type_alias('std::vector< ns3::UlDciListElement_s, std::allocator< ns3::UlDciListElement_s > >&', 'ns3::UlHarqProcessesDciBuffer_t&')
-    typehandlers.add_type_alias('ns3::Callback< void, std::list< ns3::Ptr< ns3::LteControlMessage >, std::allocator< ns3::Ptr< ns3::LteControlMessage > > >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'ns3::LtePhyRxCtrlEndOkCallback')
-    typehandlers.add_type_alias('ns3::Callback< void, std::list< ns3::Ptr< ns3::LteControlMessage >, std::allocator< ns3::Ptr< ns3::LteControlMessage > > >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >*', 'ns3::LtePhyRxCtrlEndOkCallback*')
-    typehandlers.add_type_alias('ns3::Callback< void, std::list< ns3::Ptr< ns3::LteControlMessage >, std::allocator< ns3::Ptr< ns3::LteControlMessage > > >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >&', 'ns3::LtePhyRxCtrlEndOkCallback&')
-    typehandlers.add_type_alias('uint32_t', 'ns3::SpectrumModelUid_t')
-    typehandlers.add_type_alias('uint32_t*', 'ns3::SpectrumModelUid_t*')
-    typehandlers.add_type_alias('uint32_t&', 'ns3::SpectrumModelUid_t&')
-    typehandlers.add_type_alias('std::map< ns3::ImsiLcidPair_t, double, std::less< ns3::ImsiLcidPair_t >, std::allocator< std::pair< ns3::ImsiLcidPair_t const, double > > >', 'ns3::DoubleMap')
-    typehandlers.add_type_alias('std::map< ns3::ImsiLcidPair_t, double, std::less< ns3::ImsiLcidPair_t >, std::allocator< std::pair< ns3::ImsiLcidPair_t const, double > > >*', 'ns3::DoubleMap*')
-    typehandlers.add_type_alias('std::map< ns3::ImsiLcidPair_t, double, std::less< ns3::ImsiLcidPair_t >, std::allocator< std::pair< ns3::ImsiLcidPair_t const, double > > >&', 'ns3::DoubleMap&')
-    typehandlers.add_type_alias('std::map< ns3::ImsiLcidPair_t, unsigned int, std::less< ns3::ImsiLcidPair_t >, std::allocator< std::pair< ns3::ImsiLcidPair_t const, unsigned int > > >', 'ns3::Uint32Map')
-    typehandlers.add_type_alias('std::map< ns3::ImsiLcidPair_t, unsigned int, std::less< ns3::ImsiLcidPair_t >, std::allocator< std::pair< ns3::ImsiLcidPair_t const, unsigned int > > >*', 'ns3::Uint32Map*')
-    typehandlers.add_type_alias('std::map< ns3::ImsiLcidPair_t, unsigned int, std::less< ns3::ImsiLcidPair_t >, std::allocator< std::pair< ns3::ImsiLcidPair_t const, unsigned int > > >&', 'ns3::Uint32Map&')
-    typehandlers.add_type_alias('ns3::Callback< void, ns3::UlInfoListElement_s, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'ns3::LtePhyUlHarqFeedbackCallback')
-    typehandlers.add_type_alias('ns3::Callback< void, ns3::UlInfoListElement_s, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >*', 'ns3::LtePhyUlHarqFeedbackCallback*')
-    typehandlers.add_type_alias('ns3::Callback< void, ns3::UlInfoListElement_s, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >&', 'ns3::LtePhyUlHarqFeedbackCallback&')
-    typehandlers.add_type_alias('std::vector< std::vector< ns3::RlcPduListElement_s, std::allocator< ns3::RlcPduListElement_s > >, std::allocator< std::vector< ns3::RlcPduListElement_s, std::allocator< ns3::RlcPduListElement_s > > > >', 'ns3::RlcPduList_t')
-    typehandlers.add_type_alias('std::vector< std::vector< ns3::RlcPduListElement_s, std::allocator< ns3::RlcPduListElement_s > >, std::allocator< std::vector< ns3::RlcPduListElement_s, std::allocator< ns3::RlcPduListElement_s > > > >*', 'ns3::RlcPduList_t*')
-    typehandlers.add_type_alias('std::vector< std::vector< ns3::RlcPduListElement_s, std::allocator< ns3::RlcPduListElement_s > >, std::allocator< std::vector< ns3::RlcPduListElement_s, std::allocator< ns3::RlcPduListElement_s > > > >&', 'ns3::RlcPduList_t&')
-    typehandlers.add_type_alias('std::vector< ns3::DlDciListElement_s, std::allocator< ns3::DlDciListElement_s > >', 'ns3::DlHarqProcessesDciBuffer_t')
-    typehandlers.add_type_alias('std::vector< ns3::DlDciListElement_s, std::allocator< ns3::DlDciListElement_s > >*', 'ns3::DlHarqProcessesDciBuffer_t*')
-    typehandlers.add_type_alias('std::vector< ns3::DlDciListElement_s, std::allocator< ns3::DlDciListElement_s > >&', 'ns3::DlHarqProcessesDciBuffer_t&')
-    typehandlers.add_type_alias('ns3::Vector3DChecker', 'ns3::VectorChecker')
-    typehandlers.add_type_alias('ns3::Vector3DChecker*', 'ns3::VectorChecker*')
-    typehandlers.add_type_alias('ns3::Vector3DChecker&', 'ns3::VectorChecker&')
+    typehandlers.add_type_alias(u'std::vector< ns3::UlDciListElement_s, std::allocator< ns3::UlDciListElement_s > >', u'ns3::UlHarqProcessesDciBuffer_t')
+    typehandlers.add_type_alias(u'std::vector< ns3::UlDciListElement_s, std::allocator< ns3::UlDciListElement_s > >*', u'ns3::UlHarqProcessesDciBuffer_t*')
+    typehandlers.add_type_alias(u'std::vector< ns3::UlDciListElement_s, std::allocator< ns3::UlDciListElement_s > >&', u'ns3::UlHarqProcessesDciBuffer_t&')
+    typehandlers.add_type_alias(u'ns3::Callback< void, std::list< ns3::Ptr< ns3::LteControlMessage >, std::allocator< ns3::Ptr< ns3::LteControlMessage > > >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', u'ns3::LtePhyRxCtrlEndOkCallback')
+    typehandlers.add_type_alias(u'ns3::Callback< void, std::list< ns3::Ptr< ns3::LteControlMessage >, std::allocator< ns3::Ptr< ns3::LteControlMessage > > >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >*', u'ns3::LtePhyRxCtrlEndOkCallback*')
+    typehandlers.add_type_alias(u'ns3::Callback< void, std::list< ns3::Ptr< ns3::LteControlMessage >, std::allocator< ns3::Ptr< ns3::LteControlMessage > > >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >&', u'ns3::LtePhyRxCtrlEndOkCallback&')
+    typehandlers.add_type_alias(u'uint32_t', u'ns3::SpectrumModelUid_t')
+    typehandlers.add_type_alias(u'uint32_t*', u'ns3::SpectrumModelUid_t*')
+    typehandlers.add_type_alias(u'uint32_t&', u'ns3::SpectrumModelUid_t&')
+    typehandlers.add_type_alias(u'std::map< ns3::ImsiLcidPair_t, double, std::less< ns3::ImsiLcidPair_t >, std::allocator< std::pair< ns3::ImsiLcidPair_t const, double > > >', u'ns3::DoubleMap')
+    typehandlers.add_type_alias(u'std::map< ns3::ImsiLcidPair_t, double, std::less< ns3::ImsiLcidPair_t >, std::allocator< std::pair< ns3::ImsiLcidPair_t const, double > > >*', u'ns3::DoubleMap*')
+    typehandlers.add_type_alias(u'std::map< ns3::ImsiLcidPair_t, double, std::less< ns3::ImsiLcidPair_t >, std::allocator< std::pair< ns3::ImsiLcidPair_t const, double > > >&', u'ns3::DoubleMap&')
+    typehandlers.add_type_alias(u'std::map< ns3::ImsiLcidPair_t, unsigned int, std::less< ns3::ImsiLcidPair_t >, std::allocator< std::pair< ns3::ImsiLcidPair_t const, unsigned int > > >', u'ns3::Uint32Map')
+    typehandlers.add_type_alias(u'std::map< ns3::ImsiLcidPair_t, unsigned int, std::less< ns3::ImsiLcidPair_t >, std::allocator< std::pair< ns3::ImsiLcidPair_t const, unsigned int > > >*', u'ns3::Uint32Map*')
+    typehandlers.add_type_alias(u'std::map< ns3::ImsiLcidPair_t, unsigned int, std::less< ns3::ImsiLcidPair_t >, std::allocator< std::pair< ns3::ImsiLcidPair_t const, unsigned int > > >&', u'ns3::Uint32Map&')
+    typehandlers.add_type_alias(u'ns3::Callback< void, ns3::UlInfoListElement_s, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', u'ns3::LtePhyUlHarqFeedbackCallback')
+    typehandlers.add_type_alias(u'ns3::Callback< void, ns3::UlInfoListElement_s, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >*', u'ns3::LtePhyUlHarqFeedbackCallback*')
+    typehandlers.add_type_alias(u'ns3::Callback< void, ns3::UlInfoListElement_s, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >&', u'ns3::LtePhyUlHarqFeedbackCallback&')
+    typehandlers.add_type_alias(u'std::vector< std::vector< ns3::RlcPduListElement_s, std::allocator< ns3::RlcPduListElement_s > >, std::allocator< std::vector< ns3::RlcPduListElement_s, std::allocator< ns3::RlcPduListElement_s > > > >', u'ns3::RlcPduList_t')
+    typehandlers.add_type_alias(u'std::vector< std::vector< ns3::RlcPduListElement_s, std::allocator< ns3::RlcPduListElement_s > >, std::allocator< std::vector< ns3::RlcPduListElement_s, std::allocator< ns3::RlcPduListElement_s > > > >*', u'ns3::RlcPduList_t*')
+    typehandlers.add_type_alias(u'std::vector< std::vector< ns3::RlcPduListElement_s, std::allocator< ns3::RlcPduListElement_s > >, std::allocator< std::vector< ns3::RlcPduListElement_s, std::allocator< ns3::RlcPduListElement_s > > > >&', u'ns3::RlcPduList_t&')
+    typehandlers.add_type_alias(u'std::vector< ns3::DlDciListElement_s, std::allocator< ns3::DlDciListElement_s > >', u'ns3::DlHarqProcessesDciBuffer_t')
+    typehandlers.add_type_alias(u'std::vector< ns3::DlDciListElement_s, std::allocator< ns3::DlDciListElement_s > >*', u'ns3::DlHarqProcessesDciBuffer_t*')
+    typehandlers.add_type_alias(u'std::vector< ns3::DlDciListElement_s, std::allocator< ns3::DlDciListElement_s > >&', u'ns3::DlHarqProcessesDciBuffer_t&')
+    typehandlers.add_type_alias(u'ns3::Vector3DChecker', u'ns3::VectorChecker')
+    typehandlers.add_type_alias(u'ns3::Vector3DChecker*', u'ns3::VectorChecker*')
+    typehandlers.add_type_alias(u'ns3::Vector3DChecker&', u'ns3::VectorChecker&')
     module.add_typedef(root_module['ns3::Vector3DChecker'], 'VectorChecker')
-    typehandlers.add_type_alias('std::vector< unsigned char, std::allocator< unsigned char > >', 'ns3::DlHarqProcessesTimer_t')
-    typehandlers.add_type_alias('std::vector< unsigned char, std::allocator< unsigned char > >*', 'ns3::DlHarqProcessesTimer_t*')
-    typehandlers.add_type_alias('std::vector< unsigned char, std::allocator< unsigned char > >&', 'ns3::DlHarqProcessesTimer_t&')
-    typehandlers.add_type_alias('std::map< ns3::ImsiLcidPair_t, ns3::LteFlowId_t, std::less< ns3::ImsiLcidPair_t >, std::allocator< std::pair< ns3::ImsiLcidPair_t const, ns3::LteFlowId_t > > >', 'ns3::FlowIdMap')
-    typehandlers.add_type_alias('std::map< ns3::ImsiLcidPair_t, ns3::LteFlowId_t, std::less< ns3::ImsiLcidPair_t >, std::allocator< std::pair< ns3::ImsiLcidPair_t const, ns3::LteFlowId_t > > >*', 'ns3::FlowIdMap*')
-    typehandlers.add_type_alias('std::map< ns3::ImsiLcidPair_t, ns3::LteFlowId_t, std::less< ns3::ImsiLcidPair_t >, std::allocator< std::pair< ns3::ImsiLcidPair_t const, ns3::LteFlowId_t > > >&', 'ns3::FlowIdMap&')
-    typehandlers.add_type_alias('std::map< ns3::ImsiLcidPair_t, ns3::Ptr< ns3::MinMaxAvgTotalCalculator< unsigned int > >, std::less< ns3::ImsiLcidPair_t >, std::allocator< std::pair< ns3::ImsiLcidPair_t const, ns3::Ptr< ns3::MinMaxAvgTotalCalculator< unsigned int > > > > >', 'ns3::Uint32StatsMap')
-    typehandlers.add_type_alias('std::map< ns3::ImsiLcidPair_t, ns3::Ptr< ns3::MinMaxAvgTotalCalculator< unsigned int > >, std::less< ns3::ImsiLcidPair_t >, std::allocator< std::pair< ns3::ImsiLcidPair_t const, ns3::Ptr< ns3::MinMaxAvgTotalCalculator< unsigned int > > > > >*', 'ns3::Uint32StatsMap*')
-    typehandlers.add_type_alias('std::map< ns3::ImsiLcidPair_t, ns3::Ptr< ns3::MinMaxAvgTotalCalculator< unsigned int > >, std::less< ns3::ImsiLcidPair_t >, std::allocator< std::pair< ns3::ImsiLcidPair_t const, ns3::Ptr< ns3::MinMaxAvgTotalCalculator< unsigned int > > > > >&', 'ns3::Uint32StatsMap&')
-    typehandlers.add_type_alias('ns3::Callback< void, ns3::Ptr< ns3::Packet >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'ns3::GenericPhyRxEndOkCallback')
-    typehandlers.add_type_alias('ns3::Callback< void, ns3::Ptr< ns3::Packet >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >*', 'ns3::GenericPhyRxEndOkCallback*')
-    typehandlers.add_type_alias('ns3::Callback< void, ns3::Ptr< ns3::Packet >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >&', 'ns3::GenericPhyRxEndOkCallback&')
-    typehandlers.add_type_alias('std::vector< std::vector< ns3::Ptr< ns3::PacketBurst >, std::allocator< ns3::Ptr< ns3::PacketBurst > > >, std::allocator< std::vector< ns3::Ptr< ns3::PacketBurst >, std::allocator< ns3::Ptr< ns3::PacketBurst > > > > >', 'ns3::DlHarqProcessesBuffer_t')
-    typehandlers.add_type_alias('std::vector< std::vector< ns3::Ptr< ns3::PacketBurst >, std::allocator< ns3::Ptr< ns3::PacketBurst > > >, std::allocator< std::vector< ns3::Ptr< ns3::PacketBurst >, std::allocator< ns3::Ptr< ns3::PacketBurst > > > > >*', 'ns3::DlHarqProcessesBuffer_t*')
-    typehandlers.add_type_alias('std::vector< std::vector< ns3::Ptr< ns3::PacketBurst >, std::allocator< ns3::Ptr< ns3::PacketBurst > > >, std::allocator< std::vector< ns3::Ptr< ns3::PacketBurst >, std::allocator< ns3::Ptr< ns3::PacketBurst > > > > >&', 'ns3::DlHarqProcessesBuffer_t&')
-    typehandlers.add_type_alias('std::map< ns3::ImsiLcidPair_t, ns3::Ptr< ns3::MinMaxAvgTotalCalculator< unsigned long > >, std::less< ns3::ImsiLcidPair_t >, std::allocator< std::pair< ns3::ImsiLcidPair_t const, ns3::Ptr< ns3::MinMaxAvgTotalCalculator< unsigned long > > > > >', 'ns3::Uint64StatsMap')
-    typehandlers.add_type_alias('std::map< ns3::ImsiLcidPair_t, ns3::Ptr< ns3::MinMaxAvgTotalCalculator< unsigned long > >, std::less< ns3::ImsiLcidPair_t >, std::allocator< std::pair< ns3::ImsiLcidPair_t const, ns3::Ptr< ns3::MinMaxAvgTotalCalculator< unsigned long > > > > >*', 'ns3::Uint64StatsMap*')
-    typehandlers.add_type_alias('std::map< ns3::ImsiLcidPair_t, ns3::Ptr< ns3::MinMaxAvgTotalCalculator< unsigned long > >, std::less< ns3::ImsiLcidPair_t >, std::allocator< std::pair< ns3::ImsiLcidPair_t const, ns3::Ptr< ns3::MinMaxAvgTotalCalculator< unsigned long > > > > >&', 'ns3::Uint64StatsMap&')
-    typehandlers.add_type_alias('std::vector< unsigned char, std::allocator< unsigned char > >', 'ns3::UlHarqProcessesStatus_t')
-    typehandlers.add_type_alias('std::vector< unsigned char, std::allocator< unsigned char > >*', 'ns3::UlHarqProcessesStatus_t*')
-    typehandlers.add_type_alias('std::vector< unsigned char, std::allocator< unsigned char > >&', 'ns3::UlHarqProcessesStatus_t&')
+    typehandlers.add_type_alias(u'std::vector< unsigned char, std::allocator< unsigned char > >', u'ns3::DlHarqProcessesTimer_t')
+    typehandlers.add_type_alias(u'std::vector< unsigned char, std::allocator< unsigned char > >*', u'ns3::DlHarqProcessesTimer_t*')
+    typehandlers.add_type_alias(u'std::vector< unsigned char, std::allocator< unsigned char > >&', u'ns3::DlHarqProcessesTimer_t&')
+    typehandlers.add_type_alias(u'std::map< ns3::ImsiLcidPair_t, ns3::LteFlowId_t, std::less< ns3::ImsiLcidPair_t >, std::allocator< std::pair< ns3::ImsiLcidPair_t const, ns3::LteFlowId_t > > >', u'ns3::FlowIdMap')
+    typehandlers.add_type_alias(u'std::map< ns3::ImsiLcidPair_t, ns3::LteFlowId_t, std::less< ns3::ImsiLcidPair_t >, std::allocator< std::pair< ns3::ImsiLcidPair_t const, ns3::LteFlowId_t > > >*', u'ns3::FlowIdMap*')
+    typehandlers.add_type_alias(u'std::map< ns3::ImsiLcidPair_t, ns3::LteFlowId_t, std::less< ns3::ImsiLcidPair_t >, std::allocator< std::pair< ns3::ImsiLcidPair_t const, ns3::LteFlowId_t > > >&', u'ns3::FlowIdMap&')
+    typehandlers.add_type_alias(u'std::map< ns3::ImsiLcidPair_t, ns3::Ptr< ns3::MinMaxAvgTotalCalculator< unsigned int > >, std::less< ns3::ImsiLcidPair_t >, std::allocator< std::pair< ns3::ImsiLcidPair_t const, ns3::Ptr< ns3::MinMaxAvgTotalCalculator< unsigned int > > > > >', u'ns3::Uint32StatsMap')
+    typehandlers.add_type_alias(u'std::map< ns3::ImsiLcidPair_t, ns3::Ptr< ns3::MinMaxAvgTotalCalculator< unsigned int > >, std::less< ns3::ImsiLcidPair_t >, std::allocator< std::pair< ns3::ImsiLcidPair_t const, ns3::Ptr< ns3::MinMaxAvgTotalCalculator< unsigned int > > > > >*', u'ns3::Uint32StatsMap*')
+    typehandlers.add_type_alias(u'std::map< ns3::ImsiLcidPair_t, ns3::Ptr< ns3::MinMaxAvgTotalCalculator< unsigned int > >, std::less< ns3::ImsiLcidPair_t >, std::allocator< std::pair< ns3::ImsiLcidPair_t const, ns3::Ptr< ns3::MinMaxAvgTotalCalculator< unsigned int > > > > >&', u'ns3::Uint32StatsMap&')
+    typehandlers.add_type_alias(u'ns3::Callback< void, ns3::Ptr< ns3::Packet >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', u'ns3::GenericPhyRxEndOkCallback')
+    typehandlers.add_type_alias(u'ns3::Callback< void, ns3::Ptr< ns3::Packet >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >*', u'ns3::GenericPhyRxEndOkCallback*')
+    typehandlers.add_type_alias(u'ns3::Callback< void, ns3::Ptr< ns3::Packet >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >&', u'ns3::GenericPhyRxEndOkCallback&')
+    typehandlers.add_type_alias(u'std::vector< std::vector< ns3::Ptr< ns3::PacketBurst >, std::allocator< ns3::Ptr< ns3::PacketBurst > > >, std::allocator< std::vector< ns3::Ptr< ns3::PacketBurst >, std::allocator< ns3::Ptr< ns3::PacketBurst > > > > >', u'ns3::DlHarqProcessesBuffer_t')
+    typehandlers.add_type_alias(u'std::vector< std::vector< ns3::Ptr< ns3::PacketBurst >, std::allocator< ns3::Ptr< ns3::PacketBurst > > >, std::allocator< std::vector< ns3::Ptr< ns3::PacketBurst >, std::allocator< ns3::Ptr< ns3::PacketBurst > > > > >*', u'ns3::DlHarqProcessesBuffer_t*')
+    typehandlers.add_type_alias(u'std::vector< std::vector< ns3::Ptr< ns3::PacketBurst >, std::allocator< ns3::Ptr< ns3::PacketBurst > > >, std::allocator< std::vector< ns3::Ptr< ns3::PacketBurst >, std::allocator< ns3::Ptr< ns3::PacketBurst > > > > >&', u'ns3::DlHarqProcessesBuffer_t&')
+    typehandlers.add_type_alias(u'std::map< ns3::ImsiLcidPair_t, ns3::Ptr< ns3::MinMaxAvgTotalCalculator< unsigned long > >, std::less< ns3::ImsiLcidPair_t >, std::allocator< std::pair< ns3::ImsiLcidPair_t const, ns3::Ptr< ns3::MinMaxAvgTotalCalculator< unsigned long > > > > >', u'ns3::Uint64StatsMap')
+    typehandlers.add_type_alias(u'std::map< ns3::ImsiLcidPair_t, ns3::Ptr< ns3::MinMaxAvgTotalCalculator< unsigned long > >, std::less< ns3::ImsiLcidPair_t >, std::allocator< std::pair< ns3::ImsiLcidPair_t const, ns3::Ptr< ns3::MinMaxAvgTotalCalculator< unsigned long > > > > >*', u'ns3::Uint64StatsMap*')
+    typehandlers.add_type_alias(u'std::map< ns3::ImsiLcidPair_t, ns3::Ptr< ns3::MinMaxAvgTotalCalculator< unsigned long > >, std::less< ns3::ImsiLcidPair_t >, std::allocator< std::pair< ns3::ImsiLcidPair_t const, ns3::Ptr< ns3::MinMaxAvgTotalCalculator< unsigned long > > > > >&', u'ns3::Uint64StatsMap&')
+    typehandlers.add_type_alias(u'std::vector< unsigned char, std::allocator< unsigned char > >', u'ns3::UlHarqProcessesStatus_t')
+    typehandlers.add_type_alias(u'std::vector< unsigned char, std::allocator< unsigned char > >*', u'ns3::UlHarqProcessesStatus_t*')
+    typehandlers.add_type_alias(u'std::vector< unsigned char, std::allocator< unsigned char > >&', u'ns3::UlHarqProcessesStatus_t&')
     
     ## Register a nested module for the namespace Config
     
@@ -1518,8 +1476,8 @@
     
     ## config.h (module 'core'): ns3::Config::MatchContainer [class]
     module.add_class('MatchContainer', import_from_module='ns.core')
-    module.add_container('std::vector< ns3::Ptr< ns3::Object > >', 'ns3::Ptr< ns3::Object >', container_type='vector')
-    module.add_container('std::vector< std::string >', 'std::string', container_type='vector')
+    module.add_container('std::vector< ns3::Ptr< ns3::Object > >', 'ns3::Ptr< ns3::Object >', container_type=u'vector')
+    module.add_container('std::vector< std::string >', 'std::string', container_type=u'vector')
 
 def register_types_ns3_FatalImpl(module):
     root_module = module.get_root()
@@ -1530,12 +1488,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('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('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(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&')
+    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&')
     
     ## Register a nested module for the namespace Function
     
@@ -1578,6 +1536,7 @@
     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_Ns3CqasFlowPerf_t_methods(root_module, root_module['ns3::CqasFlowPerf_t'])
     register_Ns3CqiConfig_s_methods(root_module, root_module['ns3::CqiConfig_s'])
     register_Ns3CqiListElement_s_methods(root_module, root_module['ns3::CqiListElement_s'])
     register_Ns3DataOutputCallback_methods(root_module, root_module['ns3::DataOutputCallback'])
@@ -1669,20 +1628,12 @@
     register_Ns3ImsiLcidPair_t_methods(root_module, root_module['ns3::ImsiLcidPair_t'])
     register_Ns3Inet6SocketAddress_methods(root_module, root_module['ns3::Inet6SocketAddress'])
     register_Ns3InetSocketAddress_methods(root_module, root_module['ns3::InetSocketAddress'])
-    register_Ns3IntToType__0_methods(root_module, root_module['ns3::IntToType< 0 >'])
-    register_Ns3IntToType__1_methods(root_module, root_module['ns3::IntToType< 1 >'])
-    register_Ns3IntToType__2_methods(root_module, root_module['ns3::IntToType< 2 >'])
-    register_Ns3IntToType__3_methods(root_module, root_module['ns3::IntToType< 3 >'])
-    register_Ns3IntToType__4_methods(root_module, root_module['ns3::IntToType< 4 >'])
-    register_Ns3IntToType__5_methods(root_module, root_module['ns3::IntToType< 5 >'])
-    register_Ns3IntToType__6_methods(root_module, root_module['ns3::IntToType< 6 >'])
     register_Ns3Ipv4Address_methods(root_module, root_module['ns3::Ipv4Address'])
     register_Ns3Ipv4AddressHelper_methods(root_module, root_module['ns3::Ipv4AddressHelper'])
     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'])
     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_Ns3LogComponent_methods(root_module, root_module['ns3::LogComponent'])
     register_Ns3LogicalChannelConfigListElement_s_methods(root_module, root_module['ns3::LogicalChannelConfigListElement_s'])
@@ -1811,6 +1762,7 @@
     register_Ns3PacketTagList_methods(root_module, root_module['ns3::PacketTagList'])
     register_Ns3PacketTagListTagData_methods(root_module, root_module['ns3::PacketTagList::TagData'])
     register_Ns3PagingInfoListElement_s_methods(root_module, root_module['ns3::PagingInfoListElement_s'])
+    register_Ns3ParameterLogger_methods(root_module, root_module['ns3::ParameterLogger'])
     register_Ns3PhichListElement_s_methods(root_module, root_module['ns3::PhichListElement_s'])
     register_Ns3PhyReceptionStatParameters_methods(root_module, root_module['ns3::PhyReceptionStatParameters'])
     register_Ns3PhyTransmissionStatParameters_methods(root_module, root_module['ns3::PhyTransmissionStatParameters'])
@@ -1832,8 +1784,7 @@
     register_Ns3TagBuffer_methods(root_module, root_module['ns3::TagBuffer'])
     register_Ns3TbId_t_methods(root_module, root_module['ns3::TbId_t'])
     register_Ns3TbStats_t_methods(root_module, root_module['ns3::TbStats_t'])
-    register_Ns3Timer_methods(root_module, root_module['ns3::Timer'])
-    register_Ns3TimerImpl_methods(root_module, root_module['ns3::TimerImpl'])
+    register_Ns3TimeWithUnit_methods(root_module, root_module['ns3::TimeWithUnit'])
     register_Ns3TransmissionModesLayers_methods(root_module, root_module['ns3::TransmissionModesLayers'])
     register_Ns3TypeId_methods(root_module, root_module['ns3::TypeId'])
     register_Ns3TypeIdAttributeInformation_methods(root_module, root_module['ns3::TypeId::AttributeInformation'])
@@ -1862,7 +1813,6 @@
     register_Ns3EpsBearerTag_methods(root_module, root_module['ns3::EpsBearerTag'])
     register_Ns3Header_methods(root_module, root_module['ns3::Header'])
     register_Ns3Ipv4Header_methods(root_module, root_module['ns3::Ipv4Header'])
-    register_Ns3Ipv6Header_methods(root_module, root_module['ns3::Ipv6Header'])
     register_Ns3LteEnbRrcSapProvider_methods(root_module, root_module['ns3::LteEnbRrcSapProvider'])
     register_Ns3LteEnbRrcSapProviderCompleteSetupUeParameters_methods(root_module, root_module['ns3::LteEnbRrcSapProvider::CompleteSetupUeParameters'])
     register_Ns3LteEnbRrcSapUser_methods(root_module, root_module['ns3::LteEnbRrcSapUser'])
@@ -1976,7 +1926,6 @@
     register_Ns3GammaRandomVariable_methods(root_module, root_module['ns3::GammaRandomVariable'])
     register_Ns3GtpuHeader_methods(root_module, root_module['ns3::GtpuHeader'])
     register_Ns3IntegerValue_methods(root_module, root_module['ns3::IntegerValue'])
-    register_Ns3IpL4Protocol_methods(root_module, root_module['ns3::IpL4Protocol'])
     register_Ns3Ipv4_methods(root_module, root_module['ns3::Ipv4'])
     register_Ns3Ipv4AddressChecker_methods(root_module, root_module['ns3::Ipv4AddressChecker'])
     register_Ns3Ipv4AddressValue_methods(root_module, root_module['ns3::Ipv4AddressValue'])
@@ -1986,7 +1935,6 @@
     register_Ns3Ipv4Route_methods(root_module, root_module['ns3::Ipv4Route'])
     register_Ns3Ipv6AddressChecker_methods(root_module, root_module['ns3::Ipv6AddressChecker'])
     register_Ns3Ipv6AddressValue_methods(root_module, root_module['ns3::Ipv6AddressValue'])
-    register_Ns3Ipv6Interface_methods(root_module, root_module['ns3::Ipv6Interface'])
     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'])
@@ -2081,6 +2029,7 @@
     register_Ns3AddressChecker_methods(root_module, root_module['ns3::AddressChecker'])
     register_Ns3AddressValue_methods(root_module, root_module['ns3::AddressValue'])
     register_Ns3BsrLteControlMessage_methods(root_module, root_module['ns3::BsrLteControlMessage'])
+    register_Ns3CqaFfMacScheduler_methods(root_module, root_module['ns3::CqaFfMacScheduler'])
     register_Ns3DlCqiLteControlMessage_methods(root_module, root_module['ns3::DlCqiLteControlMessage'])
     register_Ns3DlDciLteControlMessage_methods(root_module, root_module['ns3::DlDciLteControlMessage'])
     register_Ns3DlHarqFeedbackLteControlMessage_methods(root_module, root_module['ns3::DlHarqFeedbackLteControlMessage'])
@@ -2388,6 +2337,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', 
@@ -2400,6 +2353,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', 
@@ -2694,6 +2651,25 @@
                    is_static=True, visibility='protected')
     return
 
+def register_Ns3CqasFlowPerf_t_methods(root_module, cls):
+    ## cqa-ff-mac-scheduler.h (module 'lte'): ns3::CqasFlowPerf_t::CqasFlowPerf_t() [constructor]
+    cls.add_constructor([])
+    ## cqa-ff-mac-scheduler.h (module 'lte'): ns3::CqasFlowPerf_t::CqasFlowPerf_t(ns3::CqasFlowPerf_t const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::CqasFlowPerf_t const &', 'arg0')])
+    ## cqa-ff-mac-scheduler.h (module 'lte'): ns3::CqasFlowPerf_t::flowStart [variable]
+    cls.add_instance_attribute('flowStart', 'ns3::Time', is_const=False)
+    ## cqa-ff-mac-scheduler.h (module 'lte'): ns3::CqasFlowPerf_t::lastAveragedThroughput [variable]
+    cls.add_instance_attribute('lastAveragedThroughput', 'double', is_const=False)
+    ## cqa-ff-mac-scheduler.h (module 'lte'): ns3::CqasFlowPerf_t::lastTtiBytesTransmitted [variable]
+    cls.add_instance_attribute('lastTtiBytesTransmitted', 'unsigned int', is_const=False)
+    ## cqa-ff-mac-scheduler.h (module 'lte'): ns3::CqasFlowPerf_t::secondLastAveragedThroughput [variable]
+    cls.add_instance_attribute('secondLastAveragedThroughput', 'double', is_const=False)
+    ## cqa-ff-mac-scheduler.h (module 'lte'): ns3::CqasFlowPerf_t::targetThroughput [variable]
+    cls.add_instance_attribute('targetThroughput', 'double', is_const=False)
+    ## cqa-ff-mac-scheduler.h (module 'lte'): ns3::CqasFlowPerf_t::totalBytesTransmitted [variable]
+    cls.add_instance_attribute('totalBytesTransmitted', 'long unsigned int', is_const=False)
+    return
+
 def register_Ns3CqiConfig_s_methods(root_module, cls):
     ## ff-mac-common.h (module 'lte'): ns3::CqiConfig_s::CqiConfig_s() [constructor]
     cls.add_constructor([])
@@ -4539,55 +4515,6 @@
                    [param('uint16_t', 'port')])
     return
 
-def register_Ns3IntToType__0_methods(root_module, cls):
-    ## int-to-type.h (module 'core'): ns3::IntToType<0>::IntToType() [constructor]
-    cls.add_constructor([])
-    ## int-to-type.h (module 'core'): ns3::IntToType<0>::IntToType(ns3::IntToType<0> const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::IntToType< 0 > const &', 'arg0')])
-    return
-
-def register_Ns3IntToType__1_methods(root_module, cls):
-    ## int-to-type.h (module 'core'): ns3::IntToType<1>::IntToType() [constructor]
-    cls.add_constructor([])
-    ## int-to-type.h (module 'core'): ns3::IntToType<1>::IntToType(ns3::IntToType<1> const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::IntToType< 1 > const &', 'arg0')])
-    return
-
-def register_Ns3IntToType__2_methods(root_module, cls):
-    ## int-to-type.h (module 'core'): ns3::IntToType<2>::IntToType() [constructor]
-    cls.add_constructor([])
-    ## int-to-type.h (module 'core'): ns3::IntToType<2>::IntToType(ns3::IntToType<2> const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::IntToType< 2 > const &', 'arg0')])
-    return
-
-def register_Ns3IntToType__3_methods(root_module, cls):
-    ## int-to-type.h (module 'core'): ns3::IntToType<3>::IntToType() [constructor]
-    cls.add_constructor([])
-    ## int-to-type.h (module 'core'): ns3::IntToType<3>::IntToType(ns3::IntToType<3> const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::IntToType< 3 > const &', 'arg0')])
-    return
-
-def register_Ns3IntToType__4_methods(root_module, cls):
-    ## int-to-type.h (module 'core'): ns3::IntToType<4>::IntToType() [constructor]
-    cls.add_constructor([])
-    ## int-to-type.h (module 'core'): ns3::IntToType<4>::IntToType(ns3::IntToType<4> const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::IntToType< 4 > const &', 'arg0')])
-    return
-
-def register_Ns3IntToType__5_methods(root_module, cls):
-    ## int-to-type.h (module 'core'): ns3::IntToType<5>::IntToType() [constructor]
-    cls.add_constructor([])
-    ## int-to-type.h (module 'core'): ns3::IntToType<5>::IntToType(ns3::IntToType<5> const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::IntToType< 5 > const &', 'arg0')])
-    return
-
-def register_Ns3IntToType__6_methods(root_module, cls):
-    ## int-to-type.h (module 'core'): ns3::IntToType<6>::IntToType() [constructor]
-    cls.add_constructor([])
-    ## int-to-type.h (module 'core'): ns3::IntToType<6>::IntToType(ns3::IntToType<6> const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::IntToType< 6 > const &', 'arg0')])
-    return
-
 def register_Ns3Ipv4Address_methods(root_module, cls):
     cls.add_binary_comparison_operator('!=')
     cls.add_binary_comparison_operator('<')
@@ -5096,61 +5023,6 @@
                    [param('uint8_t *', 'address')])
     return
 
-def register_Ns3Ipv6InterfaceAddress_methods(root_module, cls):
-    cls.add_binary_comparison_operator('!=')
-    cls.add_output_stream_operator()
-    cls.add_binary_comparison_operator('==')
-    ## ipv6-interface-address.h (module 'internet'): ns3::Ipv6InterfaceAddress::Ipv6InterfaceAddress() [constructor]
-    cls.add_constructor([])
-    ## ipv6-interface-address.h (module 'internet'): ns3::Ipv6InterfaceAddress::Ipv6InterfaceAddress(ns3::Ipv6Address address) [constructor]
-    cls.add_constructor([param('ns3::Ipv6Address', 'address')])
-    ## ipv6-interface-address.h (module 'internet'): ns3::Ipv6InterfaceAddress::Ipv6InterfaceAddress(ns3::Ipv6Address address, ns3::Ipv6Prefix prefix) [constructor]
-    cls.add_constructor([param('ns3::Ipv6Address', 'address'), param('ns3::Ipv6Prefix', 'prefix')])
-    ## ipv6-interface-address.h (module 'internet'): ns3::Ipv6InterfaceAddress::Ipv6InterfaceAddress(ns3::Ipv6InterfaceAddress const & o) [copy constructor]
-    cls.add_constructor([param('ns3::Ipv6InterfaceAddress const &', 'o')])
-    ## ipv6-interface-address.h (module 'internet'): ns3::Ipv6Address ns3::Ipv6InterfaceAddress::GetAddress() const [member function]
-    cls.add_method('GetAddress', 
-                   'ns3::Ipv6Address', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface-address.h (module 'internet'): uint32_t ns3::Ipv6InterfaceAddress::GetNsDadUid() const [member function]
-    cls.add_method('GetNsDadUid', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface-address.h (module 'internet'): ns3::Ipv6Prefix ns3::Ipv6InterfaceAddress::GetPrefix() const [member function]
-    cls.add_method('GetPrefix', 
-                   'ns3::Ipv6Prefix', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface-address.h (module 'internet'): ns3::Ipv6InterfaceAddress::Scope_e ns3::Ipv6InterfaceAddress::GetScope() const [member function]
-    cls.add_method('GetScope', 
-                   'ns3::Ipv6InterfaceAddress::Scope_e', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface-address.h (module 'internet'): ns3::Ipv6InterfaceAddress::State_e ns3::Ipv6InterfaceAddress::GetState() const [member function]
-    cls.add_method('GetState', 
-                   'ns3::Ipv6InterfaceAddress::State_e', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface-address.h (module 'internet'): void ns3::Ipv6InterfaceAddress::SetAddress(ns3::Ipv6Address address) [member function]
-    cls.add_method('SetAddress', 
-                   'void', 
-                   [param('ns3::Ipv6Address', 'address')])
-    ## ipv6-interface-address.h (module 'internet'): void ns3::Ipv6InterfaceAddress::SetNsDadUid(uint32_t uid) [member function]
-    cls.add_method('SetNsDadUid', 
-                   'void', 
-                   [param('uint32_t', 'uid')])
-    ## ipv6-interface-address.h (module 'internet'): void ns3::Ipv6InterfaceAddress::SetScope(ns3::Ipv6InterfaceAddress::Scope_e scope) [member function]
-    cls.add_method('SetScope', 
-                   'void', 
-                   [param('ns3::Ipv6InterfaceAddress::Scope_e', 'scope')])
-    ## ipv6-interface-address.h (module 'internet'): void ns3::Ipv6InterfaceAddress::SetState(ns3::Ipv6InterfaceAddress::State_e state) [member function]
-    cls.add_method('SetState', 
-                   'void', 
-                   [param('ns3::Ipv6InterfaceAddress::State_e', 'state')])
-    return
-
 def register_Ns3Ipv6Prefix_methods(root_module, cls):
     cls.add_binary_comparison_operator('!=')
     cls.add_output_stream_operator()
@@ -5212,29 +5084,25 @@
 def register_Ns3LogComponent_methods(root_module, cls):
     ## log.h (module 'core'): ns3::LogComponent::LogComponent(ns3::LogComponent const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::LogComponent const &', 'arg0')])
-    ## log.h (module 'core'): ns3::LogComponent::LogComponent(std::string const & name) [constructor]
-    cls.add_constructor([param('std::string const &', 'name')])
-    ## log.h (module 'core'): void ns3::LogComponent::Disable(ns3::LogLevel level) [member function]
+    ## log.h (module 'core'): ns3::LogComponent::LogComponent(std::string const & name, ns3::LogLevel const mask=::ns3::LOG_NONE) [constructor]
+    cls.add_constructor([param('std::string const &', 'name'), param('ns3::LogLevel const', 'mask', default_value='::ns3::LOG_NONE')])
+    ## log.h (module 'core'): void ns3::LogComponent::Disable(ns3::LogLevel const level) [member function]
     cls.add_method('Disable', 
                    'void', 
-                   [param('ns3::LogLevel', 'level')])
-    ## log.h (module 'core'): void ns3::LogComponent::Enable(ns3::LogLevel level) [member function]
+                   [param('ns3::LogLevel const', 'level')])
+    ## log.h (module 'core'): void ns3::LogComponent::Enable(ns3::LogLevel const level) [member function]
     cls.add_method('Enable', 
                    'void', 
-                   [param('ns3::LogLevel', 'level')])
-    ## log.h (module 'core'): void ns3::LogComponent::EnvVarCheck(std::string const & name) [member function]
-    cls.add_method('EnvVarCheck', 
-                   'void', 
-                   [param('std::string const &', 'name')])
-    ## log.h (module 'core'): std::string ns3::LogComponent::GetLevelLabel(ns3::LogLevel const level) const [member function]
+                   [param('ns3::LogLevel const', 'level')])
+    ## log.h (module 'core'): static std::string ns3::LogComponent::GetLevelLabel(ns3::LogLevel const level) [member function]
     cls.add_method('GetLevelLabel', 
                    'std::string', 
                    [param('ns3::LogLevel const', 'level')], 
-                   is_const=True)
-    ## log.h (module 'core'): bool ns3::LogComponent::IsEnabled(ns3::LogLevel level) const [member function]
+                   is_static=True)
+    ## log.h (module 'core'): bool ns3::LogComponent::IsEnabled(ns3::LogLevel const level) const [member function]
     cls.add_method('IsEnabled', 
                    'bool', 
-                   [param('ns3::LogLevel', 'level')], 
+                   [param('ns3::LogLevel const', 'level')], 
                    is_const=True)
     ## log.h (module 'core'): bool ns3::LogComponent::IsNoneEnabled() const [member function]
     cls.add_method('IsNoneEnabled', 
@@ -5246,6 +5114,10 @@
                    'char const *', 
                    [], 
                    is_const=True)
+    ## log.h (module 'core'): void ns3::LogComponent::SetMask(ns3::LogLevel const level) [member function]
+    cls.add_method('SetMask', 
+                   'void', 
+                   [param('ns3::LogLevel const', 'level')])
     return
 
 def register_Ns3LogicalChannelConfigListElement_s_methods(root_module, cls):
@@ -7664,6 +7536,13 @@
     cls.add_instance_attribute('m_pagingSubframe', 'uint8_t', is_const=False)
     return
 
+def register_Ns3ParameterLogger_methods(root_module, cls):
+    ## log.h (module 'core'): ns3::ParameterLogger::ParameterLogger(ns3::ParameterLogger const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::ParameterLogger const &', 'arg0')])
+    ## log.h (module 'core'): ns3::ParameterLogger::ParameterLogger(std::ostream & os) [constructor]
+    cls.add_constructor([param('std::ostream &', 'os')])
+    return
+
 def register_Ns3PhichListElement_s_methods(root_module, cls):
     ## ff-mac-common.h (module 'lte'): ns3::PhichListElement_s::PhichListElement_s() [constructor]
     cls.add_constructor([])
@@ -7845,8 +7724,8 @@
 def register_Ns3SequenceNumber10_methods(root_module, cls):
     cls.add_output_stream_operator()
     cls.add_binary_comparison_operator('!=')
-    cls.add_binary_numeric_operator('+', root_module['ns3::SequenceNumber10'], root_module['ns3::SequenceNumber10'], param('uint16_t', 'right'))
-    cls.add_binary_numeric_operator('-', root_module['ns3::SequenceNumber10'], root_module['ns3::SequenceNumber10'], param('uint16_t', 'right'))
+    cls.add_binary_numeric_operator('+', root_module['ns3::SequenceNumber10'], root_module['ns3::SequenceNumber10'], param('uint16_t', u'right'))
+    cls.add_binary_numeric_operator('-', root_module['ns3::SequenceNumber10'], root_module['ns3::SequenceNumber10'], param('uint16_t', u'right'))
     cls.add_binary_comparison_operator('<')
     cls.add_binary_comparison_operator('<=')
     cls.add_binary_comparison_operator('==')
@@ -8200,88 +8079,12 @@
     cls.add_instance_attribute('tbler', 'double', is_const=False)
     return
 
-def register_Ns3Timer_methods(root_module, cls):
-    ## timer.h (module 'core'): ns3::Timer::Timer(ns3::Timer const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::Timer const &', 'arg0')])
-    ## timer.h (module 'core'): ns3::Timer::Timer() [constructor]
-    cls.add_constructor([])
-    ## timer.h (module 'core'): ns3::Timer::Timer(ns3::Timer::DestroyPolicy destroyPolicy) [constructor]
-    cls.add_constructor([param('ns3::Timer::DestroyPolicy', 'destroyPolicy')])
-    ## timer.h (module 'core'): void ns3::Timer::Cancel() [member function]
-    cls.add_method('Cancel', 
-                   'void', 
-                   [])
-    ## timer.h (module 'core'): ns3::Time ns3::Timer::GetDelay() const [member function]
-    cls.add_method('GetDelay', 
-                   'ns3::Time', 
-                   [], 
-                   is_const=True)
-    ## timer.h (module 'core'): ns3::Time ns3::Timer::GetDelayLeft() const [member function]
-    cls.add_method('GetDelayLeft', 
-                   'ns3::Time', 
-                   [], 
-                   is_const=True)
-    ## timer.h (module 'core'): ns3::Timer::State ns3::Timer::GetState() const [member function]
-    cls.add_method('GetState', 
-                   'ns3::Timer::State', 
-                   [], 
-                   is_const=True)
-    ## timer.h (module 'core'): bool ns3::Timer::IsExpired() const [member function]
-    cls.add_method('IsExpired', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## timer.h (module 'core'): bool ns3::Timer::IsRunning() const [member function]
-    cls.add_method('IsRunning', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## timer.h (module 'core'): bool ns3::Timer::IsSuspended() const [member function]
-    cls.add_method('IsSuspended', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## timer.h (module 'core'): void ns3::Timer::Remove() [member function]
-    cls.add_method('Remove', 
-                   'void', 
-                   [])
-    ## timer.h (module 'core'): void ns3::Timer::Resume() [member function]
-    cls.add_method('Resume', 
-                   'void', 
-                   [])
-    ## timer.h (module 'core'): void ns3::Timer::Schedule() [member function]
-    cls.add_method('Schedule', 
-                   'void', 
-                   [])
-    ## timer.h (module 'core'): void ns3::Timer::Schedule(ns3::Time delay) [member function]
-    cls.add_method('Schedule', 
-                   'void', 
-                   [param('ns3::Time', 'delay')])
-    ## timer.h (module 'core'): void ns3::Timer::SetDelay(ns3::Time const & delay) [member function]
-    cls.add_method('SetDelay', 
-                   'void', 
-                   [param('ns3::Time const &', 'delay')])
-    ## timer.h (module 'core'): void ns3::Timer::Suspend() [member function]
-    cls.add_method('Suspend', 
-                   'void', 
-                   [])
-    return
-
-def register_Ns3TimerImpl_methods(root_module, cls):
-    ## timer-impl.h (module 'core'): ns3::TimerImpl::TimerImpl() [constructor]
-    cls.add_constructor([])
-    ## timer-impl.h (module 'core'): ns3::TimerImpl::TimerImpl(ns3::TimerImpl const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::TimerImpl const &', 'arg0')])
-    ## timer-impl.h (module 'core'): void ns3::TimerImpl::Invoke() [member function]
-    cls.add_method('Invoke', 
-                   'void', 
-                   [], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## timer-impl.h (module 'core'): ns3::EventId ns3::TimerImpl::Schedule(ns3::Time const & delay) [member function]
-    cls.add_method('Schedule', 
-                   'ns3::EventId', 
-                   [param('ns3::Time const &', 'delay')], 
-                   is_pure_virtual=True, is_virtual=True)
+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_Ns3TransmissionModesLayers_methods(root_module, cls):
@@ -8710,63 +8513,19 @@
     return
 
 def register_Ns3Int64x64_t_methods(root_module, cls):
-    cls.add_binary_comparison_operator('<=')
     cls.add_binary_comparison_operator('!=')
-    cls.add_inplace_numeric_operator('+=', 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 &', '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_comparison_operator('<=')
+    cls.add_inplace_numeric_operator('+=', 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_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_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_output_stream_operator()
     cls.add_binary_comparison_operator('==')
     cls.add_binary_comparison_operator('>=')
@@ -8774,6 +8533,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]
@@ -8814,6 +8575,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_Ns3PfsFlowPerf_t_methods(root_module, cls):
@@ -9213,106 +8976,6 @@
                    [param('uint8_t', 'ttl')])
     return
 
-def register_Ns3Ipv6Header_methods(root_module, cls):
-    ## ipv6-header.h (module 'internet'): ns3::Ipv6Header::Ipv6Header(ns3::Ipv6Header const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::Ipv6Header const &', 'arg0')])
-    ## ipv6-header.h (module 'internet'): ns3::Ipv6Header::Ipv6Header() [constructor]
-    cls.add_constructor([])
-    ## ipv6-header.h (module 'internet'): uint32_t ns3::Ipv6Header::Deserialize(ns3::Buffer::Iterator start) [member function]
-    cls.add_method('Deserialize', 
-                   'uint32_t', 
-                   [param('ns3::Buffer::Iterator', 'start')], 
-                   is_virtual=True)
-    ## ipv6-header.h (module 'internet'): ns3::Ipv6Address ns3::Ipv6Header::GetDestinationAddress() const [member function]
-    cls.add_method('GetDestinationAddress', 
-                   'ns3::Ipv6Address', 
-                   [], 
-                   is_const=True)
-    ## ipv6-header.h (module 'internet'): uint32_t ns3::Ipv6Header::GetFlowLabel() const [member function]
-    cls.add_method('GetFlowLabel', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    ## ipv6-header.h (module 'internet'): uint8_t ns3::Ipv6Header::GetHopLimit() const [member function]
-    cls.add_method('GetHopLimit', 
-                   'uint8_t', 
-                   [], 
-                   is_const=True)
-    ## ipv6-header.h (module 'internet'): ns3::TypeId ns3::Ipv6Header::GetInstanceTypeId() const [member function]
-    cls.add_method('GetInstanceTypeId', 
-                   'ns3::TypeId', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## ipv6-header.h (module 'internet'): uint8_t ns3::Ipv6Header::GetNextHeader() const [member function]
-    cls.add_method('GetNextHeader', 
-                   'uint8_t', 
-                   [], 
-                   is_const=True)
-    ## ipv6-header.h (module 'internet'): uint16_t ns3::Ipv6Header::GetPayloadLength() const [member function]
-    cls.add_method('GetPayloadLength', 
-                   'uint16_t', 
-                   [], 
-                   is_const=True)
-    ## ipv6-header.h (module 'internet'): uint32_t ns3::Ipv6Header::GetSerializedSize() const [member function]
-    cls.add_method('GetSerializedSize', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## ipv6-header.h (module 'internet'): ns3::Ipv6Address ns3::Ipv6Header::GetSourceAddress() const [member function]
-    cls.add_method('GetSourceAddress', 
-                   'ns3::Ipv6Address', 
-                   [], 
-                   is_const=True)
-    ## ipv6-header.h (module 'internet'): uint8_t ns3::Ipv6Header::GetTrafficClass() const [member function]
-    cls.add_method('GetTrafficClass', 
-                   'uint8_t', 
-                   [], 
-                   is_const=True)
-    ## ipv6-header.h (module 'internet'): static ns3::TypeId ns3::Ipv6Header::GetTypeId() [member function]
-    cls.add_method('GetTypeId', 
-                   'ns3::TypeId', 
-                   [], 
-                   is_static=True)
-    ## ipv6-header.h (module 'internet'): void ns3::Ipv6Header::Print(std::ostream & os) const [member function]
-    cls.add_method('Print', 
-                   'void', 
-                   [param('std::ostream &', 'os')], 
-                   is_const=True, is_virtual=True)
-    ## ipv6-header.h (module 'internet'): void ns3::Ipv6Header::Serialize(ns3::Buffer::Iterator start) const [member function]
-    cls.add_method('Serialize', 
-                   'void', 
-                   [param('ns3::Buffer::Iterator', 'start')], 
-                   is_const=True, is_virtual=True)
-    ## ipv6-header.h (module 'internet'): void ns3::Ipv6Header::SetDestinationAddress(ns3::Ipv6Address dst) [member function]
-    cls.add_method('SetDestinationAddress', 
-                   'void', 
-                   [param('ns3::Ipv6Address', 'dst')])
-    ## ipv6-header.h (module 'internet'): void ns3::Ipv6Header::SetFlowLabel(uint32_t flow) [member function]
-    cls.add_method('SetFlowLabel', 
-                   'void', 
-                   [param('uint32_t', 'flow')])
-    ## ipv6-header.h (module 'internet'): void ns3::Ipv6Header::SetHopLimit(uint8_t limit) [member function]
-    cls.add_method('SetHopLimit', 
-                   'void', 
-                   [param('uint8_t', 'limit')])
-    ## ipv6-header.h (module 'internet'): void ns3::Ipv6Header::SetNextHeader(uint8_t next) [member function]
-    cls.add_method('SetNextHeader', 
-                   'void', 
-                   [param('uint8_t', 'next')])
-    ## ipv6-header.h (module 'internet'): void ns3::Ipv6Header::SetPayloadLength(uint16_t len) [member function]
-    cls.add_method('SetPayloadLength', 
-                   'void', 
-                   [param('uint16_t', 'len')])
-    ## ipv6-header.h (module 'internet'): void ns3::Ipv6Header::SetSourceAddress(ns3::Ipv6Address src) [member function]
-    cls.add_method('SetSourceAddress', 
-                   'void', 
-                   [param('ns3::Ipv6Address', 'src')])
-    ## ipv6-header.h (module 'internet'): void ns3::Ipv6Header::SetTrafficClass(uint8_t traffic) [member function]
-    cls.add_method('SetTrafficClass', 
-                   'void', 
-                   [param('uint8_t', 'traffic')])
-    return
-
 def register_Ns3LteEnbRrcSapProvider_methods(root_module, cls):
     ## lte-rrc-sap.h (module 'lte'): ns3::LteEnbRrcSapProvider::LteEnbRrcSapProvider() [constructor]
     cls.add_constructor([])
@@ -11239,24 +10902,24 @@
     return
 
 def register_Ns3SpectrumValue_methods(root_module, cls):
-    cls.add_binary_numeric_operator('*', root_module['ns3::SpectrumValue'], root_module['ns3::SpectrumValue'], param('double', 'right'))
-    cls.add_binary_numeric_operator('*', root_module['ns3::SpectrumValue'], root_module['ns3::SpectrumValue'], param('ns3::SpectrumValue const &', 'right'))
-    cls.add_binary_numeric_operator('+', root_module['ns3::SpectrumValue'], root_module['ns3::SpectrumValue'], param('double', 'right'))
-    cls.add_binary_numeric_operator('+', root_module['ns3::SpectrumValue'], root_module['ns3::SpectrumValue'], param('ns3::SpectrumValue const &', 'right'))
+    cls.add_binary_numeric_operator('*', root_module['ns3::SpectrumValue'], root_module['ns3::SpectrumValue'], param('double', u'right'))
+    cls.add_binary_numeric_operator('*', root_module['ns3::SpectrumValue'], root_module['ns3::SpectrumValue'], param('ns3::SpectrumValue const &', u'right'))
+    cls.add_binary_numeric_operator('+', root_module['ns3::SpectrumValue'], root_module['ns3::SpectrumValue'], param('double', u'right'))
+    cls.add_binary_numeric_operator('+', root_module['ns3::SpectrumValue'], root_module['ns3::SpectrumValue'], param('ns3::SpectrumValue const &', u'right'))
     cls.add_unary_numeric_operator('-')
-    cls.add_binary_numeric_operator('-', root_module['ns3::SpectrumValue'], root_module['ns3::SpectrumValue'], param('double', 'right'))
-    cls.add_binary_numeric_operator('-', root_module['ns3::SpectrumValue'], root_module['ns3::SpectrumValue'], param('ns3::SpectrumValue const &', 'right'))
-    cls.add_binary_numeric_operator('/', root_module['ns3::SpectrumValue'], root_module['ns3::SpectrumValue'], param('double', 'right'))
-    cls.add_binary_numeric_operator('/', root_module['ns3::SpectrumValue'], root_module['ns3::SpectrumValue'], param('ns3::SpectrumValue const &', 'right'))
+    cls.add_binary_numeric_operator('-', root_module['ns3::SpectrumValue'], root_module['ns3::SpectrumValue'], param('double', u'right'))
+    cls.add_binary_numeric_operator('-', root_module['ns3::SpectrumValue'], root_module['ns3::SpectrumValue'], param('ns3::SpectrumValue const &', u'right'))
+    cls.add_binary_numeric_operator('/', root_module['ns3::SpectrumValue'], root_module['ns3::SpectrumValue'], param('double', u'right'))
+    cls.add_binary_numeric_operator('/', root_module['ns3::SpectrumValue'], root_module['ns3::SpectrumValue'], param('ns3::SpectrumValue const &', u'right'))
     cls.add_output_stream_operator()
-    cls.add_inplace_numeric_operator('*=', param('ns3::SpectrumValue const &', 'right'))
-    cls.add_inplace_numeric_operator('*=', param('double', 'right'))
-    cls.add_inplace_numeric_operator('+=', param('ns3::SpectrumValue const &', 'right'))
-    cls.add_inplace_numeric_operator('+=', param('double', 'right'))
-    cls.add_inplace_numeric_operator('-=', param('ns3::SpectrumValue const &', 'right'))
-    cls.add_inplace_numeric_operator('-=', param('double', 'right'))
-    cls.add_inplace_numeric_operator('/=', param('ns3::SpectrumValue const &', 'right'))
-    cls.add_inplace_numeric_operator('/=', param('double', 'right'))
+    cls.add_inplace_numeric_operator('*=', param('ns3::SpectrumValue const &', u'right'))
+    cls.add_inplace_numeric_operator('*=', param('double', u'right'))
+    cls.add_inplace_numeric_operator('+=', param('ns3::SpectrumValue const &', u'right'))
+    cls.add_inplace_numeric_operator('+=', param('double', u'right'))
+    cls.add_inplace_numeric_operator('-=', param('ns3::SpectrumValue const &', u'right'))
+    cls.add_inplace_numeric_operator('-=', param('double', u'right'))
+    cls.add_inplace_numeric_operator('/=', param('ns3::SpectrumValue const &', u'right'))
+    cls.add_inplace_numeric_operator('/=', param('double', u'right'))
     ## spectrum-value.h (module 'spectrum'): ns3::SpectrumValue::SpectrumValue(ns3::SpectrumValue const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::SpectrumValue const &', 'arg0')])
     ## spectrum-value.h (module 'spectrum'): ns3::SpectrumValue::SpectrumValue(ns3::Ptr<ns3::SpectrumModel const> sm) [constructor]
@@ -11309,14 +10972,16 @@
     return
 
 def register_Ns3Time_methods(root_module, cls):
-    cls.add_binary_comparison_operator('<=')
     cls.add_binary_comparison_operator('!=')
-    cls.add_inplace_numeric_operator('+=', 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('ns3::Time const &', 'right'))
+    cls.add_binary_comparison_operator('<=')
+    cls.add_inplace_numeric_operator('+=', 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_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_inplace_numeric_operator('-=', param('ns3::Time const &', '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('>=')
@@ -11342,6 +11007,11 @@
     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', 
@@ -14240,63 +13910,6 @@
                    [param('int64_t const &', 'value')])
     return
 
-def register_Ns3IpL4Protocol_methods(root_module, cls):
-    ## ip-l4-protocol.h (module 'internet'): ns3::IpL4Protocol::IpL4Protocol() [constructor]
-    cls.add_constructor([])
-    ## ip-l4-protocol.h (module 'internet'): ns3::IpL4Protocol::IpL4Protocol(ns3::IpL4Protocol const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::IpL4Protocol const &', 'arg0')])
-    ## ip-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::IpL4Protocol::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 >', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## ip-l4-protocol.h (module 'internet'): 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> ns3::IpL4Protocol::GetDownTarget6() const [member function]
-    cls.add_method('GetDownTarget6', 
-                   '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 >', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## ip-l4-protocol.h (module 'internet'): int ns3::IpL4Protocol::GetProtocolNumber() const [member function]
-    cls.add_method('GetProtocolNumber', 
-                   'int', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## ip-l4-protocol.h (module 'internet'): static ns3::TypeId ns3::IpL4Protocol::GetTypeId() [member function]
-    cls.add_method('GetTypeId', 
-                   'ns3::TypeId', 
-                   [], 
-                   is_static=True)
-    ## ip-l4-protocol.h (module 'internet'): ns3::IpL4Protocol::RxStatus ns3::IpL4Protocol::Receive(ns3::Ptr<ns3::Packet> p, ns3::Ipv4Header const & header, 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')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## ip-l4-protocol.h (module 'internet'): ns3::IpL4Protocol::RxStatus ns3::IpL4Protocol::Receive(ns3::Ptr<ns3::Packet> p, ns3::Ipv6Header const & header, 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')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## ip-l4-protocol.h (module 'internet'): void ns3::IpL4Protocol::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', 
-                   'void', 
-                   [param('ns3::Ipv4Address', 'icmpSource'), param('uint8_t', 'icmpTtl'), param('uint8_t', 'icmpType'), param('uint8_t', 'icmpCode'), param('uint32_t', 'icmpInfo'), param('ns3::Ipv4Address', 'payloadSource'), param('ns3::Ipv4Address', 'payloadDestination'), param('uint8_t const *', 'payload')], 
-                   is_virtual=True)
-    ## ip-l4-protocol.h (module 'internet'): void ns3::IpL4Protocol::ReceiveIcmp(ns3::Ipv6Address icmpSource, uint8_t icmpTtl, uint8_t icmpType, uint8_t icmpCode, uint32_t icmpInfo, ns3::Ipv6Address payloadSource, ns3::Ipv6Address payloadDestination, uint8_t const * payload) [member function]
-    cls.add_method('ReceiveIcmp', 
-                   'void', 
-                   [param('ns3::Ipv6Address', 'icmpSource'), param('uint8_t', 'icmpTtl'), param('uint8_t', 'icmpType'), param('uint8_t', 'icmpCode'), param('uint32_t', 'icmpInfo'), param('ns3::Ipv6Address', 'payloadSource'), param('ns3::Ipv6Address', 'payloadDestination'), param('uint8_t const *', 'payload')], 
-                   is_virtual=True)
-    ## ip-l4-protocol.h (module 'internet'): void ns3::IpL4Protocol::SetDownTarget(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> cb) [member function]
-    cls.add_method('SetDownTarget', 
-                   'void', 
-                   [param('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 >', 'cb')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## ip-l4-protocol.h (module 'internet'): void ns3::IpL4Protocol::SetDownTarget6(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) [member function]
-    cls.add_method('SetDownTarget6', 
-                   '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_pure_virtual=True, is_virtual=True)
-    return
-
 def register_Ns3Ipv4_methods(root_module, cls):
     ## ipv4.h (module 'internet'): ns3::Ipv4::Ipv4(ns3::Ipv4 const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::Ipv4 const &', 'arg0')])
@@ -14692,151 +14305,6 @@
                    [param('ns3::Ipv6Address const &', 'value')])
     return
 
-def register_Ns3Ipv6Interface_methods(root_module, cls):
-    ## ipv6-interface.h (module 'internet'): ns3::Ipv6Interface::Ipv6Interface(ns3::Ipv6Interface const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::Ipv6Interface const &', 'arg0')])
-    ## ipv6-interface.h (module 'internet'): ns3::Ipv6Interface::Ipv6Interface() [constructor]
-    cls.add_constructor([])
-    ## ipv6-interface.h (module 'internet'): bool ns3::Ipv6Interface::AddAddress(ns3::Ipv6InterfaceAddress iface) [member function]
-    cls.add_method('AddAddress', 
-                   'bool', 
-                   [param('ns3::Ipv6InterfaceAddress', 'iface')])
-    ## ipv6-interface.h (module 'internet'): ns3::Ipv6InterfaceAddress ns3::Ipv6Interface::GetAddress(uint32_t index) const [member function]
-    cls.add_method('GetAddress', 
-                   'ns3::Ipv6InterfaceAddress', 
-                   [param('uint32_t', 'index')], 
-                   is_const=True)
-    ## ipv6-interface.h (module 'internet'): ns3::Ipv6InterfaceAddress ns3::Ipv6Interface::GetAddressMatchingDestination(ns3::Ipv6Address dst) [member function]
-    cls.add_method('GetAddressMatchingDestination', 
-                   'ns3::Ipv6InterfaceAddress', 
-                   [param('ns3::Ipv6Address', 'dst')])
-    ## ipv6-interface.h (module 'internet'): uint16_t ns3::Ipv6Interface::GetBaseReachableTime() const [member function]
-    cls.add_method('GetBaseReachableTime', 
-                   'uint16_t', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface.h (module 'internet'): uint8_t ns3::Ipv6Interface::GetCurHopLimit() const [member function]
-    cls.add_method('GetCurHopLimit', 
-                   'uint8_t', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface.h (module 'internet'): ns3::Ptr<ns3::NetDevice> ns3::Ipv6Interface::GetDevice() const [member function]
-    cls.add_method('GetDevice', 
-                   'ns3::Ptr< ns3::NetDevice >', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## ipv6-interface.h (module 'internet'): ns3::Ipv6InterfaceAddress ns3::Ipv6Interface::GetLinkLocalAddress() const [member function]
-    cls.add_method('GetLinkLocalAddress', 
-                   'ns3::Ipv6InterfaceAddress', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface.h (module 'internet'): uint16_t ns3::Ipv6Interface::GetMetric() const [member function]
-    cls.add_method('GetMetric', 
-                   'uint16_t', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface.h (module 'internet'): uint32_t ns3::Ipv6Interface::GetNAddresses() const [member function]
-    cls.add_method('GetNAddresses', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface.h (module 'internet'): uint16_t ns3::Ipv6Interface::GetReachableTime() const [member function]
-    cls.add_method('GetReachableTime', 
-                   'uint16_t', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface.h (module 'internet'): uint16_t ns3::Ipv6Interface::GetRetransTimer() const [member function]
-    cls.add_method('GetRetransTimer', 
-                   'uint16_t', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface.h (module 'internet'): static ns3::TypeId ns3::Ipv6Interface::GetTypeId() [member function]
-    cls.add_method('GetTypeId', 
-                   'ns3::TypeId', 
-                   [], 
-                   is_static=True)
-    ## ipv6-interface.h (module 'internet'): bool ns3::Ipv6Interface::IsDown() const [member function]
-    cls.add_method('IsDown', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface.h (module 'internet'): bool ns3::Ipv6Interface::IsForwarding() const [member function]
-    cls.add_method('IsForwarding', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface.h (module 'internet'): bool ns3::Ipv6Interface::IsUp() const [member function]
-    cls.add_method('IsUp', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## ipv6-interface.h (module 'internet'): ns3::Ipv6InterfaceAddress ns3::Ipv6Interface::RemoveAddress(uint32_t index) [member function]
-    cls.add_method('RemoveAddress', 
-                   'ns3::Ipv6InterfaceAddress', 
-                   [param('uint32_t', 'index')])
-    ## ipv6-interface.h (module 'internet'): ns3::Ipv6InterfaceAddress ns3::Ipv6Interface::RemoveAddress(ns3::Ipv6Address address) [member function]
-    cls.add_method('RemoveAddress', 
-                   'ns3::Ipv6InterfaceAddress', 
-                   [param('ns3::Ipv6Address', 'address')])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::Send(ns3::Ptr<ns3::Packet> p, ns3::Ipv6Address dest) [member function]
-    cls.add_method('Send', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::Packet >', 'p'), param('ns3::Ipv6Address', 'dest')])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetBaseReachableTime(uint16_t baseReachableTime) [member function]
-    cls.add_method('SetBaseReachableTime', 
-                   'void', 
-                   [param('uint16_t', 'baseReachableTime')])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetCurHopLimit(uint8_t curHopLimit) [member function]
-    cls.add_method('SetCurHopLimit', 
-                   'void', 
-                   [param('uint8_t', 'curHopLimit')])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetDevice(ns3::Ptr<ns3::NetDevice> device) [member function]
-    cls.add_method('SetDevice', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::NetDevice >', 'device')])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetDown() [member function]
-    cls.add_method('SetDown', 
-                   'void', 
-                   [])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetForwarding(bool forward) [member function]
-    cls.add_method('SetForwarding', 
-                   'void', 
-                   [param('bool', 'forward')])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetMetric(uint16_t metric) [member function]
-    cls.add_method('SetMetric', 
-                   'void', 
-                   [param('uint16_t', 'metric')])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetNode(ns3::Ptr<ns3::Node> node) [member function]
-    cls.add_method('SetNode', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::Node >', 'node')])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetNsDadUid(ns3::Ipv6Address address, uint32_t uid) [member function]
-    cls.add_method('SetNsDadUid', 
-                   'void', 
-                   [param('ns3::Ipv6Address', 'address'), param('uint32_t', 'uid')])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetReachableTime(uint16_t reachableTime) [member function]
-    cls.add_method('SetReachableTime', 
-                   'void', 
-                   [param('uint16_t', 'reachableTime')])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetRetransTimer(uint16_t retransTimer) [member function]
-    cls.add_method('SetRetransTimer', 
-                   'void', 
-                   [param('uint16_t', 'retransTimer')])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetState(ns3::Ipv6Address address, ns3::Ipv6InterfaceAddress::State_e state) [member function]
-    cls.add_method('SetState', 
-                   'void', 
-                   [param('ns3::Ipv6Address', 'address'), param('ns3::Ipv6InterfaceAddress::State_e', 'state')])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetUp() [member function]
-    cls.add_method('SetUp', 
-                   'void', 
-                   [])
-    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::DoDispose() [member function]
-    cls.add_method('DoDispose', 
-                   'void', 
-                   [], 
-                   visibility='protected', is_virtual=True)
-    return
-
 def register_Ns3Ipv6PrefixChecker_methods(root_module, cls):
     ## ipv6-address.h (module 'network'): ns3::Ipv6PrefixChecker::Ipv6PrefixChecker() [constructor]
     cls.add_constructor([])
@@ -17541,10 +17009,10 @@
                    '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')])
     return
 
 def register_Ns3ParetoRandomVariable_methods(root_module, cls):
@@ -19312,6 +18780,47 @@
                    [param('ns3::MacCeListElement_s', 'bsr')])
     return
 
+def register_Ns3CqaFfMacScheduler_methods(root_module, cls):
+    ## cqa-ff-mac-scheduler.h (module 'lte'): ns3::CqaFfMacScheduler::CqaFfMacScheduler(ns3::CqaFfMacScheduler const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::CqaFfMacScheduler const &', 'arg0')])
+    ## cqa-ff-mac-scheduler.h (module 'lte'): ns3::CqaFfMacScheduler::CqaFfMacScheduler() [constructor]
+    cls.add_constructor([])
+    ## cqa-ff-mac-scheduler.h (module 'lte'): void ns3::CqaFfMacScheduler::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    ## cqa-ff-mac-scheduler.h (module 'lte'): ns3::FfMacCschedSapProvider * ns3::CqaFfMacScheduler::GetFfMacCschedSapProvider() [member function]
+    cls.add_method('GetFfMacCschedSapProvider', 
+                   'ns3::FfMacCschedSapProvider *', 
+                   [], 
+                   is_virtual=True)
+    ## cqa-ff-mac-scheduler.h (module 'lte'): ns3::FfMacSchedSapProvider * ns3::CqaFfMacScheduler::GetFfMacSchedSapProvider() [member function]
+    cls.add_method('GetFfMacSchedSapProvider', 
+                   'ns3::FfMacSchedSapProvider *', 
+                   [], 
+                   is_virtual=True)
+    ## cqa-ff-mac-scheduler.h (module 'lte'): static ns3::TypeId ns3::CqaFfMacScheduler::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## cqa-ff-mac-scheduler.h (module 'lte'): void ns3::CqaFfMacScheduler::SetFfMacCschedSapUser(ns3::FfMacCschedSapUser * s) [member function]
+    cls.add_method('SetFfMacCschedSapUser', 
+                   'void', 
+                   [param('ns3::FfMacCschedSapUser *', 's')], 
+                   is_virtual=True)
+    ## cqa-ff-mac-scheduler.h (module 'lte'): void ns3::CqaFfMacScheduler::SetFfMacSchedSapUser(ns3::FfMacSchedSapUser * s) [member function]
+    cls.add_method('SetFfMacSchedSapUser', 
+                   'void', 
+                   [param('ns3::FfMacSchedSapUser *', 's')], 
+                   is_virtual=True)
+    ## cqa-ff-mac-scheduler.h (module 'lte'): void ns3::CqaFfMacScheduler::TransmissionModeConfigurationUpdate(uint16_t rnti, uint8_t txMode) [member function]
+    cls.add_method('TransmissionModeConfigurationUpdate', 
+                   'void', 
+                   [param('uint16_t', 'rnti'), param('uint8_t', 'txMode')])
+    return
+
 def register_Ns3DlCqiLteControlMessage_methods(root_module, cls):
     ## lte-control-messages.h (module 'lte'): ns3::DlCqiLteControlMessage::DlCqiLteControlMessage(ns3::DlCqiLteControlMessage const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::DlCqiLteControlMessage const &', 'arg0')])
diff -Naur ns-3.19/src/lte/doc/source/lte-design.rst ns-3.20/src/lte/doc/source/lte-design.rst
--- ns-3.19/src/lte/doc/source/lte-design.rst	2014-06-17 10:34:00.692634700 -0700
+++ ns-3.20/src/lte/doc/source/lte-design.rst	2014-06-17 10:33:14.044994796 -0700
@@ -542,7 +542,7 @@
 Let :math:`f_c` denote the  LTE Absolute Radio Frequency Channel Number, which
 identifies the carrier frequency on a 100 kHz raster; furthermore, let :math:`B` be
 the Transmission Bandwidth Configuration in number of Resource Blocks. For every
-pair :math:`(f_c,B)` used in the simulation we define a corresponding spectrum
+pair :math:`(f_c,B)` used in the simulation we define a corresponding SpectrumModel using the functionality provided by the :ref:`sec-spetrum-module` .
 model using the Spectrum framework described
 in [Baldo2009]_.  :math:`f_c` and :math:`B` can be configured for every eNB instantiated
 in the simulation; hence, each eNB can use a different spectrum model. Every UE
@@ -1272,6 +1272,84 @@
   - ``ALL_UL_CQI``: all CQIs are stored in the same internal attibute (i.e., the last CQI received is stored independently from its nature).
 
 
+Channel and QoS Aware Scheduler
+-------------------------------
+
+The Channel and QoS Aware (CQA) Scheduler [Bbojovic2014]_ is an LTE
+MAC downlink scheduling algorithm that considers the head of line
+(HOL) delay, the GBR parameters and channel quality over  
+different subbands. The CQA scheduler is based on joint TD and FD
+scheduling. 
+
+In the TD (at each TTI) the CQA scheduler groups users by
+priority. The purpose of grouping is to enforce the FD scheduling to
+consider first the flows with highest HOL delay. The grouping metric
+:math:`m_{td}` for user :math:`j=1,...,N` is defined in the  
+following way:
+
+.. math::
+
+    m_{td}^{j}(t) = \lceil\frac{d_{hol}^{j}(t)}{g}\rceil \;,
+
+where :math:`d_{hol}^{j}(t)` is the current value of HOL delay of flow
+:math:`j`, and :math:`g` is a grouping parameter that determines
+granularity of the groups, i.e. the number of the flows that will be
+considered in the FD scheduling iteration. 
+
+The groups of flows selected in the TD iteration are forwarded to the FD
+scheduling starting from the flows with the highest value of the
+:math:`m_{td}` metric until all RBGs are assigned in the corresponding
+TTI.  In the FD, for each RBG :math:`k=1,...,K`, the CQA scheduler
+assigns the current RBG to the user :math:`j` that has the maximum value of
+the FD metric which we define in the following way:
+
+.. math::
+
+  m_{fd}^{(k,j)}(t) = d_{HOL}^{j}(t) \cdot m_{GBR}^j(t) \cdot m_{ca}^{k,j}(t) \;,
+
+where :math:`m_{GBR}^j(t)` is calculated as follows:
+
+.. math::
+
+	m_{GBR}^j(t)=\frac{GBR^j}{\overline{R^j}(t)}=\frac{GBR^j}{(1-\alpha)\cdot\overline{R^j}(t-1)+\alpha \cdot r^j(t)} \;,
+	
+where :math:`GBR^j` is the bit rate specified in EPS bearer of the
+flow :math:`j`, :math:`\overline{R^j}(t)` is the past averaged throughput that is calculated with a 
+moving average, :math:`r^{j}(t)` is the throughput achieved at the
+time t, and :math:`\alpha` is a coefficient such that :math:`0 \le \alpha 
+\le1`.
+
+For :math:`m_{ca}^{(k,j)}(t)` we consider two different
+metrics: :math:`m_{pf}^{(k,j)}(t)` and :math:`m_{ff}^{(k,j)}(t)`. 
+:math:`m_{pf}` is the Proportional Fair metric which is defined as follows:
+
+.. math::
+
+   m_{pf}^{(k,j)}(t) = \frac{R_e^{(k,j)}}{\overline{R^j}(t)} \;,
+
+where :math:`R_e^{(k,j)}(t)` is the estimated achievable throughput of user
+:math:`j` over RBG :math:`k` calculated by the Adaptive Modulation and Coding
+(AMC) scheme that maps the channel quality indicator (CQI) value to
+the transport block size in bits. 
+
+The other channel awareness metric that we consider is :math:`m_{ff}` which
+is proposed in [GMonghal2008]_ and it represents the frequency
+selective fading gains over RBG :math:`k` for user :math:`j` and is calculated in
+the following way:
+
+.. math::
+
+  m_{ff}^{(k,j)}(t) = \frac{CQI^{(k,j)}(t)}{\sum_{k=1}^{K}CQI(t)^{(k,j)}} \;,
+
+where :math:`CQI^{(k,j)}(t)` is the last reported CQI value from user
+:math:`j` for the :math:`k`-th RBG.
+
+The user can select whether :math:`m_{pf}` or :math:`m_{ff}` is used
+by setting the attribute ``ns3::CqaFfMacScheduler::CqaMetric``
+respectively to ``"CqaPf"`` or ``"CqaFf"``.
+
+
+
 .. _sec-random-access:
 
 Random Access
diff -Naur ns-3.19/src/lte/doc/source/lte-references.rst ns-3.20/src/lte/doc/source/lte-references.rst
--- ns-3.19/src/lte/doc/source/lte-references.rst	2014-06-17 10:34:00.694634685 -0700
+++ ns-3.20/src/lte/doc/source/lte-references.rst	2014-06-17 10:33:14.046994781 -0700
@@ -143,3 +143,6 @@
 .. [Lee2010] Y.J. Lee, B.J. Shin, J.C. Lim, D.H. Hong,
    "Effects of time-to-trigger parameter on handover performance in SON-based LTE systems",
    Communications (APCC), 2010 16th Asia-Pacific Conference on, pp.492-496, Oct. 31 2010--Nov. 3 2010
+   
+.. [Bbojovic2014] B. Bojovic, N. Baldo, "A new Channel and QoS Aware Scheduler to enhance the capacity of Voice over LTE systems", SDD conference 2014, preprint version is available: <http://www.cttc.es/?post_type=publication&p=5226>
+
diff -Naur ns-3.19/src/lte/doc/source/lte-testing.rst ns-3.20/src/lte/doc/source/lte-testing.rst
--- ns-3.19/src/lte/doc/source/lte-testing.rst	2014-06-17 10:34:00.696634669 -0700
+++ ns-3.20/src/lte/doc/source/lte-testing.rst	2014-06-17 10:33:14.048994765 -0700
@@ -785,6 +785,15 @@
 Here, :math:`T` is the maximum throughput. :math:`R^{fb}_i` be the the full bandwidth achievable rate 
 for user i. :math:`N` is the number of UE.
 
+Channel and QoS aware scheduler performance
+-------------------------------------------
+
+The performance of the Channel and QoS aware scheduler can be tested in the similar way to performance of 
+Priority Set scheduler when GBR flows are not delay sensitive by measuring if the achieved throughput at 
+RLC layer is close to the TBR. Having this in mind, the performance of the CQA scheduler is tested by using 
+the same test cases as the ``lte-pss-ff-mac-scheduler``. Additionally, in [Bbojovic2014]_ can be found performance 
+evaluation of CQA scheduler when the GBR flows are delay sensitive by considering different QoE metrics.
+
 Building Propagation Loss Model
 -------------------------------
 
diff -Naur ns-3.19/src/lte/examples/waf ns-3.20/src/lte/examples/waf
--- ns-3.19/src/lte/examples/waf	2014-06-17 10:34:00.708634577 -0700
+++ ns-3.20/src/lte/examples/waf	1969-12-31 16:00:00.000000000 -0800
@@ -1 +0,0 @@
-exec "`dirname "$0"`"/../../waf "$@"
diff -Naur ns-3.19/src/lte/helper/epc-helper.cc ns-3.20/src/lte/helper/epc-helper.cc
--- ns-3.19/src/lte/helper/epc-helper.cc	2014-06-17 10:34:00.709634569 -0700
+++ ns-3.20/src/lte/helper/epc-helper.cc	2014-06-17 10:33:14.061994665 -0700
@@ -27,11 +27,9 @@
 
 namespace ns3 {
 
-NS_LOG_COMPONENT_DEFINE ("EpcHelper")
-  ;
+NS_LOG_COMPONENT_DEFINE ("EpcHelper");
 
-NS_OBJECT_ENSURE_REGISTERED (EpcHelper)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (EpcHelper);
 
 
 EpcHelper::EpcHelper () 
diff -Naur ns-3.19/src/lte/helper/lte-global-pathloss-database.cc ns-3.20/src/lte/helper/lte-global-pathloss-database.cc
--- ns-3.19/src/lte/helper/lte-global-pathloss-database.cc	2014-06-17 10:34:00.710634561 -0700
+++ ns-3.20/src/lte/helper/lte-global-pathloss-database.cc	2014-06-17 10:33:14.062994657 -0700
@@ -28,8 +28,7 @@
 
 namespace ns3 {
 
-NS_LOG_COMPONENT_DEFINE ("LteGlobalPathlossDatabase")
-  ;
+NS_LOG_COMPONENT_DEFINE ("LteGlobalPathlossDatabase");
 
 
 LteGlobalPathlossDatabase::~LteGlobalPathlossDatabase (void)
diff -Naur ns-3.19/src/lte/helper/lte-helper.cc ns-3.20/src/lte/helper/lte-helper.cc
--- ns-3.19/src/lte/helper/lte-helper.cc	2014-06-17 10:34:00.713634538 -0700
+++ ns-3.20/src/lte/helper/lte-helper.cc	2014-06-17 10:33:14.065994634 -0700
@@ -65,8 +65,7 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (LteHelper)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (LteHelper);
 
 LteHelper::LteHelper (void)
   : m_fadingStreamsAssigned (false),
diff -Naur ns-3.19/src/lte/helper/lte-hex-grid-enb-topology-helper.cc ns-3.20/src/lte/helper/lte-hex-grid-enb-topology-helper.cc
--- ns-3.19/src/lte/helper/lte-hex-grid-enb-topology-helper.cc	2014-06-17 10:34:00.714634531 -0700
+++ ns-3.20/src/lte/helper/lte-hex-grid-enb-topology-helper.cc	2014-06-17 10:33:14.066994627 -0700
@@ -32,8 +32,7 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (LteHexGridEnbTopologyHelper)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (LteHexGridEnbTopologyHelper);
 
 LteHexGridEnbTopologyHelper::LteHexGridEnbTopologyHelper ()
 {
diff -Naur ns-3.19/src/lte/helper/lte-stats-calculator.cc ns-3.20/src/lte/helper/lte-stats-calculator.cc
--- ns-3.19/src/lte/helper/lte-stats-calculator.cc	2014-06-17 10:34:00.715634523 -0700
+++ ns-3.20/src/lte/helper/lte-stats-calculator.cc	2014-06-17 10:33:14.067994619 -0700
@@ -29,8 +29,7 @@
 
 namespace ns3 {
 
-NS_LOG_COMPONENT_DEFINE ("LteStatsCalculator")
-  ;
+NS_LOG_COMPONENT_DEFINE ("LteStatsCalculator");
 
 LteStatsCalculator::LteStatsCalculator ()
   : m_dlOutputFilename (""),
diff -Naur ns-3.19/src/lte/helper/mac-stats-calculator.cc ns-3.20/src/lte/helper/mac-stats-calculator.cc
--- ns-3.19/src/lte/helper/mac-stats-calculator.cc	2014-06-17 10:34:00.716634515 -0700
+++ ns-3.20/src/lte/helper/mac-stats-calculator.cc	2014-06-17 10:33:14.068994611 -0700
@@ -25,11 +25,9 @@
 
 namespace ns3 {
 
-NS_LOG_COMPONENT_DEFINE ("MacStatsCalculator")
-  ;
+NS_LOG_COMPONENT_DEFINE ("MacStatsCalculator");
 
-NS_OBJECT_ENSURE_REGISTERED (MacStatsCalculator)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (MacStatsCalculator);
 
 MacStatsCalculator::MacStatsCalculator ()
   : m_dlFirstWrite (true),
diff -Naur ns-3.19/src/lte/helper/phy-rx-stats-calculator.cc ns-3.20/src/lte/helper/phy-rx-stats-calculator.cc
--- ns-3.19/src/lte/helper/phy-rx-stats-calculator.cc	2014-06-17 10:34:00.717634507 -0700
+++ ns-3.20/src/lte/helper/phy-rx-stats-calculator.cc	2014-06-17 10:33:14.069994603 -0700
@@ -27,11 +27,9 @@
 
 namespace ns3 {
 
-NS_LOG_COMPONENT_DEFINE ("PhyRxStatsCalculator")
-  ;
+NS_LOG_COMPONENT_DEFINE ("PhyRxStatsCalculator");
 
-NS_OBJECT_ENSURE_REGISTERED (PhyRxStatsCalculator)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (PhyRxStatsCalculator);
 
 PhyRxStatsCalculator::PhyRxStatsCalculator ()
   : m_dlRxFirstWrite (true),
diff -Naur ns-3.19/src/lte/helper/phy-stats-calculator.cc ns-3.20/src/lte/helper/phy-stats-calculator.cc
--- ns-3.19/src/lte/helper/phy-stats-calculator.cc	2014-06-17 10:34:00.717634507 -0700
+++ ns-3.20/src/lte/helper/phy-stats-calculator.cc	2014-06-17 10:33:14.069994603 -0700
@@ -25,11 +25,9 @@
 
 namespace ns3 {
 
-NS_LOG_COMPONENT_DEFINE ("PhyStatsCalculator")
-  ;
+NS_LOG_COMPONENT_DEFINE ("PhyStatsCalculator");
 
-NS_OBJECT_ENSURE_REGISTERED (PhyStatsCalculator)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (PhyStatsCalculator);
 
 PhyStatsCalculator::PhyStatsCalculator ()
   :  m_RsrpSinrFirstWrite (true),
diff -Naur ns-3.19/src/lte/helper/phy-tx-stats-calculator.cc ns-3.20/src/lte/helper/phy-tx-stats-calculator.cc
--- ns-3.19/src/lte/helper/phy-tx-stats-calculator.cc	2014-06-17 10:34:00.718634499 -0700
+++ ns-3.20/src/lte/helper/phy-tx-stats-calculator.cc	2014-06-17 10:33:14.070994596 -0700
@@ -27,11 +27,9 @@
 
 namespace ns3 {
 
-NS_LOG_COMPONENT_DEFINE ("PhyTxStatsCalculator")
-  ;
+NS_LOG_COMPONENT_DEFINE ("PhyTxStatsCalculator");
 
-NS_OBJECT_ENSURE_REGISTERED (PhyTxStatsCalculator)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (PhyTxStatsCalculator);
 
 PhyTxStatsCalculator::PhyTxStatsCalculator ()
   : m_dlTxFirstWrite (true),
diff -Naur ns-3.19/src/lte/helper/point-to-point-epc-helper.cc ns-3.20/src/lte/helper/point-to-point-epc-helper.cc
--- ns-3.19/src/lte/helper/point-to-point-epc-helper.cc	2014-06-17 10:34:00.719634492 -0700
+++ ns-3.20/src/lte/helper/point-to-point-epc-helper.cc	2014-06-17 10:33:14.071994588 -0700
@@ -42,11 +42,9 @@
 
 namespace ns3 {
 
-NS_LOG_COMPONENT_DEFINE ("PointToPointEpcHelper")
-  ;
+NS_LOG_COMPONENT_DEFINE ("PointToPointEpcHelper");
 
-NS_OBJECT_ENSURE_REGISTERED (PointToPointEpcHelper)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (PointToPointEpcHelper);
 
 
 PointToPointEpcHelper::PointToPointEpcHelper () 
diff -Naur ns-3.19/src/lte/helper/radio-bearer-stats-calculator.cc ns-3.20/src/lte/helper/radio-bearer-stats-calculator.cc
--- ns-3.19/src/lte/helper/radio-bearer-stats-calculator.cc	2014-06-17 10:34:00.720634484 -0700
+++ ns-3.20/src/lte/helper/radio-bearer-stats-calculator.cc	2014-06-17 10:33:14.072994580 -0700
@@ -29,11 +29,9 @@
 namespace ns3
 {
 
-NS_LOG_COMPONENT_DEFINE ("RadioBearerStatsCalculator")
-  ;
+NS_LOG_COMPONENT_DEFINE ("RadioBearerStatsCalculator");
 
-NS_OBJECT_ENSURE_REGISTERED ( RadioBearerStatsCalculator)
-  ;
+NS_OBJECT_ENSURE_REGISTERED ( RadioBearerStatsCalculator);
 
 RadioBearerStatsCalculator::RadioBearerStatsCalculator ()
   : m_firstWrite (true),
diff -Naur ns-3.19/src/lte/helper/radio-environment-map-helper.cc ns-3.20/src/lte/helper/radio-environment-map-helper.cc
--- ns-3.19/src/lte/helper/radio-environment-map-helper.cc	2014-06-17 10:34:00.721634476 -0700
+++ ns-3.20/src/lte/helper/radio-environment-map-helper.cc	2014-06-17 10:33:14.073994572 -0700
@@ -46,8 +46,7 @@
 
 
 
-NS_OBJECT_ENSURE_REGISTERED (RadioEnvironmentMapHelper)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (RadioEnvironmentMapHelper);
 
 RadioEnvironmentMapHelper::RadioEnvironmentMapHelper ()
 {
@@ -115,7 +114,7 @@
                    MakeBooleanChecker ())
     .AddAttribute ("NoisePower",
                    "the power of the measuring instrument noise, in Watts. Default to a kT of -174 dBm with a noise figure of 9 dB and a bandwidth of 25 LTE Resource Blocks",
-                   DoubleValue (1.4230e-10),
+                   DoubleValue (1.4230e-13),
                    MakeDoubleAccessor (&RadioEnvironmentMapHelper::m_noisePower),
                    MakeDoubleChecker<double> ())
     .AddAttribute ("MaxPointsPerIteration", "Maximum number of REM points to be calculated per iteration. Every point consumes approximately 5KB of memory.",
diff -Naur ns-3.19/src/lte/model/a2-a4-rsrq-handover-algorithm.cc ns-3.20/src/lte/model/a2-a4-rsrq-handover-algorithm.cc
--- ns-3.19/src/lte/model/a2-a4-rsrq-handover-algorithm.cc	2014-06-17 10:34:00.722634469 -0700
+++ ns-3.20/src/lte/model/a2-a4-rsrq-handover-algorithm.cc	2014-06-17 10:33:14.074994565 -0700
@@ -34,8 +34,7 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (A2A4RsrqHandoverAlgorithm)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (A2A4RsrqHandoverAlgorithm);
 
 
 ///////////////////////////////////////////
diff -Naur ns-3.19/src/lte/model/a3-rsrp-handover-algorithm.cc ns-3.20/src/lte/model/a3-rsrp-handover-algorithm.cc
--- ns-3.19/src/lte/model/a3-rsrp-handover-algorithm.cc	2014-06-17 10:34:00.723634461 -0700
+++ ns-3.20/src/lte/model/a3-rsrp-handover-algorithm.cc	2014-06-17 10:33:14.075994557 -0700
@@ -29,8 +29,7 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (A3RsrpHandoverAlgorithm)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (A3RsrpHandoverAlgorithm);
 
 
 A3RsrpHandoverAlgorithm::A3RsrpHandoverAlgorithm ()
diff -Naur ns-3.19/src/lte/model/cqa-ff-mac-scheduler.cc ns-3.20/src/lte/model/cqa-ff-mac-scheduler.cc
--- ns-3.19/src/lte/model/cqa-ff-mac-scheduler.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.20/src/lte/model/cqa-ff-mac-scheduler.cc	2014-06-17 10:33:14.076994549 -0700
@@ -0,0 +1,2523 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 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
+ *
+ * Authors: Biljana Bojovic <bbojovic@cttc.es>, Nicola Baldo<nbaldo@cttc.es>.
+ *
+ * Note:
+ * Implementation is using many common scheduler functionalities in its
+ * original version implemented by Marco Miozzo<mmiozzo@cttc.es> in
+ * Proportional Fair and Round Robin schedulers implementations.
+ */
+
+#include <ns3/log.h>
+#include <ns3/pointer.h>
+#include <ns3/math.h>
+
+#include <ns3/simulator.h>
+#include <ns3/lte-amc.h>
+#include <ns3/cqa-ff-mac-scheduler.h>
+#include <ns3/ff-mac-common.h>
+#include <ns3/lte-vendor-specific-parameters.h>
+#include <ns3/boolean.h>
+#include <cfloat>
+#include <set>
+#include <stdexcept>
+#include <ns3/integer.h>
+#include <ns3/string.h>
+
+NS_LOG_COMPONENT_DEFINE ("CqaFfMacScheduler");
+
+namespace ns3 {
+
+static const int CqaType0AllocationRbg[4] = {
+  10,       // RGB size 1
+  26,       // RGB size 2
+  63,       // RGB size 3
+  110       // RGB size 4
+};  // see table 7.1.6.1-1 of 36.213
+
+
+NS_OBJECT_ENSURE_REGISTERED (CqaFfMacScheduler);
+
+
+struct qos_rb_and_CQI_assigned_to_lc
+{
+  uint16_t resource_block_index;       //Resource block indexHOL_GROUP_index
+  uint8_t  cqi_value_for_lc;       // CQI indicator value
+};
+
+
+bool CQIValueDescComparator (uint8_t key1, uint8_t key2)
+{
+  return key1>key2;
+}
+
+bool CqaGroupDescComparator (int key1, int key2)
+{
+  return key1>key2;
+}
+
+typedef uint8_t CQI_value;
+typedef int RBG_index;
+typedef int HOL_group;
+
+typedef std::map<CQI_value,LteFlowId_t,bool(*)(uint8_t,uint8_t)> t_map_CQIToUE; //sorted
+typedef std::map<RBG_index,t_map_CQIToUE> t_map_RBGToCQIsSorted;
+typedef std::map<HOL_group,t_map_RBGToCQIsSorted> t_map_HOLGroupToRBGs;
+
+typedef std::map<CQI_value,LteFlowId_t,bool(*)(uint8_t,uint8_t)>::iterator t_it_CQIToUE; //sorted
+typedef std::map<RBG_index,t_map_CQIToUE>::iterator t_it_RBGToCQIsSorted;
+typedef std::map<HOL_group,t_map_RBGToCQIsSorted>::iterator t_it_HOLGroupToRBGs;
+
+typedef std::multimap<HOL_group,std::set<LteFlowId_t>,bool(*)(int,int)> t_map_HOLgroupToUEs;
+typedef std::map<HOL_group,std::set<LteFlowId_t> >::iterator t_it_HOLgroupToUEs;
+
+//typedef std::map<RBG_index,CQI_value>  map_RBG_to_CQI;
+//typedef std::map<LteFlowId_t,map_RBG_to_CQI> map_flowId_to_CQI_map;
+
+
+bool CqaKeyDescComparator (uint16_t key1, uint16_t key2)
+{
+  return key1>key2;
+}
+
+
+class CqaSchedulerMemberCschedSapProvider : public FfMacCschedSapProvider
+{
+public:
+  CqaSchedulerMemberCschedSapProvider (CqaFfMacScheduler* scheduler);
+
+  // inherited from FfMacCschedSapProvider
+  virtual void CschedCellConfigReq (const struct CschedCellConfigReqParameters& params);
+  virtual void CschedUeConfigReq (const struct CschedUeConfigReqParameters& params);
+  virtual void CschedLcConfigReq (const struct CschedLcConfigReqParameters& params);
+  virtual void CschedLcReleaseReq (const struct CschedLcReleaseReqParameters& params);
+  virtual void CschedUeReleaseReq (const struct CschedUeReleaseReqParameters& params);
+
+private:
+  CqaSchedulerMemberCschedSapProvider ();
+  CqaFfMacScheduler* m_scheduler;
+};
+
+CqaSchedulerMemberCschedSapProvider::CqaSchedulerMemberCschedSapProvider ()
+{
+}
+
+CqaSchedulerMemberCschedSapProvider::CqaSchedulerMemberCschedSapProvider (CqaFfMacScheduler* scheduler) : m_scheduler (scheduler)
+{
+}
+
+
+void
+CqaSchedulerMemberCschedSapProvider::CschedCellConfigReq (const struct CschedCellConfigReqParameters& params)
+{
+  m_scheduler->DoCschedCellConfigReq (params);
+}
+
+void
+CqaSchedulerMemberCschedSapProvider::CschedUeConfigReq (const struct CschedUeConfigReqParameters& params)
+{
+  m_scheduler->DoCschedUeConfigReq (params);
+}
+
+
+void
+CqaSchedulerMemberCschedSapProvider::CschedLcConfigReq (const struct CschedLcConfigReqParameters& params)
+{
+  m_scheduler->DoCschedLcConfigReq (params);
+}
+
+void
+CqaSchedulerMemberCschedSapProvider::CschedLcReleaseReq (const struct CschedLcReleaseReqParameters& params)
+{
+  m_scheduler->DoCschedLcReleaseReq (params);
+}
+
+void
+CqaSchedulerMemberCschedSapProvider::CschedUeReleaseReq (const struct CschedUeReleaseReqParameters& params)
+{
+  m_scheduler->DoCschedUeReleaseReq (params);
+}
+
+
+
+class CqaSchedulerMemberSchedSapProvider : public FfMacSchedSapProvider
+{
+public:
+  CqaSchedulerMemberSchedSapProvider (CqaFfMacScheduler* scheduler);
+
+  // inherited from FfMacSchedSapProvider
+  virtual void SchedDlRlcBufferReq (const struct SchedDlRlcBufferReqParameters& params);
+  virtual void SchedDlPagingBufferReq (const struct SchedDlPagingBufferReqParameters& params);
+  virtual void SchedDlMacBufferReq (const struct SchedDlMacBufferReqParameters& params);
+  virtual void SchedDlTriggerReq (const struct SchedDlTriggerReqParameters& params);
+  virtual void SchedDlRachInfoReq (const struct SchedDlRachInfoReqParameters& params);
+  virtual void SchedDlCqiInfoReq (const struct SchedDlCqiInfoReqParameters& params);
+  virtual void SchedUlTriggerReq (const struct SchedUlTriggerReqParameters& params);
+  virtual void SchedUlNoiseInterferenceReq (const struct SchedUlNoiseInterferenceReqParameters& params);
+  virtual void SchedUlSrInfoReq (const struct SchedUlSrInfoReqParameters& params);
+  virtual void SchedUlMacCtrlInfoReq (const struct SchedUlMacCtrlInfoReqParameters& params);
+  virtual void SchedUlCqiInfoReq (const struct SchedUlCqiInfoReqParameters& params);
+
+
+private:
+  CqaSchedulerMemberSchedSapProvider ();
+  CqaFfMacScheduler* m_scheduler;
+};
+
+
+
+CqaSchedulerMemberSchedSapProvider::CqaSchedulerMemberSchedSapProvider ()
+{
+}
+
+
+CqaSchedulerMemberSchedSapProvider::CqaSchedulerMemberSchedSapProvider (CqaFfMacScheduler* scheduler)
+  : m_scheduler (scheduler)
+{
+}
+
+void
+CqaSchedulerMemberSchedSapProvider::SchedDlRlcBufferReq (const struct SchedDlRlcBufferReqParameters& params)
+{
+  m_scheduler->DoSchedDlRlcBufferReq (params);
+}
+
+void
+CqaSchedulerMemberSchedSapProvider::SchedDlPagingBufferReq (const struct SchedDlPagingBufferReqParameters& params)
+{
+  m_scheduler->DoSchedDlPagingBufferReq (params);
+}
+
+void
+CqaSchedulerMemberSchedSapProvider::SchedDlMacBufferReq (const struct SchedDlMacBufferReqParameters& params)
+{
+  m_scheduler->DoSchedDlMacBufferReq (params);
+}
+
+void
+CqaSchedulerMemberSchedSapProvider::SchedDlTriggerReq (const struct SchedDlTriggerReqParameters& params)
+{
+  m_scheduler->DoSchedDlTriggerReq (params);
+}
+
+void
+CqaSchedulerMemberSchedSapProvider::SchedDlRachInfoReq (const struct SchedDlRachInfoReqParameters& params)
+{
+  m_scheduler->DoSchedDlRachInfoReq (params);
+}
+
+void
+CqaSchedulerMemberSchedSapProvider::SchedDlCqiInfoReq (const struct SchedDlCqiInfoReqParameters& params)
+{
+  m_scheduler->DoSchedDlCqiInfoReq (params);
+}
+
+void
+CqaSchedulerMemberSchedSapProvider::SchedUlTriggerReq (const struct SchedUlTriggerReqParameters& params)
+{
+  m_scheduler->DoSchedUlTriggerReq (params);
+}
+
+void
+CqaSchedulerMemberSchedSapProvider::SchedUlNoiseInterferenceReq (const struct SchedUlNoiseInterferenceReqParameters& params)
+{
+  m_scheduler->DoSchedUlNoiseInterferenceReq (params);
+}
+
+void
+CqaSchedulerMemberSchedSapProvider::SchedUlSrInfoReq (const struct SchedUlSrInfoReqParameters& params)
+{
+  m_scheduler->DoSchedUlSrInfoReq (params);
+}
+
+void
+CqaSchedulerMemberSchedSapProvider::SchedUlMacCtrlInfoReq (const struct SchedUlMacCtrlInfoReqParameters& params)
+{
+  m_scheduler->DoSchedUlMacCtrlInfoReq (params);
+}
+
+void
+CqaSchedulerMemberSchedSapProvider::SchedUlCqiInfoReq (const struct SchedUlCqiInfoReqParameters& params)
+{
+  m_scheduler->DoSchedUlCqiInfoReq (params);
+}
+
+
+
+
+
+CqaFfMacScheduler::CqaFfMacScheduler ()
+  :   m_cschedSapUser (0),
+    m_schedSapUser (0),
+    m_timeWindow (99.0),
+    m_nextRntiUl (0)
+{
+  m_amc = CreateObject <LteAmc> ();
+  m_cschedSapProvider = new CqaSchedulerMemberCschedSapProvider (this);
+  m_schedSapProvider = new CqaSchedulerMemberSchedSapProvider (this);
+}
+
+CqaFfMacScheduler::~CqaFfMacScheduler ()
+{
+  NS_LOG_FUNCTION (this);
+}
+
+void
+CqaFfMacScheduler::DoDispose ()
+{
+  NS_LOG_FUNCTION (this);
+  m_dlHarqProcessesDciBuffer.clear ();
+  m_dlHarqProcessesTimer.clear ();
+  m_dlHarqProcessesRlcPduListBuffer.clear ();
+  m_dlInfoListBuffered.clear ();
+  m_ulHarqCurrentProcessId.clear ();
+  m_ulHarqProcessesStatus.clear ();
+  m_ulHarqProcessesDciBuffer.clear ();
+  delete m_cschedSapProvider;
+  delete m_schedSapProvider;
+}
+
+TypeId
+CqaFfMacScheduler::GetTypeId (void)
+{
+  static TypeId tid = TypeId ("ns3::CqaFfMacScheduler")
+    .SetParent<FfMacScheduler> ()
+    .AddConstructor<CqaFfMacScheduler>()
+    .AddAttribute ("CqiTimerThreshold",
+                   "The number of TTIs a CQI is valid (default 1000 - 1 sec.)",
+                   UintegerValue (1000),
+                   MakeUintegerAccessor (&CqaFfMacScheduler::m_cqiTimersThreshold),
+                   MakeUintegerChecker<uint32_t> ())
+    .AddAttribute ("CqaMetric",
+                   "CqaFfMacScheduler metric type that can be: CqaFf, CqaPf",
+                   StringValue ("CqaFf"),
+                   MakeStringAccessor (&CqaFfMacScheduler::m_CqaMetric),
+                   MakeStringChecker ())
+    .AddAttribute ("HarqEnabled",
+                   "Activate/Deactivate the HARQ [by default is active].",
+                   BooleanValue (true),
+                   MakeBooleanAccessor (&CqaFfMacScheduler::m_harqOn),
+                   MakeBooleanChecker ())
+    .AddAttribute ("UlGrantMcs",
+                   "The MCS of the UL grant, must be [0..15] (default 0)",
+                   UintegerValue (0),
+                   MakeUintegerAccessor (&CqaFfMacScheduler::m_ulGrantMcs),
+                   MakeUintegerChecker<uint8_t> ())
+  ;
+  return tid;
+}
+
+
+
+void
+CqaFfMacScheduler::SetFfMacCschedSapUser (FfMacCschedSapUser* s)
+{
+  m_cschedSapUser = s;
+}
+
+void
+CqaFfMacScheduler::SetFfMacSchedSapUser (FfMacSchedSapUser* s)
+{
+  m_schedSapUser = s;
+}
+
+FfMacCschedSapProvider*
+CqaFfMacScheduler::GetFfMacCschedSapProvider ()
+{
+  return m_cschedSapProvider;
+}
+
+FfMacSchedSapProvider*
+CqaFfMacScheduler::GetFfMacSchedSapProvider ()
+{
+  return m_schedSapProvider;
+}
+
+void
+CqaFfMacScheduler::DoCschedCellConfigReq (const struct FfMacCschedSapProvider::CschedCellConfigReqParameters& params)
+{
+  NS_LOG_FUNCTION (this);
+  // Read the subset of parameters used
+  m_cschedCellConfig = params;
+  m_rachAllocationMap.resize (m_cschedCellConfig.m_ulBandwidth, 0);
+  FfMacCschedSapUser::CschedUeConfigCnfParameters cnf;
+  cnf.m_result = SUCCESS;
+  m_cschedSapUser->CschedUeConfigCnf (cnf);
+  return;
+}
+
+void
+CqaFfMacScheduler::DoCschedUeConfigReq (const struct FfMacCschedSapProvider::CschedUeConfigReqParameters& params)
+{
+  NS_LOG_FUNCTION (this << " RNTI " << params.m_rnti << " txMode " << (uint16_t)params.m_transmissionMode);
+  std::map <uint16_t,uint8_t>::iterator it = m_uesTxMode.find (params.m_rnti);
+  if (it == m_uesTxMode.end ())
+    {
+      m_uesTxMode.insert (std::pair <uint16_t, uint8_t> (params.m_rnti, params.m_transmissionMode));
+      // generate HARQ buffers
+      m_dlHarqCurrentProcessId.insert (std::pair <uint16_t,uint8_t > (params.m_rnti, 0));
+      DlHarqProcessesStatus_t dlHarqPrcStatus;
+      dlHarqPrcStatus.resize (8,0);
+      m_dlHarqProcessesStatus.insert (std::pair <uint16_t, DlHarqProcessesStatus_t> (params.m_rnti, dlHarqPrcStatus));
+      DlHarqProcessesTimer_t dlHarqProcessesTimer;
+      dlHarqProcessesTimer.resize (8,0);
+      m_dlHarqProcessesTimer.insert (std::pair <uint16_t, DlHarqProcessesTimer_t> (params.m_rnti, dlHarqProcessesTimer));
+      DlHarqProcessesDciBuffer_t dlHarqdci;
+      dlHarqdci.resize (8);
+      m_dlHarqProcessesDciBuffer.insert (std::pair <uint16_t, DlHarqProcessesDciBuffer_t> (params.m_rnti, dlHarqdci));
+      DlHarqRlcPduListBuffer_t dlHarqRlcPdu;
+      dlHarqRlcPdu.resize (2);
+      dlHarqRlcPdu.at (0).resize (8);
+      dlHarqRlcPdu.at (1).resize (8);
+      m_dlHarqProcessesRlcPduListBuffer.insert (std::pair <uint16_t, DlHarqRlcPduListBuffer_t> (params.m_rnti, dlHarqRlcPdu));
+      m_ulHarqCurrentProcessId.insert (std::pair <uint16_t,uint8_t > (params.m_rnti, 0));
+      UlHarqProcessesStatus_t ulHarqPrcStatus;
+      ulHarqPrcStatus.resize (8,0);
+      m_ulHarqProcessesStatus.insert (std::pair <uint16_t, UlHarqProcessesStatus_t> (params.m_rnti, ulHarqPrcStatus));
+      UlHarqProcessesDciBuffer_t ulHarqdci;
+      ulHarqdci.resize (8);
+      m_ulHarqProcessesDciBuffer.insert (std::pair <uint16_t, UlHarqProcessesDciBuffer_t> (params.m_rnti, ulHarqdci));
+    }
+  else
+    {
+      (*it).second = params.m_transmissionMode;
+    }
+  return;
+}
+
+void
+CqaFfMacScheduler::DoCschedLcConfigReq (const struct FfMacCschedSapProvider::CschedLcConfigReqParameters& params)
+{
+  NS_LOG_FUNCTION (this << " New LC, rnti: "  << params.m_rnti);
+
+  NS_LOG_FUNCTION ("LC configuration. Number of LCs:"<<params.m_logicalChannelConfigList.size ());
+
+  // m_reconfigureFlat indicates if this is a reconfiguration or new UE is added, table  4.1.5 in LTE MAC scheduler specification
+  if (params.m_reconfigureFlag)
+    {
+      std::vector <struct LogicalChannelConfigListElement_s>::const_iterator lcit;
+
+      for(lcit = params.m_logicalChannelConfigList.begin (); lcit!= params.m_logicalChannelConfigList.end (); lcit++)
+        {
+          LteFlowId_t flowid = LteFlowId_t (params.m_rnti,lcit->m_logicalChannelIdentity);
+
+          if (m_ueLogicalChannelsConfigList.find (flowid) == m_ueLogicalChannelsConfigList.end ())
+            {
+              NS_LOG_ERROR ("UE logical channels can not be reconfigured because it was not configured before.");
+            }
+          else
+            {
+              m_ueLogicalChannelsConfigList.find (flowid)->second = *lcit;
+            }
+        }
+
+    }    // else new UE is added
+  else
+    {
+      std::vector <struct LogicalChannelConfigListElement_s>::const_iterator lcit;
+
+      for (lcit = params.m_logicalChannelConfigList.begin (); lcit != params.m_logicalChannelConfigList.end (); lcit++)
+        {
+          LteFlowId_t flowId = LteFlowId_t (params.m_rnti,lcit->m_logicalChannelIdentity);
+          m_ueLogicalChannelsConfigList.insert (std::pair<LteFlowId_t, LogicalChannelConfigListElement_s>(flowId,*lcit));
+        }
+    }
+
+
+  std::map <uint16_t, CqasFlowPerf_t>::iterator it;
+
+  for (uint16_t i = 0; i < params.m_logicalChannelConfigList.size (); i++)
+    {
+      it = m_flowStatsDl.find (params.m_rnti);
+
+      if (it == m_flowStatsDl.end ())
+        {
+          double tbrDlInBytes = params.m_logicalChannelConfigList.at (i).m_eRabGuaranteedBitrateDl / 8;   // byte/s
+          double tbrUlInBytes = params.m_logicalChannelConfigList.at (i).m_eRabGuaranteedBitrateUl / 8;   // byte/s
+
+          CqasFlowPerf_t flowStatsDl;
+          flowStatsDl.flowStart = Simulator::Now ();
+          flowStatsDl.totalBytesTransmitted = 0;
+          flowStatsDl.lastTtiBytesTransmitted = 0;
+          flowStatsDl.lastAveragedThroughput = 1;
+          flowStatsDl.secondLastAveragedThroughput = 1;
+          flowStatsDl.targetThroughput = tbrDlInBytes;
+          m_flowStatsDl.insert (std::pair<uint16_t, CqasFlowPerf_t> (params.m_rnti, flowStatsDl));
+          CqasFlowPerf_t flowStatsUl;
+          flowStatsUl.flowStart = Simulator::Now ();
+          flowStatsUl.totalBytesTransmitted = 0;
+          flowStatsUl.lastTtiBytesTransmitted = 0;
+          flowStatsUl.lastAveragedThroughput = 1;
+          flowStatsUl.secondLastAveragedThroughput = 1;
+          flowStatsUl.targetThroughput = tbrUlInBytes;
+          m_flowStatsUl.insert (std::pair<uint16_t, CqasFlowPerf_t> (params.m_rnti, flowStatsUl));
+        }
+      else
+        {
+          // update GBR from UeManager::SetupDataRadioBearer ()
+          double tbrDlInBytes = params.m_logicalChannelConfigList.at (i).m_eRabGuaranteedBitrateDl / 8;   // byte/s
+          double tbrUlInBytes = params.m_logicalChannelConfigList.at (i).m_eRabGuaranteedBitrateUl / 8;   // byte/s
+          m_flowStatsDl[(*it).first].targetThroughput = tbrDlInBytes;
+          m_flowStatsUl[(*it).first].targetThroughput = tbrUlInBytes;
+
+        }
+    }
+
+  return;
+}
+
+void
+CqaFfMacScheduler::DoCschedLcReleaseReq (const struct FfMacCschedSapProvider::CschedLcReleaseReqParameters& params)
+{
+  NS_LOG_FUNCTION (this);
+  std::vector <uint8_t>::const_iterator it;
+
+  for (it = params.m_logicalChannelIdentity.begin (); it != params.m_logicalChannelIdentity.end (); it++)
+    {
+      LteFlowId_t flowId = LteFlowId_t (params.m_rnti, *it);
+
+      // find the logical channel with the same Logical Channel Identity in the current list, release it
+      if (m_ueLogicalChannelsConfigList.find (flowId)!= m_ueLogicalChannelsConfigList.end ())
+        {
+          m_ueLogicalChannelsConfigList.erase (flowId);
+        }
+      else
+        {
+          NS_FATAL_ERROR ("Logical channels cannot be released because it can not be found in the list of active LCs");
+        }
+    }
+	
+  for (uint16_t i = 0; i < params.m_logicalChannelIdentity.size (); i++)
+    {
+      std::map<LteFlowId_t, FfMacSchedSapProvider::SchedDlRlcBufferReqParameters>::iterator it = m_rlcBufferReq.begin ();
+      std::map<LteFlowId_t, FfMacSchedSapProvider::SchedDlRlcBufferReqParameters>::iterator temp;
+      while (it!=m_rlcBufferReq.end ())
+        {
+          if (((*it).first.m_rnti == params.m_rnti) && ((*it).first.m_lcId == params.m_logicalChannelIdentity.at (i)))
+            {
+              temp = it;
+              it++;
+              m_rlcBufferReq.erase (temp);
+            }
+          else
+            {
+              it++;
+            }
+        }
+    }
+  return;
+}
+
+void
+CqaFfMacScheduler::DoCschedUeReleaseReq (const struct FfMacCschedSapProvider::CschedUeReleaseReqParameters& params)
+{
+  NS_LOG_FUNCTION (this);
+
+  for (int i=0; i < MAX_LC_LIST; i++)
+    {
+      LteFlowId_t flowId = LteFlowId_t (params.m_rnti,i);
+      // find the logical channel with the same Logical Channel Identity in the current list, release it
+      if (m_ueLogicalChannelsConfigList.find (flowId)!= m_ueLogicalChannelsConfigList.end ())
+        {
+          m_ueLogicalChannelsConfigList.erase (flowId);
+        }
+    }
+
+  m_uesTxMode.erase (params.m_rnti);
+  m_dlHarqCurrentProcessId.erase (params.m_rnti);
+  m_dlHarqProcessesStatus.erase  (params.m_rnti);
+  m_dlHarqProcessesTimer.erase (params.m_rnti);
+  m_dlHarqProcessesDciBuffer.erase  (params.m_rnti);
+  m_dlHarqProcessesRlcPduListBuffer.erase  (params.m_rnti);
+  m_ulHarqCurrentProcessId.erase  (params.m_rnti);
+  m_ulHarqProcessesStatus.erase  (params.m_rnti);
+  m_ulHarqProcessesDciBuffer.erase  (params.m_rnti);
+  m_flowStatsDl.erase  (params.m_rnti);
+  m_flowStatsUl.erase  (params.m_rnti);
+  m_ceBsrRxed.erase (params.m_rnti);
+  std::map<LteFlowId_t, FfMacSchedSapProvider::SchedDlRlcBufferReqParameters>::iterator it = m_rlcBufferReq.begin ();
+  std::map<LteFlowId_t, FfMacSchedSapProvider::SchedDlRlcBufferReqParameters>::iterator temp;
+  while (it!=m_rlcBufferReq.end ())
+    {
+      if ((*it).first.m_rnti == params.m_rnti)
+        {
+          temp = it;
+          it++;
+          m_rlcBufferReq.erase (temp);
+        }
+      else
+        {
+          it++;
+        }
+    }
+  if (m_nextRntiUl == params.m_rnti)
+    {
+      m_nextRntiUl = 0;
+    }
+
+  return;
+}
+
+
+void
+CqaFfMacScheduler::DoSchedDlRlcBufferReq (const struct FfMacSchedSapProvider::SchedDlRlcBufferReqParameters& params)
+{
+  NS_LOG_FUNCTION (this << params.m_rnti << (uint32_t) params.m_logicalChannelIdentity);
+  // API generated by RLC for updating RLC parameters on a LC (tx and retx queues)
+
+  std::map <LteFlowId_t, FfMacSchedSapProvider::SchedDlRlcBufferReqParameters>::iterator it;
+
+  LteFlowId_t flow (params.m_rnti, params.m_logicalChannelIdentity);
+
+  it =  m_rlcBufferReq.find (flow);
+
+  if (it == m_rlcBufferReq.end ())
+    {
+      m_rlcBufferReq.insert (std::pair <LteFlowId_t, FfMacSchedSapProvider::SchedDlRlcBufferReqParameters> (flow, params));
+    }
+  else
+    {
+      (*it).second = params;
+    }
+
+  return;
+}
+
+void
+CqaFfMacScheduler::DoSchedDlPagingBufferReq (const struct FfMacSchedSapProvider::SchedDlPagingBufferReqParameters& params)
+{
+  NS_LOG_FUNCTION (this);
+  NS_FATAL_ERROR ("method not implemented");
+  return;
+}
+
+void
+CqaFfMacScheduler::DoSchedDlMacBufferReq (const struct FfMacSchedSapProvider::SchedDlMacBufferReqParameters& params)
+{
+  NS_LOG_FUNCTION (this);
+  NS_FATAL_ERROR ("method not implemented");
+  return;
+}
+
+int
+CqaFfMacScheduler::GetRbgSize (int dlbandwidth)
+{
+  for (int i = 0; i < 4; i++)
+    {
+      if (dlbandwidth < CqaType0AllocationRbg[i])
+        {
+          return (i + 1);
+        }
+    }
+
+  return (-1);
+}
+
+
+int
+CqaFfMacScheduler::LcActivePerFlow (uint16_t rnti)
+{
+  std::map <LteFlowId_t, FfMacSchedSapProvider::SchedDlRlcBufferReqParameters>::iterator it;
+  int lcActive = 0;
+  for (it = m_rlcBufferReq.begin (); it != m_rlcBufferReq.end (); it++)
+    {
+      if (((*it).first.m_rnti == rnti) && (((*it).second.m_rlcTransmissionQueueSize > 0)
+                                           || ((*it).second.m_rlcRetransmissionQueueSize > 0)
+                                           || ((*it).second.m_rlcStatusPduSize > 0) ))
+        {
+          lcActive++;
+        }
+      if ((*it).first.m_rnti > rnti)
+        {
+          break;
+        }
+    }
+  return (lcActive);
+
+}
+
+
+uint8_t
+CqaFfMacScheduler::HarqProcessAvailability (uint16_t rnti)
+{
+  NS_LOG_FUNCTION (this << rnti);
+
+  std::map <uint16_t, uint8_t>::iterator it = m_dlHarqCurrentProcessId.find (rnti);
+  if (it == m_dlHarqCurrentProcessId.end ())
+    {
+      NS_FATAL_ERROR ("No Process Id found for this RNTI " << rnti);
+    }
+  std::map <uint16_t, DlHarqProcessesStatus_t>::iterator itStat = m_dlHarqProcessesStatus.find (rnti);
+  if (itStat == m_dlHarqProcessesStatus.end ())
+    {
+      NS_FATAL_ERROR ("No Process Id Statusfound for this RNTI " << rnti);
+    }
+  uint8_t i = (*it).second;
+  do
+    {
+      i = (i + 1) % HARQ_PROC_NUM;
+    }
+  while ( ((*itStat).second.at (i) != 0)&&(i != (*it).second));
+  if ((*itStat).second.at (i) == 0)
+    {
+      return (true);
+    }
+  else
+    {
+      return (false); // return a not valid harq proc id
+    }
+}
+
+
+
+uint8_t
+CqaFfMacScheduler::UpdateHarqProcessId (uint16_t rnti)
+{
+  NS_LOG_FUNCTION (this << rnti);
+
+  if (m_harqOn == false)
+    {
+      return (0);
+    }
+
+
+  std::map <uint16_t, uint8_t>::iterator it = m_dlHarqCurrentProcessId.find (rnti);
+  if (it == m_dlHarqCurrentProcessId.end ())
+    {
+      NS_FATAL_ERROR ("No Process Id found for this RNTI " << rnti);
+    }
+  std::map <uint16_t, DlHarqProcessesStatus_t>::iterator itStat = m_dlHarqProcessesStatus.find (rnti);
+  if (itStat == m_dlHarqProcessesStatus.end ())
+    {
+      NS_FATAL_ERROR ("No Process Id Statusfound for this RNTI " << rnti);
+    }
+  uint8_t i = (*it).second;
+  do
+    {
+      i = (i + 1) % HARQ_PROC_NUM;
+    }
+  while ( ((*itStat).second.at (i) != 0)&&(i != (*it).second));
+  if ((*itStat).second.at (i) == 0)
+    {
+      (*it).second = i;
+      (*itStat).second.at (i) = 1;
+    }
+  else
+    {
+      NS_FATAL_ERROR ("No HARQ process available for RNTI " << rnti << " check before update with HarqProcessAvailability");
+    }
+
+  return ((*it).second);
+}
+
+
+void
+CqaFfMacScheduler::RefreshHarqProcesses ()
+{
+  NS_LOG_FUNCTION (this);
+
+  std::map <uint16_t, DlHarqProcessesTimer_t>::iterator itTimers;
+  for (itTimers = m_dlHarqProcessesTimer.begin (); itTimers != m_dlHarqProcessesTimer.end (); itTimers++)
+    {
+      for (uint16_t i = 0; i < HARQ_PROC_NUM; i++)
+        {
+          if ((*itTimers).second.at (i) == HARQ_DL_TIMEOUT)
+            {
+              // reset HARQ process
+
+              NS_LOG_DEBUG (this << " Reset HARQ proc " << i << " for RNTI " << (*itTimers).first);
+              std::map <uint16_t, DlHarqProcessesStatus_t>::iterator itStat = m_dlHarqProcessesStatus.find ((*itTimers).first);
+              if (itStat == m_dlHarqProcessesStatus.end ())
+                {
+                  NS_FATAL_ERROR ("No Process Id Status found for this RNTI " << (*itTimers).first);
+                }
+              (*itStat).second.at (i) = 0;
+              (*itTimers).second.at (i) = 0;
+            }
+          else
+            {
+              (*itTimers).second.at (i)++;
+            }
+        }
+    }
+
+}
+
+
+void
+CqaFfMacScheduler::DoSchedDlTriggerReq (const struct FfMacSchedSapProvider::SchedDlTriggerReqParameters& params)
+{
+  NS_LOG_FUNCTION (this << " Frame no. " << (params.m_sfnSf >> 4) << " subframe no. " << (0xF & params.m_sfnSf));
+  // API generated by RLC for triggering the scheduling of a DL subframe
+  // evaluate the relative channel quality indicator for each UE per each RBG
+  // (since we are using allocation type 0 the small unit of allocation is RBG)
+  // Resource allocation type 0 (see sec 7.1.6.1 of 36.213)
+
+  RefreshDlCqiMaps ();
+
+  int rbgSize = GetRbgSize (m_cschedCellConfig.m_dlBandwidth);
+  int numberOfRBGs = m_cschedCellConfig.m_dlBandwidth / rbgSize;
+  std::map <uint16_t, std::multimap <uint8_t, qos_rb_and_CQI_assigned_to_lc> > allocationMapPerRntiPerLCId;
+  std::map <uint16_t, std::multimap <uint8_t, qos_rb_and_CQI_assigned_to_lc> >::iterator itMap;
+  allocationMapPerRntiPerLCId.clear ();
+  bool(*key_function_pointer_groups)(int,int) = CqaGroupDescComparator;
+  t_map_HOLgroupToUEs map_GBRHOLgroupToUE (key_function_pointer_groups);
+  t_map_HOLgroupToUEs map_nonGBRHOLgroupToUE (key_function_pointer_groups);
+  int grouping_parameter = 1000;
+  double tolerance = 1.1;
+  std::map<LteFlowId_t,int> UEtoHOL;
+  std::vector <bool> rbgMap;  // global RBGs map
+  uint16_t rbgAllocatedNum = 0;
+  std::set <uint16_t> rntiAllocated;
+  rbgMap.resize (m_cschedCellConfig.m_dlBandwidth / rbgSize, false);
+  FfMacSchedSapUser::SchedDlConfigIndParameters ret;
+
+  //   update UL HARQ proc id
+  std::map <uint16_t, uint8_t>::iterator itProcId;
+  for (itProcId = m_ulHarqCurrentProcessId.begin (); itProcId != m_ulHarqCurrentProcessId.end (); itProcId++)
+    {
+      (*itProcId).second = ((*itProcId).second + 1) % HARQ_PROC_NUM;
+    }
+
+
+  // RACH Allocation
+  m_rachAllocationMap.resize (m_cschedCellConfig.m_ulBandwidth, 0);
+  uint16_t rbStart = 0;
+  std::vector <struct RachListElement_s>::iterator itRach;
+  for (itRach = m_rachList.begin (); itRach != m_rachList.end (); itRach++)
+    {
+      NS_ASSERT_MSG (m_amc->GetTbSizeFromMcs (m_ulGrantMcs, m_cschedCellConfig.m_ulBandwidth) > (*itRach).m_estimatedSize, " Default UL Grant MCS does not allow to send RACH messages");
+      BuildRarListElement_s newRar;
+      newRar.m_rnti = (*itRach).m_rnti;
+      // DL-RACH Allocation
+      // Ideal: no needs of configuring m_dci
+      // UL-RACH Allocation
+      newRar.m_grant.m_rnti = newRar.m_rnti;
+      newRar.m_grant.m_mcs = m_ulGrantMcs;
+      uint16_t rbLen = 1;
+      uint16_t tbSizeBits = 0;
+      // find lowest TB size that fits UL grant estimated size
+      while ((tbSizeBits < (*itRach).m_estimatedSize) && (rbStart + rbLen < m_cschedCellConfig.m_ulBandwidth))
+        {
+          rbLen++;
+          tbSizeBits = m_amc->GetTbSizeFromMcs (m_ulGrantMcs, rbLen);
+        }
+      if (tbSizeBits < (*itRach).m_estimatedSize)
+        {
+          // no more allocation space: finish allocation
+          break;
+        }
+      newRar.m_grant.m_rbStart = rbStart;
+      newRar.m_grant.m_rbLen = rbLen;
+      newRar.m_grant.m_tbSize = tbSizeBits / 8;
+      newRar.m_grant.m_hopping = false;
+      newRar.m_grant.m_tpc = 0;
+      newRar.m_grant.m_cqiRequest = false;
+      newRar.m_grant.m_ulDelay = false;
+      NS_LOG_INFO (this << " UL grant allocated to RNTI " << (*itRach).m_rnti << " rbStart " << rbStart << " rbLen " << rbLen << " MCS " << m_ulGrantMcs << " tbSize " << newRar.m_grant.m_tbSize);
+      for (uint16_t i = rbStart; i < rbStart + rbLen; i++)
+        {
+          m_rachAllocationMap.at (i) = (*itRach).m_rnti;
+        }
+      rbStart = rbStart + rbLen;
+      
+      if (m_harqOn == true)
+        {
+          // generate UL-DCI for HARQ retransmissions
+          UlDciListElement_s uldci;
+          uldci.m_rnti = newRar.m_rnti;
+          uldci.m_rbLen = rbLen;
+          uldci.m_rbStart = rbStart;
+          uldci.m_mcs = m_ulGrantMcs;
+          uldci.m_tbSize = tbSizeBits / 8;
+          uldci.m_ndi = 1;
+          uldci.m_cceIndex = 0;
+          uldci.m_aggrLevel = 1;
+          uldci.m_ueTxAntennaSelection = 3; // antenna selection OFF
+          uldci.m_hopping = false;
+          uldci.m_n2Dmrs = 0;
+          uldci.m_tpc = 0; // no power control
+          uldci.m_cqiRequest = false; // only period CQI at this stage
+          uldci.m_ulIndex = 0; // TDD parameter
+          uldci.m_dai = 1; // TDD parameter
+          uldci.m_freqHopping = 0;
+          uldci.m_pdcchPowerOffset = 0; // not used
+
+          uint8_t harqId = 0;
+          std::map <uint16_t, uint8_t>::iterator itProcId;
+          itProcId = m_ulHarqCurrentProcessId.find (uldci.m_rnti);
+          if (itProcId == m_ulHarqCurrentProcessId.end ())
+            {
+              NS_FATAL_ERROR ("No info find in HARQ buffer for UE " << uldci.m_rnti);
+            }
+          harqId = (*itProcId).second;
+          std::map <uint16_t, UlHarqProcessesDciBuffer_t>::iterator itDci = m_ulHarqProcessesDciBuffer.find (uldci.m_rnti);
+          if (itDci == m_ulHarqProcessesDciBuffer.end ())
+            {
+              NS_FATAL_ERROR ("Unable to find RNTI entry in UL DCI HARQ buffer for RNTI " << uldci.m_rnti);
+            }
+          (*itDci).second.at (harqId) = uldci;
+        }
+      
+      ret.m_buildRarList.push_back (newRar);
+    }
+  m_rachList.clear ();
+
+
+  // Process DL HARQ feedback
+  RefreshHarqProcesses ();
+  // retrieve past HARQ retx buffered
+  if (m_dlInfoListBuffered.size () > 0)
+    {
+      if (params.m_dlInfoList.size () > 0)
+        {
+          NS_LOG_INFO (this << " Received DL-HARQ feedback");
+          m_dlInfoListBuffered.insert (m_dlInfoListBuffered.end (), params.m_dlInfoList.begin (), params.m_dlInfoList.end ());
+        }
+    }
+  else
+    {
+      if (params.m_dlInfoList.size () > 0)
+        {
+          m_dlInfoListBuffered = params.m_dlInfoList;
+        }
+    }
+  if (m_harqOn == false)
+    {
+      // Ignore HARQ feedback
+      m_dlInfoListBuffered.clear ();
+    }
+  std::vector <struct DlInfoListElement_s> dlInfoListUntxed;
+  for (uint16_t i = 0; i < m_dlInfoListBuffered.size (); i++)
+    {
+      std::set <uint16_t>::iterator itRnti = rntiAllocated.find (m_dlInfoListBuffered.at (i).m_rnti);
+      if (itRnti != rntiAllocated.end ())
+        {
+          // RNTI already allocated for retx
+          continue;
+        }
+      uint8_t nLayers = m_dlInfoListBuffered.at (i).m_harqStatus.size ();
+      std::vector <bool> retx;
+      NS_LOG_INFO (this << " Processing DLHARQ feedback");
+      if (nLayers == 1)
+        {
+          retx.push_back (m_dlInfoListBuffered.at (i).m_harqStatus.at (0) == DlInfoListElement_s::NACK);
+          retx.push_back (false);
+        }
+      else
+        {
+          retx.push_back (m_dlInfoListBuffered.at (i).m_harqStatus.at (0) == DlInfoListElement_s::NACK);
+          retx.push_back (m_dlInfoListBuffered.at (i).m_harqStatus.at (1) == DlInfoListElement_s::NACK);
+        }
+      if (retx.at (0) || retx.at (1))
+        {
+          // retrieve HARQ process information
+          uint16_t rnti = m_dlInfoListBuffered.at (i).m_rnti;
+          uint8_t harqId = m_dlInfoListBuffered.at (i).m_harqProcessId;
+          NS_LOG_INFO (this << " HARQ retx RNTI " << rnti << " harqId " << (uint16_t)harqId);
+          std::map <uint16_t, DlHarqProcessesDciBuffer_t>::iterator itHarq = m_dlHarqProcessesDciBuffer.find (rnti);
+          if (itHarq == m_dlHarqProcessesDciBuffer.end ())
+            {
+              NS_FATAL_ERROR ("No info find in HARQ buffer for UE " << rnti);
+            }
+
+          DlDciListElement_s dci = (*itHarq).second.at (harqId);
+          int rv = 0;
+          if (dci.m_rv.size () == 1)
+            {
+              rv = dci.m_rv.at (0);
+            }
+          else
+            {
+              rv = (dci.m_rv.at (0) > dci.m_rv.at (1) ? dci.m_rv.at (0) : dci.m_rv.at (1));
+            }
+
+          if (rv == 3)
+            {
+              // maximum number of retx reached -> drop process
+              NS_LOG_INFO ("Maximum number of retransmissions reached -> drop process");
+              std::map <uint16_t, DlHarqProcessesStatus_t>::iterator it = m_dlHarqProcessesStatus.find (rnti);
+              if (it == m_dlHarqProcessesStatus.end ())
+                {
+                  NS_LOG_ERROR ("No info find in HARQ buffer for UE (might change eNB) " << m_dlInfoListBuffered.at (i).m_rnti);
+                }
+              (*it).second.at (harqId) = 0;
+              std::map <uint16_t, DlHarqRlcPduListBuffer_t>::iterator itRlcPdu =  m_dlHarqProcessesRlcPduListBuffer.find (rnti);
+              if (itRlcPdu == m_dlHarqProcessesRlcPduListBuffer.end ())
+                {
+                  NS_FATAL_ERROR ("Unable to find RlcPdcList in HARQ buffer for RNTI " << m_dlInfoListBuffered.at (i).m_rnti);
+                }
+              for (uint16_t k = 0; k < (*itRlcPdu).second.size (); k++)
+                {
+                  (*itRlcPdu).second.at (k).at (harqId).clear ();
+                }
+              continue;
+            }
+          // check the feasibility of retransmitting on the same RBGs
+          // translate the DCI to Spectrum framework
+          std::vector <int> dciRbg;
+          uint32_t mask = 0x1;
+          NS_LOG_INFO ("Original RBGs " << dci.m_rbBitmap << " rnti " << dci.m_rnti);
+          for (int j = 0; j < 32; j++)
+            {
+              if (((dci.m_rbBitmap & mask) >> j) == 1)
+                {
+                  dciRbg.push_back (j);
+                  NS_LOG_INFO ("\t" << j);
+                }
+              mask = (mask << 1);
+            }
+          bool free = true;
+          for (uint8_t j = 0; j < dciRbg.size (); j++)
+            {
+              if (rbgMap.at (dciRbg.at (j)) == true)
+                {
+                  free = false;
+                  break;
+                }
+            }
+          if (free)
+            {
+              // use the same RBGs for the retx
+              // reserve RBGs
+              for (uint8_t j = 0; j < dciRbg.size (); j++)
+                {
+                  rbgMap.at (dciRbg.at (j)) = true;
+                  NS_LOG_INFO ("RBG " << dciRbg.at (j) << " assigned");
+                  rbgAllocatedNum++;
+                }
+
+              NS_LOG_INFO (this << " Send retx in the same RBGs");
+            }
+          else
+            {
+              // find RBGs for sending HARQ retx
+              uint8_t j = 0;
+              uint8_t rbgId = (dciRbg.at (dciRbg.size () - 1) + 1) % numberOfRBGs;
+              uint8_t startRbg = dciRbg.at (dciRbg.size () - 1);
+              std::vector <bool> rbgMapCopy = rbgMap;
+              while ((j < dciRbg.size ())&&(startRbg != rbgId))
+                {
+                  if (rbgMapCopy.at (rbgId) == false)
+                    {
+                      rbgMapCopy.at (rbgId) = true;
+                      dciRbg.at (j) = rbgId;
+                      j++;
+                    }
+                  rbgId++;
+                }
+              if (j == dciRbg.size ())
+                {
+                  // find new RBGs -> update DCI map
+                  uint32_t rbgMask = 0;
+                  for (uint16_t k = 0; k < dciRbg.size (); k++)
+                    {
+                      rbgMask = rbgMask + (0x1 << dciRbg.at (k));
+                      rbgAllocatedNum++;
+                    }
+                  dci.m_rbBitmap = rbgMask;
+                  rbgMap = rbgMapCopy;
+                  NS_LOG_INFO (this << " Move retx in RBGs " << dciRbg.size ());
+                }
+              else
+                {
+                  // HARQ retx cannot be performed on this TTI -> store it
+                  dlInfoListUntxed.push_back (params.m_dlInfoList.at (i));
+                  NS_LOG_INFO (this << " No resource for this retx -> buffer it");
+                }
+            }
+          // retrieve RLC PDU list for retx TBsize and update DCI
+          BuildDataListElement_s newEl;
+          std::map <uint16_t, DlHarqRlcPduListBuffer_t>::iterator itRlcPdu =  m_dlHarqProcessesRlcPduListBuffer.find (rnti);
+          if (itRlcPdu == m_dlHarqProcessesRlcPduListBuffer.end ())
+            {
+              NS_FATAL_ERROR ("Unable to find RlcPdcList in HARQ buffer for RNTI " << rnti);
+            }
+          for (uint8_t j = 0; j < nLayers; j++)
+            {
+              if (retx.at (j))
+                {
+                  if (j >= dci.m_ndi.size ())
+                    {
+                      // for avoiding errors in MIMO transient phases
+                      dci.m_ndi.push_back (0);
+                      dci.m_rv.push_back (0);
+                      dci.m_mcs.push_back (0);
+                      dci.m_tbsSize.push_back (0);
+                      NS_LOG_INFO (this << " layer " << (uint16_t)j << " no txed (MIMO transition)");
+                    }
+                  else
+                    {
+                      dci.m_ndi.at (j) = 0;
+                      dci.m_rv.at (j)++;
+                      (*itHarq).second.at (harqId).m_rv.at (j)++;
+                      NS_LOG_INFO (this << " layer " << (uint16_t)j << " RV " << (uint16_t)dci.m_rv.at (j));
+                    }
+                }
+              else
+                {
+                  // empty TB of layer j
+                  dci.m_ndi.at (j) = 0;
+                  dci.m_rv.at (j) = 0;
+                  dci.m_mcs.at (j) = 0;
+                  dci.m_tbsSize.at (j) = 0;
+                  NS_LOG_INFO (this << " layer " << (uint16_t)j << " no retx");
+                }
+            }
+          for (uint16_t k = 0; k < (*itRlcPdu).second.at (0).at (dci.m_harqProcess).size (); k++)
+            {
+              std::vector <struct RlcPduListElement_s> rlcPduListPerLc;
+              for (uint8_t j = 0; j < nLayers; j++)
+                {
+                  if (retx.at (j))
+                    {
+                      if (j < dci.m_ndi.size ())
+                        {
+                          rlcPduListPerLc.push_back ((*itRlcPdu).second.at (j).at (dci.m_harqProcess).at (k));
+                        }
+                    }
+                }
+
+              if (rlcPduListPerLc.size () > 0)
+                {
+                  newEl.m_rlcPduList.push_back (rlcPduListPerLc);
+                }
+            }
+          newEl.m_rnti = rnti;
+          newEl.m_dci = dci;
+          (*itHarq).second.at (harqId).m_rv = dci.m_rv;
+          // refresh timer
+          std::map <uint16_t, DlHarqProcessesTimer_t>::iterator itHarqTimer = m_dlHarqProcessesTimer.find (rnti);
+          if (itHarqTimer== m_dlHarqProcessesTimer.end ())
+            {
+              NS_FATAL_ERROR ("Unable to find HARQ timer for RNTI " << (uint16_t)rnti);
+            }
+          (*itHarqTimer).second.at (harqId) = 0;
+          ret.m_buildDataList.push_back (newEl);
+          rntiAllocated.insert (rnti);
+        }
+      else
+        {
+          // update HARQ process status
+          NS_LOG_INFO (this << " HARQ received ACK for UE " << m_dlInfoListBuffered.at (i).m_rnti);
+          std::map <uint16_t, DlHarqProcessesStatus_t>::iterator it = m_dlHarqProcessesStatus.find (m_dlInfoListBuffered.at (i).m_rnti);
+          if (it == m_dlHarqProcessesStatus.end ())
+            {
+              NS_FATAL_ERROR ("No info find in HARQ buffer for UE " << m_dlInfoListBuffered.at (i).m_rnti);
+            }
+          (*it).second.at (m_dlInfoListBuffered.at (i).m_harqProcessId) = 0;
+          std::map <uint16_t, DlHarqRlcPduListBuffer_t>::iterator itRlcPdu =  m_dlHarqProcessesRlcPduListBuffer.find (m_dlInfoListBuffered.at (i).m_rnti);
+          if (itRlcPdu == m_dlHarqProcessesRlcPduListBuffer.end ())
+            {
+              NS_FATAL_ERROR ("Unable to find RlcPdcList in HARQ buffer for RNTI " << m_dlInfoListBuffered.at (i).m_rnti);
+            }
+          for (uint16_t k = 0; k < (*itRlcPdu).second.size (); k++)
+            {
+              (*itRlcPdu).second.at (k).at (m_dlInfoListBuffered.at (i).m_harqProcessId).clear ();
+            }
+        }
+    }
+  m_dlInfoListBuffered.clear ();
+  m_dlInfoListBuffered = dlInfoListUntxed;
+	
+	
+  std::map <LteFlowId_t,struct LogicalChannelConfigListElement_s>::iterator itLogicalChannels;
+	
+  for (itLogicalChannels = m_ueLogicalChannelsConfigList.begin (); itLogicalChannels != m_ueLogicalChannelsConfigList.end (); itLogicalChannels++)
+    {
+      std::set <uint16_t>::iterator itRnti = rntiAllocated.find (itLogicalChannels->first.m_rnti);
+      if ((itRnti != rntiAllocated.end ())||(!HarqProcessAvailability (itLogicalChannels->first.m_rnti)))
+        {
+          // UE already allocated for HARQ or without HARQ process available -> drop it
+          if (itRnti != rntiAllocated.end ())
+            {
+              NS_LOG_DEBUG (this << " RNTI discared for HARQ tx" << (uint16_t)(itLogicalChannels->first.m_rnti));
+            }
+          if (!HarqProcessAvailability (itLogicalChannels->first.m_rnti))
+            {
+              NS_LOG_DEBUG (this << " RNTI discared for HARQ id" << (uint16_t)(itLogicalChannels->first.m_rnti));
+            }
+          continue;
+        }
+
+
+      std::map <LteFlowId_t, FfMacSchedSapProvider::SchedDlRlcBufferReqParameters>::iterator itRlcBufferReq = m_rlcBufferReq.find (itLogicalChannels->first);
+      if (itRlcBufferReq==m_rlcBufferReq.end ())
+        continue;
+
+      int group = -1;
+      int delay = 0;
+
+      if (itRlcBufferReq->second.m_rlcRetransmissionQueueSize > 0)
+        {
+          delay = itRlcBufferReq->second.m_rlcRetransmissionHolDelay;
+          group = delay/grouping_parameter;
+        }
+      else if  (itRlcBufferReq->second.m_rlcTransmissionQueueSize > 0)
+        {
+          delay = itRlcBufferReq->second.m_rlcTransmissionQueueHolDelay;
+          group = delay/grouping_parameter;
+        }
+      else
+        {
+          continue;
+        }
+
+      UEtoHOL.insert (std::pair<LteFlowId_t,int>(itLogicalChannels->first,delay));
+
+      if (itLogicalChannels->second.m_qosBearerType == itLogicalChannels->second.QBT_NON_GBR )
+        {
+          if (map_nonGBRHOLgroupToUE.count (group)==0)
+            {
+              std::set<LteFlowId_t> v;
+              v.insert (itRlcBufferReq->first);
+              map_nonGBRHOLgroupToUE.insert (std::pair<int,std::set<LteFlowId_t> >(group,v));
+            }
+          else
+            {
+              map_nonGBRHOLgroupToUE.find (group)->second.insert (itRlcBufferReq->first);
+            }
+        }
+      else if (itLogicalChannels->second.m_qosBearerType == itLogicalChannels->second.QBT_GBR) {
+          if (map_GBRHOLgroupToUE.count (group)==0)
+            {
+              std::set<LteFlowId_t> v;
+              v.insert (itRlcBufferReq->first);
+              map_GBRHOLgroupToUE.insert (std::pair<int,std::set<LteFlowId_t> >(group,v));
+            }
+          else
+            {
+              map_GBRHOLgroupToUE.find (group)->second.insert (itRlcBufferReq->first);
+            }
+        }
+    };
+
+
+  // Prepare data for the scheduling mechanism
+  // map: UE, to the amount of traffic they have to transfer
+  std::map<LteFlowId_t, int> UeToAmountOfDataToTransfer;
+  //Initialize the map per UE, how much resources is already assigned to the user
+  std::map<LteFlowId_t, int> UeToAmountOfAssignedResources;
+  // prepare values to calculate FF metric, this metric will be the same for all flows(logical channels) that belong to the same RNTI
+  std::map < uint16_t, uint8_t > sbCqiSum;
+
+  for( std::map <LteFlowId_t, FfMacSchedSapProvider::SchedDlRlcBufferReqParameters>::iterator itrbr = m_rlcBufferReq.begin ();
+       itrbr!=m_rlcBufferReq.end (); itrbr++)
+    {
+
+      LteFlowId_t flowId = itrbr->first;                // Prepare data for the scheduling mechanism
+      // map: UE, to the amount of traffic they have to transfer
+      int amountOfDataToTransfer =  8*((int)m_rlcBufferReq.find (flowId)->second.m_rlcRetransmissionQueueSize +
+                                       (int)m_rlcBufferReq.find (flowId)->second.m_rlcTransmissionQueueSize);
+
+      UeToAmountOfDataToTransfer.insert (std::pair<LteFlowId_t,int>(flowId,amountOfDataToTransfer));
+      UeToAmountOfAssignedResources.insert (std::pair<LteFlowId_t,int>(flowId,0));
+
+      uint8_t sum = 0;
+      for (int i = 0; i < numberOfRBGs; i++)
+        {
+          std::map <uint16_t,SbMeasResult_s>::iterator itCqi;
+          itCqi = m_a30CqiRxed.find ((*itrbr).first.m_rnti);
+          std::map <uint16_t,uint8_t>::iterator itTxMode;
+          itTxMode = m_uesTxMode.find ((*itrbr).first.m_rnti);
+          if (itTxMode == m_uesTxMode.end ())
+            {
+              NS_FATAL_ERROR ("No Transmission Mode info on user " << (*itrbr).first.m_rnti);
+            }
+          int nLayer = TransmissionModesLayers::TxMode2LayerNum ((*itTxMode).second);
+          std::vector <uint8_t> sbCqis;
+          if (itCqi == m_a30CqiRxed.end ())
+            {
+              for (uint8_t k = 0; k < nLayer; k++)
+                {
+                  sbCqis.push_back (1);                        // start with lowest value
+                }
+            }
+          else
+            {
+              sbCqis = (*itCqi).second.m_higherLayerSelected.at (i).m_sbCqi;
+            }
+
+          uint8_t cqi1 = sbCqis.at (0);
+          uint8_t cqi2 = 1;
+          if (sbCqis.size () > 1)
+            {
+              cqi2 = sbCqis.at (1);
+            }
+
+          uint8_t sbCqi;
+          if ((cqi1 > 0)||(cqi2 > 0))               // CQI == 0 means "out of range" (see table 7.2.3-1 of 36.213)
+            {
+              for (uint8_t k = 0; k < nLayer; k++)
+                {
+                  if (sbCqis.size () > k)
+                    {
+                      sbCqi = sbCqis.at (k);
+                    }
+                  else
+                    {
+                      // no info on this subband
+                      sbCqi = 0;
+                    }
+                  sum += sbCqi;
+                }
+            }               // end if cqi
+        }        // end of rbgNum
+
+      sbCqiSum.insert (std::pair<uint16_t, uint8_t> ((*itrbr).first.m_rnti, sum));
+    }
+
+  // availableRBGs - set that contains indexes of available resource block groups
+  std::set<int> availableRBGs;
+  for (int i = 0; i <  numberOfRBGs; i++)
+    {
+      if (rbgMap.at (i) == false)
+        availableRBGs.insert (i);
+    }
+
+  t_it_HOLgroupToUEs itGBRgroups = map_GBRHOLgroupToUE.begin ();
+  t_it_HOLgroupToUEs itnonGBRgroups = map_nonGBRHOLgroupToUE.begin ();
+
+
+
+  // while there are more resources available, loop through the users that are grouped by HOL value
+  while (availableRBGs.size ()>0)
+    {
+      std::set<LteFlowId_t> vUEs;
+      t_it_HOLgroupToUEs itCurrentGroup;
+
+      if (itGBRgroups!=map_GBRHOLgroupToUE.end ())
+        {
+          itCurrentGroup=itGBRgroups;
+          itGBRgroups++;
+        }
+      else if (itnonGBRgroups!=map_nonGBRHOLgroupToUE.end ())                  // if there are no more flows with retransmission queue start to scheduler flows with transmission queue
+        {
+          itCurrentGroup=itnonGBRgroups;
+          itnonGBRgroups++;
+        }
+      else
+        {
+          NS_LOG_INFO ("Available RBGs:"<< availableRBGs.size ()<<"but no users");
+          break;
+        }
+
+      while (availableRBGs.size ()>0 and itCurrentGroup->second.size ()>0)
+        {
+          int currentRB = *(availableRBGs.begin ());
+          std::map<LteFlowId_t, CQI_value> UeToCQIValue;
+          std::map<LteFlowId_t, double > UeToCoitaMetric;
+          std::map<LteFlowId_t, bool> UeHasReachedGBR;
+          double maximumValueMetric = 0;
+          LteFlowId_t userWithMaximumMetric;
+          UeToCQIValue.clear ();
+          UeToCoitaMetric.clear ();
+
+          // Iterate through the users and calculate which user will use the best of the current resource bloc.end()k and assign to that user.
+          for (std::set<LteFlowId_t>::iterator it=itCurrentGroup->second.begin (); it!=itCurrentGroup->second.end (); it++)
+            {
+              LteFlowId_t flowId = *it;
+              uint8_t cqi_value = 1;                           //higher better, maximum is 15
+              double coita_metric = 1;
+              double coita_sum = 0;
+              double metric = 0;
+              uint8_t worstCQIAmongRBGsAllocatedForThisUser = 15;
+              int numberOfRBGAllocatedForThisUser = 0;
+              LogicalChannelConfigListElement_s lc = m_ueLogicalChannelsConfigList.find (flowId)->second;
+              std::map <uint16_t,SbMeasResult_s>::iterator itRntiCQIsMap = m_a30CqiRxed.find (flowId.m_rnti);
+
+              std::map <uint16_t, CqasFlowPerf_t>::iterator itStats;
+
+              if (m_flowStatsDl.find (flowId.m_rnti) == m_flowStatsDl.end ())
+                {
+                  continue;                               // TO DO:  check if this should be logged and how.
+                }
+
+              itStats = m_flowStatsDl.find (flowId.m_rnti);
+              double tbr_weight = (*itStats).second.targetThroughput / (*itStats).second.lastAveragedThroughput;
+              if (tbr_weight < 1.0)
+                tbr_weight = 1.0;
+
+              if (itRntiCQIsMap != m_a30CqiRxed.end ())
+                {
+                  for(std::set<int>::iterator it=availableRBGs.begin (); it!=availableRBGs.end (); it++)
+                    {
+                      try
+                        {
+                          int val = (itRntiCQIsMap->second.m_higherLayerSelected.at (*it).m_sbCqi.at (0));
+                          if (val==0)
+                            val=1;                                             //if no info, use minimum
+                          if (*it == currentRB)
+                            cqi_value = val;
+                          coita_sum+=val;
+
+                        }
+                      catch(std::out_of_range&)
+                        {
+                          coita_sum+=1;                                      //if no info on channel use the worst cqi
+                          NS_LOG_INFO ("No CQI for lcId:"<<flowId.m_lcId<<" rnti:"<<flowId.m_rnti<<" at subband:"<<currentRB);
+                          //std::cout<<"\n No CQI for lcId:.....................................";
+                        }
+                    }
+                  coita_metric =cqi_value/coita_sum;
+                  UeToCQIValue.insert (std::pair<LteFlowId_t,CQI_value>(flowId,cqi_value));
+                  UeToCoitaMetric.insert (std::pair<LteFlowId_t, double>(flowId,coita_metric));
+                }
+
+              if (allocationMapPerRntiPerLCId.find (flowId.m_rnti)==allocationMapPerRntiPerLCId.end ())
+                {
+                  worstCQIAmongRBGsAllocatedForThisUser=cqi_value;
+                }
+              else {
+
+                  numberOfRBGAllocatedForThisUser = (allocationMapPerRntiPerLCId.find (flowId.m_rnti)->second.size ());
+
+                  for (std::multimap <uint8_t, qos_rb_and_CQI_assigned_to_lc>::iterator itRBG = allocationMapPerRntiPerLCId.find (flowId.m_rnti)->second.begin ();
+                       itRBG!=allocationMapPerRntiPerLCId.find (flowId.m_rnti)->second.end (); itRBG++)
+                    {
+                      qos_rb_and_CQI_assigned_to_lc e = itRBG->second;
+                      if (e.cqi_value_for_lc < worstCQIAmongRBGsAllocatedForThisUser)
+                        worstCQIAmongRBGsAllocatedForThisUser=e.cqi_value_for_lc;
+                    }
+
+                  if (cqi_value < worstCQIAmongRBGsAllocatedForThisUser)
+                    {
+                      worstCQIAmongRBGsAllocatedForThisUser=cqi_value;
+                    }
+                }
+
+              int mcsForThisUser = m_amc->GetMcsFromCqi (worstCQIAmongRBGsAllocatedForThisUser);
+              int tbSize = m_amc->GetTbSizeFromMcs (mcsForThisUser, (numberOfRBGAllocatedForThisUser+1) * rbgSize)/8;                           // similar to calculation of TB size (size of TB in bytes according to table 7.1.7.2.1-1 of 36.213)
+
+
+              double achievableRate = (( m_amc->GetTbSizeFromMcs (mcsForThisUser, rbgSize)/ 8) / 0.001);
+              double pf_weight = achievableRate / (*itStats).second.secondLastAveragedThroughput;
+
+              UeToAmountOfAssignedResources.find (flowId)->second = tbSize;
+              FfMacSchedSapProvider::SchedDlRlcBufferReqParameters lcBufferInfo = m_rlcBufferReq.find (flowId)->second;
+
+              if (UeToAmountOfDataToTransfer.find (flowId)->second - UeToAmountOfAssignedResources.find (flowId)->second < 0)
+                {
+                  UeHasReachedGBR.insert (std::pair<LteFlowId_t,bool>(flowId,false));
+                }
+
+              double bitRateWithNewRBG = 0;
+
+              if (m_flowStatsDl.find (flowId.m_rnti)!= m_flowStatsDl.end ())                         // there are some statistics{
+                {
+                  bitRateWithNewRBG = (1.0 - (1.0 / m_timeWindow)) * (m_flowStatsDl.find (flowId.m_rnti)->second.lastAveragedThroughput) + ((1.0 / m_timeWindow) * (double)(tbSize*1000));
+                }
+              else
+                {
+                  bitRateWithNewRBG = (1.0 / m_timeWindow) * (double)(tbSize*1000);
+                }
+
+              if(bitRateWithNewRBG > lc.m_eRabGuaranteedBitrateDl)
+                {
+                  UeHasReachedGBR.insert (std::pair<LteFlowId_t,bool>(flowId,true));
+                }
+              else
+                {
+                  UeHasReachedGBR.insert (std::pair<LteFlowId_t,bool>(flowId,false));
+                }
+
+              int hol = UEtoHOL.find (flowId)->second;
+
+              if (hol==0)
+                hol=1;
+
+              if ( m_CqaMetric.compare ("CqaFf") == 0)
+                {
+                  metric = coita_metric*tbr_weight*hol;
+                }
+              else if (m_CqaMetric.compare ("CqaPf") == 0)
+                {
+                  metric = tbr_weight*pf_weight*hol;
+                }
+              else
+                {
+                  metric = 1;
+                }
+
+              if (metric >= maximumValueMetric)
+                {
+                  maximumValueMetric = metric;
+                  userWithMaximumMetric = flowId;
+                }
+            }
+
+          qos_rb_and_CQI_assigned_to_lc s;
+          s.cqi_value_for_lc = UeToCQIValue.find (userWithMaximumMetric)->second;
+          s.resource_block_index = currentRB;
+
+          itMap = allocationMapPerRntiPerLCId.find (userWithMaximumMetric.m_rnti);
+
+          if (itMap == allocationMapPerRntiPerLCId.end ())
+            {
+              std::multimap <uint8_t, qos_rb_and_CQI_assigned_to_lc> tempMap;
+              tempMap.insert (std::pair<uint8_t, qos_rb_and_CQI_assigned_to_lc> (userWithMaximumMetric.m_lcId,s));
+              allocationMapPerRntiPerLCId.insert (std::pair <uint16_t, std::multimap <uint8_t,qos_rb_and_CQI_assigned_to_lc> > (userWithMaximumMetric.m_rnti, tempMap));
+            }
+          else
+            {
+              itMap->second.insert (std::pair<uint8_t,qos_rb_and_CQI_assigned_to_lc> (userWithMaximumMetric.m_lcId,s));
+            }
+
+          // erase current RBG from the list of available RBG
+          availableRBGs.erase (currentRB);
+
+          if (UeToAmountOfDataToTransfer.find (userWithMaximumMetric)->second <= UeToAmountOfAssignedResources.find (userWithMaximumMetric)->second*tolerance)
+          //||(UeHasReachedGBR.find(userWithMaximumMetric)->second == true))
+            {
+              itCurrentGroup->second.erase (userWithMaximumMetric);
+            }
+
+        }                 // while there are more users in current group
+    }             // while there are more groups of users
+
+
+  // reset TTI stats of users
+  std::map <uint16_t, CqasFlowPerf_t>::iterator itStats;
+  for (itStats = m_flowStatsDl.begin (); itStats != m_flowStatsDl.end (); itStats++)
+    {
+      (*itStats).second.lastTtiBytesTransmitted = 0;
+    }
+
+  // 3) Creating the correspondent DCIs (Generate the transmission opportunities by grouping the RBGs of the same RNTI)
+  //FfMacSchedSapUser::SchedDlConfigIndParameters ret;
+  itMap = allocationMapPerRntiPerLCId.begin ();
+  int counter = 0;
+  std::map<uint16_t, double> m_rnti_per_ratio;
+
+  while (itMap != allocationMapPerRntiPerLCId.end ())
+    {
+      // create new BuildDataListElement_s for this LC
+      BuildDataListElement_s newEl;
+      newEl.m_rnti = (*itMap).first;
+      NS_LOG_INFO ("Scheduled RNTI:"<<newEl.m_rnti);
+      // create the DlDciListElement_s
+      DlDciListElement_s newDci;
+      std::vector <struct RlcPduListElement_s> newRlcPduLe;
+      newDci.m_rnti = (*itMap).first;
+      newDci.m_harqProcess = UpdateHarqProcessId ((*itMap).first);
+      uint16_t lcActives = LcActivePerFlow (itMap->first);
+      if (lcActives==0)           // if there is still no buffer report information on any flow
+        lcActives = 1;
+      // NS_LOG_DEBUG (this << "Allocate user " << newEl.m_rnti << " rbg " << lcActives);
+      uint16_t RgbPerRnti = (*itMap).second.size ();
+      double doubleRBgPerRnti = RgbPerRnti;
+      double doubleRbgNum = numberOfRBGs;
+      double rrRatio = doubleRBgPerRnti/doubleRbgNum;
+      m_rnti_per_ratio.insert (std::pair<uint16_t,double>((*itMap).first,rrRatio));
+      std::map <uint16_t,SbMeasResult_s>::iterator itCqi;
+      itCqi = m_a30CqiRxed.find ((*itMap).first);
+      uint8_t worstCqi = 15;
+
+      // assign the worst value of CQI that user experienced on any of its subbands
+      for ( std::multimap <uint8_t, qos_rb_and_CQI_assigned_to_lc> ::iterator it = (*itMap).second.begin (); it != (*itMap).second.end (); it++)
+        {
+          if (it->second.cqi_value_for_lc<worstCqi)
+            {
+              worstCqi = it->second.cqi_value_for_lc;
+            }
+          counter++;
+        }
+
+      newDci.m_mcs.push_back (m_amc->GetMcsFromCqi (worstCqi));
+      int tbSize = (m_amc->GetTbSizeFromMcs (newDci.m_mcs.at (0), RgbPerRnti * rbgSize) / 8);           // (size of TB in bytes according to table 7.1.7.2.1-1 of 36.213)
+      newDci.m_tbsSize.push_back (tbSize);
+      newDci.m_resAlloc = 0;            // only allocation type 0 at this stage
+      newDci.m_rbBitmap = 0;    // TBD (32 bit bitmap see 7.1.6 of 36.213)
+      uint32_t rbgMask = 0;
+      std::multimap <uint8_t, qos_rb_and_CQI_assigned_to_lc> ::iterator itRBGsPerRNTI;
+      for ( itRBGsPerRNTI = (*itMap).second.begin (); itRBGsPerRNTI != (*itMap).second.end (); itRBGsPerRNTI++)
+        {
+          rbgMask = rbgMask + (0x1 << itRBGsPerRNTI->second.resource_block_index);
+        }
+      newDci.m_rbBitmap = rbgMask;   // (32 bit bitmap see 7.1.6 of 36.213)
+      // NOTE: In this first version of CqaFfMacScheduler, it is assumed one flow per user.
+      // create the rlc PDUs -> equally divide resources among active LCs
+      std::map <LteFlowId_t, FfMacSchedSapProvider::SchedDlRlcBufferReqParameters>::iterator itBufReq;
+      for (itBufReq = m_rlcBufferReq.begin (); itBufReq != m_rlcBufferReq.end (); itBufReq++)
+        {
+          if (((*itBufReq).first.m_rnti == (*itMap).first)
+              && (((*itBufReq).second.m_rlcTransmissionQueueSize > 0)
+                  || ((*itBufReq).second.m_rlcRetransmissionQueueSize > 0)
+                  || ((*itBufReq).second.m_rlcStatusPduSize > 0) ))
+            {
+              std::vector <struct RlcPduListElement_s> newRlcPduLe;
+              //for (uint8_t j = 0; j < nLayer; j++)
+              //{
+              RlcPduListElement_s newRlcEl;
+              newRlcEl.m_logicalChannelIdentity = (*itBufReq).first.m_lcId;
+              // newRlcEl.m_size = newDci.m_tbsSize.at (j) / lcActives;
+              newRlcEl.m_size = tbSize / lcActives;
+              // NS_LOG_INFO (this << " LCID " << (uint32_t) newRlcEl.m_logicalChannelIdentity << " size " << newRlcEl.m_size << " layer " << (uint16_t)j);
+              newRlcPduLe.push_back (newRlcEl);
+              UpdateDlRlcBufferInfo (newDci.m_rnti, newRlcEl.m_logicalChannelIdentity, newRlcEl.m_size);
+              if (m_harqOn == true)
+                {
+                  // store RLC PDU list for HARQ
+                  std::map <uint16_t, DlHarqRlcPduListBuffer_t>::iterator itRlcPdu =  m_dlHarqProcessesRlcPduListBuffer.find ((*itMap).first);
+                  if (itRlcPdu == m_dlHarqProcessesRlcPduListBuffer.end ())
+                    {
+                      NS_FATAL_ERROR ("Unable to find RlcPdcList in HARQ buffer for RNTI " << (*itMap).first);
+                    }
+                  int j=0;
+                  (*itRlcPdu).second.at (j).at (newDci.m_harqProcess).push_back (newRlcEl);
+                }
+              // }
+              newEl.m_rlcPduList.push_back (newRlcPduLe);
+            }
+          if ((*itBufReq).first.m_rnti > (*itMap).first)
+            {
+              break;
+            }
+        }
+      // for (uint8_t j = 0; j < nLayer; j++)
+      // {
+      newDci.m_ndi.push_back (1);
+      newDci.m_rv.push_back (0);
+      //}
+
+      newEl.m_dci = newDci;
+
+      if (m_harqOn == true)
+        {
+          // store DCI for HARQ
+          std::map <uint16_t, DlHarqProcessesDciBuffer_t>::iterator itDci = m_dlHarqProcessesDciBuffer.find (newEl.m_rnti);
+          if (itDci == m_dlHarqProcessesDciBuffer.end ())
+            {
+              NS_FATAL_ERROR ("Unable to find RNTI entry in DCI HARQ buffer for RNTI " << newEl.m_rnti);
+            }
+          (*itDci).second.at (newDci.m_harqProcess) = newDci;
+          // refresh timer
+          std::map <uint16_t, DlHarqProcessesTimer_t>::iterator itHarqTimer =  m_dlHarqProcessesTimer.find (newEl.m_rnti);
+          if (itHarqTimer== m_dlHarqProcessesTimer.end ())
+            {
+              NS_FATAL_ERROR ("Unable to find HARQ timer for RNTI " << (uint16_t)newEl.m_rnti);
+            }
+          (*itHarqTimer).second.at (newDci.m_harqProcess) = 0;
+        }
+
+      // ...more parameters -> ingored in this version
+
+      ret.m_buildDataList.push_back (newEl);
+      // update UE stats
+      std::map <uint16_t, CqasFlowPerf_t>::iterator it;
+      it = m_flowStatsDl.find ((*itMap).first);
+      if (it != m_flowStatsDl.end ())
+        {
+          (*it).second.lastTtiBytesTransmitted = tbSize;
+        }
+      else
+        {
+          NS_FATAL_ERROR (this << " No Stats for this allocated UE");
+        }
+
+      itMap++;
+    } // end while allocation
+  ret.m_nrOfPdcchOfdmSymbols = 1;   // TODO: check correct value according the DCIs txed
+
+  // update UEs stats
+  NS_LOG_INFO (this << " Update UEs statistics");
+  for (itStats = m_flowStatsDl.begin (); itStats != m_flowStatsDl.end (); itStats++)
+    {
+      if (allocationMapPerRntiPerLCId.find (itStats->first)!= allocationMapPerRntiPerLCId.end ())
+        {
+          (*itStats).second.secondLastAveragedThroughput = ((1.0 - (1 / m_timeWindow)) * (*itStats).second.secondLastAveragedThroughput) + ((1 / m_timeWindow) * (double)((*itStats).second.lastTtiBytesTransmitted / 0.001));
+        }
+
+      (*itStats).second.totalBytesTransmitted += (*itStats).second.lastTtiBytesTransmitted;
+      // update average throughput (see eq. 12.3 of Sec 12.3.1.2 of LTE â€“ The UMTS Long Term Evolution, Ed Wiley)
+      (*itStats).second.lastAveragedThroughput = ((1.0 - (1.0 / m_timeWindow)) * (*itStats).second.lastAveragedThroughput) + ((1.0 / m_timeWindow) * (double)((*itStats).second.lastTtiBytesTransmitted / 0.001));
+      NS_LOG_INFO (this << " UE total bytes " << (*itStats).second.totalBytesTransmitted);
+      NS_LOG_INFO (this << " UE average throughput " << (*itStats).second.lastAveragedThroughput);
+      (*itStats).second.lastTtiBytesTransmitted = 0;
+    }
+
+  m_schedSapUser->SchedDlConfigInd (ret);
+
+  int count_allocated_resource_blocks = 0;
+  for (std::map <uint16_t, std::multimap <uint8_t, qos_rb_and_CQI_assigned_to_lc> >::iterator itMap = allocationMapPerRntiPerLCId.begin (); itMap!=allocationMapPerRntiPerLCId.end (); itMap++)
+    {
+      count_allocated_resource_blocks+=itMap->second.size ();
+    }
+  NS_LOG_INFO (this << " Allocated RBs:" << count_allocated_resource_blocks);
+
+  return;
+}
+
+void
+CqaFfMacScheduler::DoSchedDlRachInfoReq (const struct FfMacSchedSapProvider::SchedDlRachInfoReqParameters& params)
+{
+  NS_LOG_FUNCTION (this);
+
+  m_rachList = params.m_rachList;
+
+  return;
+}
+
+void
+CqaFfMacScheduler::DoSchedDlCqiInfoReq (const struct FfMacSchedSapProvider::SchedDlCqiInfoReqParameters& params)
+{
+  NS_LOG_FUNCTION (this);
+
+  for (unsigned int i = 0; i < params.m_cqiList.size (); i++)
+    {
+      if ( params.m_cqiList.at (i).m_cqiType == CqiListElement_s::P10 )
+        {
+          // wideband CQI reporting
+          std::map <uint16_t,uint8_t>::iterator it;
+          uint16_t rnti = params.m_cqiList.at (i).m_rnti;
+          it = m_p10CqiRxed.find (rnti);
+          if (it == m_p10CqiRxed.end ())
+            {
+              // create the new entry
+              m_p10CqiRxed.insert ( std::pair<uint16_t, uint8_t > (rnti, params.m_cqiList.at (i).m_wbCqi.at (0)) ); // only codeword 0 at this stage (SISO)
+              // generate correspondent timer
+              m_p10CqiTimers.insert ( std::pair<uint16_t, uint32_t > (rnti, m_cqiTimersThreshold));
+            }
+          else
+            {
+              // update the CQI value and refresh correspondent timer
+              (*it).second = params.m_cqiList.at (i).m_wbCqi.at (0);
+              // update correspondent timer
+              std::map <uint16_t,uint32_t>::iterator itTimers;
+              itTimers = m_p10CqiTimers.find (rnti);
+              (*itTimers).second = m_cqiTimersThreshold;
+            }
+        }
+      else if ( params.m_cqiList.at (i).m_cqiType == CqiListElement_s::A30 )
+        {
+          // subband CQI reporting high layer configured
+          std::map <uint16_t,SbMeasResult_s>::iterator it;
+          uint16_t rnti = params.m_cqiList.at (i).m_rnti;
+          it = m_a30CqiRxed.find (rnti);
+          if (it == m_a30CqiRxed.end ())
+            {
+              // create the new entry
+              m_a30CqiRxed.insert ( std::pair<uint16_t, SbMeasResult_s > (rnti, params.m_cqiList.at (i).m_sbMeasResult) );
+              m_a30CqiTimers.insert ( std::pair<uint16_t, uint32_t > (rnti, m_cqiTimersThreshold));
+            }
+          else
+            {
+              // update the CQI value and refresh correspondent timer
+              (*it).second = params.m_cqiList.at (i).m_sbMeasResult;
+              std::map <uint16_t,uint32_t>::iterator itTimers;
+              itTimers = m_a30CqiTimers.find (rnti);
+              (*itTimers).second = m_cqiTimersThreshold;
+            }
+        }
+      else
+        {
+          NS_LOG_ERROR (this << " CQI type unknown");
+        }
+    }
+
+  return;
+}
+
+
+double
+CqaFfMacScheduler::EstimateUlSinr (uint16_t rnti, uint16_t rb)
+{
+  std::map <uint16_t, std::vector <double> >::iterator itCqi = m_ueCqi.find (rnti);
+  if (itCqi == m_ueCqi.end ())
+    {
+      // no cqi info about this UE
+      return (NO_SINR);
+
+    }
+  else
+    {
+      // take the average SINR value among the available
+      double sinrSum = 0;
+      int sinrNum = 0;
+      for (uint32_t i = 0; i < m_cschedCellConfig.m_ulBandwidth; i++)
+        {
+          double sinr = (*itCqi).second.at (i);
+          if (sinr != NO_SINR)
+            {
+              sinrSum += sinr;
+              sinrNum++;
+            }
+        }
+      double estimatedSinr = (sinrNum > 0) ? (sinrSum / sinrNum) : DBL_MAX;
+      // store the value
+      (*itCqi).second.at (rb) = estimatedSinr;
+      return (estimatedSinr);
+    }
+}
+
+void
+CqaFfMacScheduler::DoSchedUlTriggerReq (const struct FfMacSchedSapProvider::SchedUlTriggerReqParameters& params)
+{
+  NS_LOG_FUNCTION (this << " UL - Frame no. " << (params.m_sfnSf >> 4) << " subframe no. " << (0xF & params.m_sfnSf) << " size " << params.m_ulInfoList.size ());
+
+  RefreshUlCqiMaps ();
+
+  // Generate RBs map
+  FfMacSchedSapUser::SchedUlConfigIndParameters ret;
+  std::vector <bool> rbMap;
+  uint16_t rbAllocatedNum = 0;
+  std::set <uint16_t> rntiAllocated;
+  std::vector <uint16_t> rbgAllocationMap;
+  // update with RACH allocation map
+  rbgAllocationMap = m_rachAllocationMap;
+  //rbgAllocationMap.resize (m_cschedCellConfig.m_ulBandwidth, 0);
+  m_rachAllocationMap.clear ();
+  m_rachAllocationMap.resize (m_cschedCellConfig.m_ulBandwidth, 0);
+
+  rbMap.resize (m_cschedCellConfig.m_ulBandwidth, false);
+  // remove RACH allocation
+  for (uint16_t i = 0; i < m_cschedCellConfig.m_ulBandwidth; i++)
+    {
+      if (rbgAllocationMap.at (i) != 0)
+        {
+          rbMap.at (i) = true;
+          NS_LOG_DEBUG (this << " Allocated for RACH " << i);
+        }
+    }
+
+
+  if (m_harqOn == true)
+    {
+      //   Process UL HARQ feedback
+      for (uint16_t i = 0; i < params.m_ulInfoList.size (); i++)
+        {
+          if (params.m_ulInfoList.at (i).m_receptionStatus == UlInfoListElement_s::NotOk)
+            {
+              // retx correspondent block: retrieve the UL-DCI
+              uint16_t rnti = params.m_ulInfoList.at (i).m_rnti;
+              std::map <uint16_t, uint8_t>::iterator itProcId = m_ulHarqCurrentProcessId.find (rnti);
+              if (itProcId == m_ulHarqCurrentProcessId.end ())
+                {
+                  NS_LOG_ERROR ("No info find in HARQ buffer for UE (might change eNB) " << rnti);
+                }
+              uint8_t harqId = (uint8_t)((*itProcId).second - HARQ_PERIOD) % HARQ_PROC_NUM;
+              NS_LOG_INFO (this << " UL-HARQ retx RNTI " << rnti << " harqId " << (uint16_t)harqId << " i " << i << " size "  << params.m_ulInfoList.size ());
+              std::map <uint16_t, UlHarqProcessesDciBuffer_t>::iterator itHarq = m_ulHarqProcessesDciBuffer.find (rnti);
+              if (itHarq == m_ulHarqProcessesDciBuffer.end ())
+                {
+                  NS_LOG_ERROR ("No info find in HARQ buffer for UE (might change eNB) " << rnti);
+                  continue;
+                }
+              UlDciListElement_s dci = (*itHarq).second.at (harqId);
+              std::map <uint16_t, UlHarqProcessesStatus_t>::iterator itStat = m_ulHarqProcessesStatus.find (rnti);
+              if (itStat == m_ulHarqProcessesStatus.end ())
+                {
+                  NS_LOG_ERROR ("No info find in HARQ buffer for UE (might change eNB) " << rnti);
+                }
+              if ((*itStat).second.at (harqId) >= 3)
+                {
+                  NS_LOG_INFO ("Max number of retransmissions reached (UL)-> drop process");
+                  continue;
+                }
+              bool free = true;
+
+              for (int j = dci.m_rbStart; j < dci.m_rbStart + dci.m_rbLen; j++)
+                {
+                  if (rbMap.at (j) == true)
+                    {
+                      free = false;
+                      NS_LOG_INFO (this << " BUSY " << j);
+                    }
+                }
+              if (free)
+                {
+                  // retx on the same RBs
+                  for (int j = dci.m_rbStart; j < dci.m_rbStart + dci.m_rbLen; j++)
+                    {
+                      rbMap.at (j) = true;
+                      rbgAllocationMap.at (j) = dci.m_rnti;
+                      NS_LOG_INFO ("\tRB " << j);
+                      rbAllocatedNum++;
+                    }
+                  NS_LOG_INFO (this << " Send retx in the same RBs " << (uint16_t)dci.m_rbStart << " to " << dci.m_rbStart + dci.m_rbLen << " RV " << (*itStat).second.at (harqId) + 1);
+                }
+              else
+                {
+                  NS_LOG_INFO ("Cannot allocate retx due to RACH allocations for UE " << rnti);
+                  continue;
+                }
+              dci.m_ndi = 0;
+              // Update HARQ buffers with new HarqId
+              (*itStat).second.at ((*itProcId).second) = (*itStat).second.at (harqId) + 1;
+              (*itStat).second.at (harqId) = 0;
+              (*itHarq).second.at ((*itProcId).second) = dci;
+              ret.m_dciList.push_back (dci);
+              rntiAllocated.insert (dci.m_rnti);
+            }
+          else
+            {
+              NS_LOG_INFO (this << " HARQ-ACK feedback from RNTI " << params.m_ulInfoList.at (i).m_rnti);
+            }
+        }
+    }
+
+  std::map <uint16_t,uint32_t>::iterator it;
+  int nflows = 0;
+
+  for (it = m_ceBsrRxed.begin (); it != m_ceBsrRxed.end (); it++)
+    {
+      std::set <uint16_t>::iterator itRnti = rntiAllocated.find ((*it).first);
+      // select UEs with queues not empty and not yet allocated for HARQ
+      if (((*it).second > 0)&&(itRnti == rntiAllocated.end ()))
+        {
+          nflows++;
+        }
+    }
+
+  if (nflows == 0)
+    {
+      if (ret.m_dciList.size () > 0)
+        {
+          m_allocationMaps.insert (std::pair <uint16_t, std::vector <uint16_t> > (params.m_sfnSf, rbgAllocationMap));
+          m_schedSapUser->SchedUlConfigInd (ret);
+        }
+
+      return;  // no flows to be scheduled
+    }
+
+
+  // Divide the remaining resources equally among the active users starting from the subsequent one served last scheduling trigger
+  uint16_t rbPerFlow = (m_cschedCellConfig.m_ulBandwidth) / (nflows + rntiAllocated.size ());
+  if (rbPerFlow < 3)
+    {
+      rbPerFlow = 3;  // at least 3 rbg per flow (till available resource) to ensure TxOpportunity >= 7 bytes
+    }
+  int rbAllocated = 0;
+
+  std::map <uint16_t, CqasFlowPerf_t>::iterator itStats;
+  if (m_nextRntiUl != 0)
+    {
+      for (it = m_ceBsrRxed.begin (); it != m_ceBsrRxed.end (); it++)
+        {
+          if ((*it).first == m_nextRntiUl)
+            {
+              break;
+            }
+        }
+      if (it == m_ceBsrRxed.end ())
+        {
+          NS_LOG_ERROR (this << " no user found");
+        }
+    }
+  else
+    {
+      it = m_ceBsrRxed.begin ();
+      m_nextRntiUl = (*it).first;
+    }
+  do
+    {
+      std::set <uint16_t>::iterator itRnti = rntiAllocated.find ((*it).first);
+      if ((itRnti != rntiAllocated.end ())||((*it).second == 0))
+        {
+          // UE already allocated for UL-HARQ -> skip it
+          NS_LOG_DEBUG (this << " UE already allocated in HARQ -> discared, RNTI " << (*it).first);
+          it++;
+          if (it == m_ceBsrRxed.end ())
+            {
+              // restart from the first
+              it = m_ceBsrRxed.begin ();
+            }
+          continue;
+        }
+      if (rbAllocated + rbPerFlow - 1 > m_cschedCellConfig.m_ulBandwidth)
+        {
+          // limit to physical resources last resource assignment
+          rbPerFlow = m_cschedCellConfig.m_ulBandwidth - rbAllocated;
+          // at least 3 rbg per flow to ensure TxOpportunity >= 7 bytes
+          if (rbPerFlow < 3)
+            {
+              // terminate allocation
+              rbPerFlow = 0;
+            }
+        }
+
+      UlDciListElement_s uldci;
+      uldci.m_rnti = (*it).first;
+      uldci.m_rbLen = rbPerFlow;
+      bool allocated = false;
+      NS_LOG_INFO (this << " RB Allocated " << rbAllocated << " rbPerFlow " << rbPerFlow << " flows " << nflows);
+      while ((!allocated)&&((rbAllocated + rbPerFlow - m_cschedCellConfig.m_ulBandwidth) < 1) && (rbPerFlow != 0))
+        {
+          // check availability
+          bool free = true;
+          for (uint16_t j = rbAllocated; j < rbAllocated + rbPerFlow; j++)
+            {
+              if (rbMap.at (j) == true)
+                {
+                  free = false;
+                  break;
+                }
+            }
+          if (free)
+            {
+              uldci.m_rbStart = rbAllocated;
+
+              for (uint16_t j = rbAllocated; j < rbAllocated + rbPerFlow; j++)
+                {
+                  rbMap.at (j) = true;
+                  // store info on allocation for managing ul-cqi interpretation
+                  rbgAllocationMap.at (j) = (*it).first;
+                }
+              rbAllocated += rbPerFlow;
+              allocated = true;
+              break;
+            }
+          rbAllocated++;
+          if (rbAllocated + rbPerFlow - 1 > m_cschedCellConfig.m_ulBandwidth)
+            {
+              // limit to physical resources last resource assignment
+              rbPerFlow = m_cschedCellConfig.m_ulBandwidth - rbAllocated;
+              // at least 3 rbg per flow to ensure TxOpportunity >= 7 bytes
+              if (rbPerFlow < 3)
+                {
+                  // terminate allocation
+                  rbPerFlow = 0;
+                }
+            }
+        }
+      if (!allocated)
+        {
+          // unable to allocate new resource: finish scheduling
+          m_nextRntiUl = (*it).first;
+          if (ret.m_dciList.size () > 0)
+            {
+              m_schedSapUser->SchedUlConfigInd (ret);
+            }
+          m_allocationMaps.insert (std::pair <uint16_t, std::vector <uint16_t> > (params.m_sfnSf, rbgAllocationMap));
+          return;
+        }
+
+
+
+      std::map <uint16_t, std::vector <double> >::iterator itCqi = m_ueCqi.find ((*it).first);
+      int cqi = 0;
+      if (itCqi == m_ueCqi.end ())
+        {
+          // no cqi info about this UE
+          uldci.m_mcs = 0; // MCS 0 -> UL-AMC TBD
+        }
+      else
+        {
+          // take the lowest CQI value (worst RB)
+          double minSinr = (*itCqi).second.at (uldci.m_rbStart);
+          if (minSinr == NO_SINR)
+            {
+              minSinr = EstimateUlSinr ((*it).first, uldci.m_rbStart);
+            }
+          for (uint16_t i = uldci.m_rbStart; i < uldci.m_rbStart + uldci.m_rbLen; i++)
+            {
+              double sinr = (*itCqi).second.at (i);
+              if (sinr == NO_SINR)
+                {
+                  sinr = EstimateUlSinr ((*it).first, i);
+                }
+              if ((*itCqi).second.at (i) < minSinr)
+                {
+                  minSinr = (*itCqi).second.at (i);
+                }
+            }
+
+          // translate SINR -> cqi: WILD ACK: same as DL
+          double s = log2 ( 1 + (
+                              std::pow (10, minSinr / 10 )  /
+                              ( (-std::log (5.0 * 0.00005 )) / 1.5) ));
+          cqi = m_amc->GetCqiFromSpectralEfficiency (s);
+          if (cqi == 0)
+            {
+              it++;
+              if (it == m_ceBsrRxed.end ())
+                {
+                  // restart from the first
+                  it = m_ceBsrRxed.begin ();
+                }
+              NS_LOG_DEBUG (this << " UE discared for CQI=0, RNTI " << uldci.m_rnti);
+              // remove UE from allocation map
+              for (uint16_t i = uldci.m_rbStart; i < uldci.m_rbStart + uldci.m_rbLen; i++)
+                {
+                  rbgAllocationMap.at (i) = 0;
+                }
+              continue; // CQI == 0 means "out of range" (see table 7.2.3-1 of 36.213)
+            }
+          uldci.m_mcs = m_amc->GetMcsFromCqi (cqi);
+        }
+
+      uldci.m_tbSize = (m_amc->GetTbSizeFromMcs (uldci.m_mcs, rbPerFlow) / 8);
+      UpdateUlRlcBufferInfo (uldci.m_rnti, uldci.m_tbSize);
+      uldci.m_ndi = 1;
+      uldci.m_cceIndex = 0;
+      uldci.m_aggrLevel = 1;
+      uldci.m_ueTxAntennaSelection = 3; // antenna selection OFF
+      uldci.m_hopping = false;
+      uldci.m_n2Dmrs = 0;
+      uldci.m_tpc = 0; // no power control
+      uldci.m_cqiRequest = false; // only period CQI at this stage
+      uldci.m_ulIndex = 0; // TDD parameter
+      uldci.m_dai = 1; // TDD parameter
+      uldci.m_freqHopping = 0;
+      uldci.m_pdcchPowerOffset = 0; // not used
+      ret.m_dciList.push_back (uldci);
+      // store DCI for HARQ_PERIOD
+      uint8_t harqId = 0;
+      if (m_harqOn == true)
+        {
+          std::map <uint16_t, uint8_t>::iterator itProcId;
+          itProcId = m_ulHarqCurrentProcessId.find (uldci.m_rnti);
+          if (itProcId == m_ulHarqCurrentProcessId.end ())
+            {
+              NS_FATAL_ERROR ("No info find in HARQ buffer for UE " << uldci.m_rnti);
+            }
+          harqId = (*itProcId).second;
+          std::map <uint16_t, UlHarqProcessesDciBuffer_t>::iterator itDci = m_ulHarqProcessesDciBuffer.find (uldci.m_rnti);
+          if (itDci == m_ulHarqProcessesDciBuffer.end ())
+            {
+              NS_FATAL_ERROR ("Unable to find RNTI entry in UL DCI HARQ buffer for RNTI " << uldci.m_rnti);
+            }
+          (*itDci).second.at (harqId) = uldci;
+        }
+
+      NS_LOG_INFO (this << " UE Allocation RNTI " << (*it).first << " startPRB " << (uint32_t)uldci.m_rbStart << " nPRB " << (uint32_t)uldci.m_rbLen << " CQI " << cqi << " MCS " << (uint32_t)uldci.m_mcs << " TBsize " << uldci.m_tbSize << " RbAlloc " << rbAllocated << " harqId " << (uint16_t)harqId);
+
+      // update TTI  UE stats
+      itStats = m_flowStatsUl.find ((*it).first);
+      if (itStats != m_flowStatsUl.end ())
+        {
+          (*itStats).second.lastTtiBytesTransmitted =  uldci.m_tbSize;
+        }
+      else
+        {
+          NS_LOG_DEBUG (this << " No Stats for this allocated UE");
+        }
+
+
+      it++;
+      if (it == m_ceBsrRxed.end ())
+        {
+          // restart from the first
+          it = m_ceBsrRxed.begin ();
+        }
+      if ((rbAllocated == m_cschedCellConfig.m_ulBandwidth) || (rbPerFlow == 0))
+        {
+          // Stop allocation: no more PRBs
+          m_nextRntiUl = (*it).first;
+          break;
+        }
+    }
+  while (((*it).first != m_nextRntiUl)&&(rbPerFlow!=0));
+
+
+  // Update global UE stats
+  // update UEs stats
+  for (itStats = m_flowStatsUl.begin (); itStats != m_flowStatsUl.end (); itStats++)
+    {
+      (*itStats).second.totalBytesTransmitted += (*itStats).second.lastTtiBytesTransmitted;
+      // update average throughput (see eq. 12.3 of Sec 12.3.1.2 of LTE â€“ The UMTS Long Term Evolution, Ed Wiley)
+      (*itStats).second.lastAveragedThroughput = ((1.0 - (1.0 / m_timeWindow)) * (*itStats).second.lastAveragedThroughput) + ((1.0 / m_timeWindow) * (double)((*itStats).second.lastTtiBytesTransmitted / 0.001));
+      NS_LOG_INFO (this << " UE total bytes " << (*itStats).second.totalBytesTransmitted);
+      NS_LOG_INFO (this << " UE average throughput " << (*itStats).second.lastAveragedThroughput);
+      (*itStats).second.lastTtiBytesTransmitted = 0;
+    }
+  m_allocationMaps.insert (std::pair <uint16_t, std::vector <uint16_t> > (params.m_sfnSf, rbgAllocationMap));
+  m_schedSapUser->SchedUlConfigInd (ret);
+
+  return;
+}
+
+void
+CqaFfMacScheduler::DoSchedUlNoiseInterferenceReq (const struct FfMacSchedSapProvider::SchedUlNoiseInterferenceReqParameters& params)
+{
+  NS_LOG_FUNCTION (this);
+  return;
+}
+
+void
+CqaFfMacScheduler::DoSchedUlSrInfoReq (const struct FfMacSchedSapProvider::SchedUlSrInfoReqParameters& params)
+{
+  NS_LOG_FUNCTION (this);
+  return;
+}
+
+void
+CqaFfMacScheduler::DoSchedUlMacCtrlInfoReq (const struct FfMacSchedSapProvider::SchedUlMacCtrlInfoReqParameters& params)
+{
+  NS_LOG_FUNCTION (this);
+
+  std::map <uint16_t,uint32_t>::iterator it;
+
+  for (unsigned int i = 0; i < params.m_macCeList.size (); i++)
+    {
+      if ( params.m_macCeList.at (i).m_macCeType == MacCeListElement_s::BSR )
+        {
+          // buffer status report
+          // note that this scheduler does not differentiate the
+          // allocation according to which LCGs have more/less bytes
+          // to send.
+          // Hence the BSR of different LCGs are just summed up to get
+          // a total queue size that is used for allocation purposes.
+
+          uint32_t buffer = 0;
+          for (uint8_t lcg = 0; lcg < 4; ++lcg)
+            {
+              uint8_t bsrId = params.m_macCeList.at (i).m_macCeValue.m_bufferStatus.at (lcg);
+              buffer += BufferSizeLevelBsr::BsrId2BufferSize (bsrId);
+            }
+
+          uint16_t rnti = params.m_macCeList.at (i).m_rnti;
+          NS_LOG_LOGIC (this << "RNTI=" << rnti << " buffer=" << buffer);
+          it = m_ceBsrRxed.find (rnti);
+          if (it == m_ceBsrRxed.end ())
+            {
+              // create the new entry
+              m_ceBsrRxed.insert ( std::pair<uint16_t, uint32_t > (rnti, buffer));
+            }
+          else
+            {
+              // update the buffer size value
+              (*it).second = buffer;
+            }
+        }
+    }
+
+  return;
+}
+
+void
+CqaFfMacScheduler::DoSchedUlCqiInfoReq (const struct FfMacSchedSapProvider::SchedUlCqiInfoReqParameters& params)
+{
+  NS_LOG_FUNCTION (this);
+// retrieve the allocation for this subframe
+  switch (m_ulCqiFilter)
+    {
+    case FfMacScheduler::SRS_UL_CQI:
+      {
+        // filter all the CQIs that are not SRS based
+        if (params.m_ulCqi.m_type != UlCqi_s::SRS)
+          {
+            return;
+          }
+      }
+      break;
+    case FfMacScheduler::PUSCH_UL_CQI:
+      {
+        // filter all the CQIs that are not SRS based
+        if (params.m_ulCqi.m_type != UlCqi_s::PUSCH)
+          {
+            return;
+          }
+      }
+    case FfMacScheduler::ALL_UL_CQI:
+      break;
+
+    default:
+      NS_FATAL_ERROR ("Unknown UL CQI type");
+    }
+
+  switch (params.m_ulCqi.m_type)
+    {
+    case UlCqi_s::PUSCH:
+      {
+        std::map <uint16_t, std::vector <uint16_t> >::iterator itMap;
+        std::map <uint16_t, std::vector <double> >::iterator itCqi;
+        NS_LOG_DEBUG (this << " Collect PUSCH CQIs of Frame no. " << (params.m_sfnSf >> 4) << " subframe no. " << (0xF & params.m_sfnSf));
+        itMap = m_allocationMaps.find (params.m_sfnSf);
+        if (itMap == m_allocationMaps.end ())
+          {
+            return;
+          }
+        for (uint32_t i = 0; i < (*itMap).second.size (); i++)
+          {
+            // convert from fixed point notation Sxxxxxxxxxxx.xxx to double
+            double sinr = LteFfConverter::fpS11dot3toDouble (params.m_ulCqi.m_sinr.at (i));
+            itCqi = m_ueCqi.find ((*itMap).second.at (i));
+            if (itCqi == m_ueCqi.end ())
+              {
+                // create a new entry
+                std::vector <double> newCqi;
+                for (uint32_t j = 0; j < m_cschedCellConfig.m_ulBandwidth; j++)
+                  {
+                    if (i == j)
+                      {
+                        newCqi.push_back (sinr);
+                      }
+                    else
+                      {
+                        // initialize with NO_SINR value.
+                        newCqi.push_back (NO_SINR);
+                      }
+
+                  }
+                m_ueCqi.insert (std::pair <uint16_t, std::vector <double> > ((*itMap).second.at (i), newCqi));
+                // generate correspondent timer
+                m_ueCqiTimers.insert (std::pair <uint16_t, uint32_t > ((*itMap).second.at (i), m_cqiTimersThreshold));
+              }
+            else
+              {
+                // update the value
+                (*itCqi).second.at (i) = sinr;
+                NS_LOG_DEBUG (this << " RNTI " << (*itMap).second.at (i) << " RB " << i << " SINR " << sinr);
+                // update correspondent timer
+                std::map <uint16_t, uint32_t>::iterator itTimers;
+                itTimers = m_ueCqiTimers.find ((*itMap).second.at (i));
+                (*itTimers).second = m_cqiTimersThreshold;
+
+              }
+
+          }
+        // remove obsolete info on allocation
+        m_allocationMaps.erase (itMap);
+      }
+      break;
+    case UlCqi_s::SRS:
+      {
+        NS_LOG_DEBUG (this << " Collect SRS CQIs of Frame no. " << (params.m_sfnSf >> 4) << " subframe no. " << (0xF & params.m_sfnSf));
+        // get the RNTI from vendor specific parameters
+        uint16_t rnti = 0;
+        NS_ASSERT (params.m_vendorSpecificList.size () > 0);
+        for (uint16_t i = 0; i < params.m_vendorSpecificList.size (); i++)
+          {
+            if (params.m_vendorSpecificList.at (i).m_type == SRS_CQI_RNTI_VSP)
+              {
+                Ptr<SrsCqiRntiVsp> vsp = DynamicCast<SrsCqiRntiVsp> (params.m_vendorSpecificList.at (i).m_value);
+                rnti = vsp->GetRnti ();
+              }
+          }
+        std::map <uint16_t, std::vector <double> >::iterator itCqi;
+        itCqi = m_ueCqi.find (rnti);
+        if (itCqi == m_ueCqi.end ())
+          {
+            // create a new entry
+            std::vector <double> newCqi;
+            for (uint32_t j = 0; j < m_cschedCellConfig.m_ulBandwidth; j++)
+              {
+                double sinr = LteFfConverter::fpS11dot3toDouble (params.m_ulCqi.m_sinr.at (j));
+                newCqi.push_back (sinr);
+                NS_LOG_INFO (this << " RNTI " << rnti << " new SRS-CQI for RB  " << j << " value " << sinr);
+
+              }
+            m_ueCqi.insert (std::pair <uint16_t, std::vector <double> > (rnti, newCqi));
+            // generate correspondent timer
+            m_ueCqiTimers.insert (std::pair <uint16_t, uint32_t > (rnti, m_cqiTimersThreshold));
+          }
+        else
+          {
+            // update the values
+            for (uint32_t j = 0; j < m_cschedCellConfig.m_ulBandwidth; j++)
+              {
+                double sinr = LteFfConverter::fpS11dot3toDouble (params.m_ulCqi.m_sinr.at (j));
+                (*itCqi).second.at (j) = sinr;
+                NS_LOG_INFO (this << " RNTI " << rnti << " update SRS-CQI for RB  " << j << " value " << sinr);
+              }
+            // update correspondent timer
+            std::map <uint16_t, uint32_t>::iterator itTimers;
+            itTimers = m_ueCqiTimers.find (rnti);
+            (*itTimers).second = m_cqiTimersThreshold;
+
+          }
+
+
+      }
+      break;
+    case UlCqi_s::PUCCH_1:
+    case UlCqi_s::PUCCH_2:
+    case UlCqi_s::PRACH:
+      {
+        NS_FATAL_ERROR ("PfFfMacScheduler supports only PUSCH and SRS UL-CQIs");
+      }
+      break;
+    default:
+      NS_FATAL_ERROR ("Unknown type of UL-CQI");
+    }
+  return;
+}
+
+void
+CqaFfMacScheduler::RefreshDlCqiMaps (void)
+{
+  // refresh DL CQI P01 Map
+  std::map <uint16_t,uint32_t>::iterator itP10 = m_p10CqiTimers.begin ();
+  while (itP10 != m_p10CqiTimers.end ())
+    {
+      NS_LOG_INFO (this << " P10-CQI for user " << (*itP10).first << " is " << (uint32_t)(*itP10).second << " thr " << (uint32_t)m_cqiTimersThreshold);
+      if ((*itP10).second == 0)
+        {
+          // delete correspondent entries
+          std::map <uint16_t,uint8_t>::iterator itMap = m_p10CqiRxed.find ((*itP10).first);
+          NS_ASSERT_MSG (itMap != m_p10CqiRxed.end (), " Does not find CQI report for user " << (*itP10).first);
+          NS_LOG_INFO (this << " P10-CQI expired for user " << (*itP10).first);
+          m_p10CqiRxed.erase (itMap);
+          std::map <uint16_t,uint32_t>::iterator temp = itP10;
+          itP10++;
+          m_p10CqiTimers.erase (temp);
+        }
+      else
+        {
+          (*itP10).second--;
+          itP10++;
+        }
+    }
+
+  // refresh DL CQI A30 Map
+  std::map <uint16_t,uint32_t>::iterator itA30 = m_a30CqiTimers.begin ();
+  while (itA30 != m_a30CqiTimers.end ())
+    {
+      NS_LOG_INFO (this << " A30-CQI for user " << (*itA30).first << " is " << (uint32_t)(*itA30).second << " thr " << (uint32_t)m_cqiTimersThreshold);
+      if ((*itA30).second == 0)
+        {
+          // delete correspondent entries
+          std::map <uint16_t,SbMeasResult_s>::iterator itMap = m_a30CqiRxed.find ((*itA30).first);
+          NS_ASSERT_MSG (itMap != m_a30CqiRxed.end (), " Does not find CQI report for user " << (*itA30).first);
+          NS_LOG_INFO (this << " A30-CQI expired for user " << (*itA30).first);
+          m_a30CqiRxed.erase (itMap);
+          std::map <uint16_t,uint32_t>::iterator temp = itA30;
+          itA30++;
+          m_a30CqiTimers.erase (temp);
+        }
+      else
+        {
+          (*itA30).second--;
+          itA30++;
+        }
+    }
+
+  return;
+}
+
+
+void
+CqaFfMacScheduler::RefreshUlCqiMaps (void)
+{
+  // refresh UL CQI  Map
+  std::map <uint16_t,uint32_t>::iterator itUl = m_ueCqiTimers.begin ();
+  while (itUl != m_ueCqiTimers.end ())
+    {
+      NS_LOG_INFO (this << " UL-CQI for user " << (*itUl).first << " is " << (uint32_t)(*itUl).second << " thr " << (uint32_t)m_cqiTimersThreshold);
+      if ((*itUl).second == 0)
+        {
+          // delete correspondent entries
+          std::map <uint16_t, std::vector <double> >::iterator itMap = m_ueCqi.find ((*itUl).first);
+          NS_ASSERT_MSG (itMap != m_ueCqi.end (), " Does not find CQI report for user " << (*itUl).first);
+          NS_LOG_INFO (this << " UL-CQI exired for user " << (*itUl).first);
+          (*itMap).second.clear ();
+          m_ueCqi.erase (itMap);
+          std::map <uint16_t,uint32_t>::iterator temp = itUl;
+          itUl++;
+          m_ueCqiTimers.erase (temp);
+        }
+      else
+        {
+          (*itUl).second--;
+          itUl++;
+        }
+    }
+
+  return;
+}
+
+void
+CqaFfMacScheduler::UpdateDlRlcBufferInfo (uint16_t rnti, uint8_t lcid, uint16_t size)
+{
+  std::map<LteFlowId_t, FfMacSchedSapProvider::SchedDlRlcBufferReqParameters>::iterator it;
+  LteFlowId_t flow (rnti, lcid);
+  it = m_rlcBufferReq.find (flow);
+  if (it != m_rlcBufferReq.end ())
+    {
+      NS_LOG_INFO (this << " UE " << rnti << " LC " << (uint16_t)lcid << " txqueue " << (*it).second.m_rlcTransmissionQueueSize << " retxqueue " << (*it).second.m_rlcRetransmissionQueueSize << " status " << (*it).second.m_rlcStatusPduSize << " decrease " << size);
+      // Update queues: RLC tx order Status, ReTx, Tx
+      // Update status queue
+      if (((*it).second.m_rlcStatusPduSize > 0) && (size >= (*it).second.m_rlcStatusPduSize))
+        {
+          (*it).second.m_rlcStatusPduSize = 0;
+        }
+      else if (((*it).second.m_rlcRetransmissionQueueSize > 0) && (size >= (*it).second.m_rlcRetransmissionQueueSize))
+        {
+          (*it).second.m_rlcRetransmissionQueueSize = 0;
+        }
+      else if ((*it).second.m_rlcTransmissionQueueSize > 0)
+        {
+          uint32_t rlcOverhead;
+          if (lcid == 1)
+            {
+              // for SRB1 (using RLC AM) it's better to
+              // overestimate RLC overhead rather than
+              // underestimate it and risk unneeded
+              // segmentation which increases delay 
+              rlcOverhead = 4;
+            }
+          else
+            {
+              // minimum RLC overhead due to header
+              rlcOverhead = 2;
+            }
+          // update transmission queue
+          if ((*it).second.m_rlcTransmissionQueueSize <= size - rlcOverhead)
+            {
+              (*it).second.m_rlcTransmissionQueueSize = 0;
+            }
+          else
+            {
+              (*it).second.m_rlcTransmissionQueueSize -= size - rlcOverhead;
+            }
+        }
+    }
+  else
+    {
+      NS_LOG_ERROR (this << " Does not find DL RLC Buffer Report of UE " << rnti);
+    }
+}
+
+void
+CqaFfMacScheduler::UpdateUlRlcBufferInfo (uint16_t rnti, uint16_t size)
+{
+
+  size = size - 2; // remove the minimum RLC overhead
+  std::map <uint16_t,uint32_t>::iterator it = m_ceBsrRxed.find (rnti);
+  if (it != m_ceBsrRxed.end ())
+    {
+      NS_LOG_INFO (this << " UE " << rnti << " size " << size << " BSR " << (*it).second);
+      if ((*it).second >= size)
+        {
+          (*it).second -= size;
+        }
+      else
+        {
+          (*it).second = 0;
+        }
+    }
+  else
+    {
+      NS_LOG_ERROR (this << " Does not find BSR report info of UE " << rnti);
+    }
+
+}
+
+void
+CqaFfMacScheduler::TransmissionModeConfigurationUpdate (uint16_t rnti, uint8_t txMode)
+{
+  NS_LOG_FUNCTION (this << " RNTI " << rnti << " txMode " << (uint16_t)txMode);
+  FfMacCschedSapUser::CschedUeConfigUpdateIndParameters params;
+  params.m_rnti = rnti;
+  params.m_transmissionMode = txMode;
+  m_cschedSapUser->CschedUeConfigUpdateInd (params);
+}
+
+
+}
diff -Naur ns-3.19/src/lte/model/cqa-ff-mac-scheduler.h ns-3.20/src/lte/model/cqa-ff-mac-scheduler.h
--- ns-3.19/src/lte/model/cqa-ff-mac-scheduler.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.20/src/lte/model/cqa-ff-mac-scheduler.h	2014-06-17 10:33:14.077994542 -0700
@@ -0,0 +1,292 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 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
+ *
+ * Authors: Biljana Bojovic <bbojovic@cttc.es>, Nicola Baldo<nbaldo@cttc.es>.
+ *
+ * Note: Implementation is using many common scheduler functionalities in its original version implemented by Marco Miozzo<mmiozzo@cttc.es> in PF and RR
+ * schedulers. *
+ */
+
+#ifndef CQA_FF_MAC_SCHEDULER_H
+#define CQA_FF_MAC_SCHEDULER_H
+
+#include <ns3/lte-common.h>
+#include <ns3/ff-mac-csched-sap.h>
+#include <ns3/ff-mac-sched-sap.h>
+#include <ns3/ff-mac-scheduler.h>
+#include <vector>
+#include <map>
+#include <set>
+#include <ns3/nstime.h>
+#include <ns3/lte-amc.h>
+
+// value for SINR outside the range defined by FF-API, used to indicate that there
+// is no CQI for this element
+
+#define NO_SINR -5000
+#define HARQ_PROC_NUM 8
+#define HARQ_DL_TIMEOUT 11
+
+namespace ns3 {
+
+typedef std::vector < uint8_t > DlHarqProcessesStatus_t;
+typedef std::vector < uint8_t > DlHarqProcessesTimer_t;
+typedef std::vector < DlDciListElement_s > DlHarqProcessesDciBuffer_t;
+typedef std::vector < std::vector <struct RlcPduListElement_s> > RlcPduList_t; // vector of the LCs and layers per UE
+typedef std::vector < RlcPduList_t > DlHarqRlcPduListBuffer_t; // vector of the 8 HARQ processes per UE
+typedef std::vector < UlDciListElement_s > UlHarqProcessesDciBuffer_t;
+typedef std::vector < uint8_t > UlHarqProcessesStatus_t;
+
+struct CqasFlowPerf_t
+{
+  Time flowStart;
+  unsigned long totalBytesTransmitted;     /// Total bytes send by eNb for this UE
+  unsigned int lastTtiBytesTransmitted;    /// Total bytes send by eNB in last tti for this UE
+  double lastAveragedThroughput;           /// Past average throughput
+  double secondLastAveragedThroughput;
+  double targetThroughput;                 /// Target throughput
+
+};
+
+/**
+ * \ingroup ff-api
+ * \brief Implements the SCHED SAP and CSCHED SAP for the Channel and QoS Aware Scheduler
+ *
+ * This class implements the interface defined by the FfMacScheduler abstract class
+ */
+
+class CqaFfMacScheduler : public FfMacScheduler
+{
+public:
+  /**
+   * \brief Constructor
+   *
+   * Creates the MAC Scheduler interface implementation
+   */
+  CqaFfMacScheduler ();
+
+  /**
+   * Destructor
+   */
+  virtual ~CqaFfMacScheduler ();
+
+  // inherited from Object
+  virtual void DoDispose (void);
+  static TypeId GetTypeId (void);
+
+  // inherited from FfMacScheduler
+  virtual void SetFfMacCschedSapUser (FfMacCschedSapUser* s);
+  virtual void SetFfMacSchedSapUser (FfMacSchedSapUser* s);
+  virtual FfMacCschedSapProvider* GetFfMacCschedSapProvider ();
+  virtual FfMacSchedSapProvider* GetFfMacSchedSapProvider ();
+
+  friend class CqaSchedulerMemberCschedSapProvider;
+  friend class CqaSchedulerMemberSchedSapProvider;
+
+  void TransmissionModeConfigurationUpdate (uint16_t rnti, uint8_t txMode);
+
+private:
+  //
+  // Implementation of the CSCHED API primitives
+  // (See 4.1 for description of the primitives)
+  //
+
+  void DoCschedCellConfigReq (const struct FfMacCschedSapProvider::CschedCellConfigReqParameters& params);
+
+  void DoCschedUeConfigReq (const struct FfMacCschedSapProvider::CschedUeConfigReqParameters& params);
+
+  void DoCschedLcConfigReq (const struct FfMacCschedSapProvider::CschedLcConfigReqParameters& params);
+
+  void DoCschedLcReleaseReq (const struct FfMacCschedSapProvider::CschedLcReleaseReqParameters& params);
+
+  void DoCschedUeReleaseReq (const struct FfMacCschedSapProvider::CschedUeReleaseReqParameters& params);
+
+  //
+  // Implementation of the SCHED API primitives
+  // (See 4.2 for description of the primitives)
+  //
+
+  void DoSchedDlRlcBufferReq (const struct FfMacSchedSapProvider::SchedDlRlcBufferReqParameters& params);
+
+  void DoSchedDlPagingBufferReq (const struct FfMacSchedSapProvider::SchedDlPagingBufferReqParameters& params);
+
+  void DoSchedDlMacBufferReq (const struct FfMacSchedSapProvider::SchedDlMacBufferReqParameters& params);
+
+  void DoSchedDlTriggerReq (const struct FfMacSchedSapProvider::SchedDlTriggerReqParameters& params);
+
+  void DoSchedDlRachInfoReq (const struct FfMacSchedSapProvider::SchedDlRachInfoReqParameters& params);
+
+  void DoSchedDlCqiInfoReq (const struct FfMacSchedSapProvider::SchedDlCqiInfoReqParameters& params);
+
+  void DoSchedUlTriggerReq (const struct FfMacSchedSapProvider::SchedUlTriggerReqParameters& params);
+
+  void DoSchedUlNoiseInterferenceReq (const struct FfMacSchedSapProvider::SchedUlNoiseInterferenceReqParameters& params);
+
+  void DoSchedUlSrInfoReq (const struct FfMacSchedSapProvider::SchedUlSrInfoReqParameters& params);
+
+  void DoSchedUlMacCtrlInfoReq (const struct FfMacSchedSapProvider::SchedUlMacCtrlInfoReqParameters& params);
+
+  void DoSchedUlCqiInfoReq (const struct FfMacSchedSapProvider::SchedUlCqiInfoReqParameters& params);
+
+
+  int GetRbgSize (int dlbandwidth);
+
+  int LcActivePerFlow (uint16_t rnti);
+
+  double EstimateUlSinr (uint16_t rnti, uint16_t rb);
+
+  void RefreshDlCqiMaps (void);
+  void RefreshUlCqiMaps (void);
+
+  void UpdateDlRlcBufferInfo (uint16_t rnti, uint8_t lcid, uint16_t size);
+  void UpdateUlRlcBufferInfo (uint16_t rnti, uint16_t size);
+
+  /**
+  * \brief Update and return a new process Id for the RNTI specified
+  *
+  * \param rnti the RNTI of the UE to be updated
+  * \return the process id  value
+  */
+  uint8_t UpdateHarqProcessId (uint16_t rnti);
+
+  /**
+  * \brief Return the availability of free process for the RNTI specified
+  *
+  * \param rnti the RNTI of the UE to be updated
+  * \return the process id  value
+  */
+  uint8_t HarqProcessAvailability (uint16_t rnti);
+
+  /**
+  * \brief Refresh HARQ processes according to the timers
+  *
+  */
+  void RefreshHarqProcesses ();
+
+  Ptr<LteAmc> m_amc;
+
+  /*
+   * Vectors of UE's LC info
+  */
+  std::map <LteFlowId_t, FfMacSchedSapProvider::SchedDlRlcBufferReqParameters> m_rlcBufferReq;
+
+
+  /*
+  * Map of UE statistics (per RNTI basis) in downlink
+  */
+  std::map <uint16_t, CqasFlowPerf_t> m_flowStatsDl;
+
+  /*
+  * Map of UE statistics (per RNTI basis)
+  */
+  std::map <uint16_t, CqasFlowPerf_t> m_flowStatsUl;
+
+  std::map <LteFlowId_t,struct LogicalChannelConfigListElement_s> m_ueLogicalChannelsConfigList;
+
+  /*
+  * Map of UE's DL CQI P01 received
+  */
+  std::map <uint16_t,uint8_t> m_p10CqiRxed;
+  /*
+  * Map of UE's timers on DL CQI P01 received
+  */
+  std::map <uint16_t,uint32_t> m_p10CqiTimers;
+
+  /*
+  * Map of UE's DL CQI A30 received
+  */
+  std::map <uint16_t,SbMeasResult_s> m_a30CqiRxed;
+  /*
+  * Map of UE's timers on DL CQI A30 received
+  */
+  std::map <uint16_t,uint32_t> m_a30CqiTimers;
+
+  /*
+  * Map of previous allocated UE per RBG
+  * (used to retrieve info from UL-CQI)
+  */
+  std::map <uint16_t, std::vector <uint16_t> > m_allocationMaps;
+
+  /*
+  * Map of UEs' UL-CQI per RBG
+  */
+  std::map <uint16_t, std::vector <double> > m_ueCqi;
+  /*
+  * Map of UEs' timers on UL-CQI per RBG
+  */
+  std::map <uint16_t, uint32_t> m_ueCqiTimers;
+
+  /*
+  * Map of UE's buffer status reports received
+  */
+  std::map <uint16_t,uint32_t> m_ceBsrRxed;
+
+  // MAC SAPs
+  FfMacCschedSapUser* m_cschedSapUser;
+  FfMacSchedSapUser* m_schedSapUser;
+  FfMacCschedSapProvider* m_cschedSapProvider;
+  FfMacSchedSapProvider* m_schedSapProvider;
+
+
+  // Internal parameters
+  FfMacCschedSapProvider::CschedCellConfigReqParameters m_cschedCellConfig;
+
+
+  double m_timeWindow;
+
+  uint16_t m_nextRntiUl; // RNTI of the next user to be served next scheduling in UL
+
+  uint32_t m_cqiTimersThreshold; // # of TTIs for which a CQI canbe considered valid
+
+  std::map <uint16_t,uint8_t> m_uesTxMode; // txMode of the UEs
+
+  // HARQ attributes
+  /**
+  * m_harqOn when false inhibit te HARQ mechanisms (by default active)
+  */
+  bool m_harqOn;
+  std::map <uint16_t, uint8_t> m_dlHarqCurrentProcessId;
+  //HARQ status
+  // 0: process Id available
+  // x>0: process Id equal to `x` trasmission count
+  std::map <uint16_t, DlHarqProcessesStatus_t> m_dlHarqProcessesStatus;
+  std::map <uint16_t, DlHarqProcessesTimer_t> m_dlHarqProcessesTimer;
+  std::map <uint16_t, DlHarqProcessesDciBuffer_t> m_dlHarqProcessesDciBuffer;
+  std::map <uint16_t, DlHarqRlcPduListBuffer_t> m_dlHarqProcessesRlcPduListBuffer;
+  std::vector <DlInfoListElement_s> m_dlInfoListBuffered; // HARQ retx buffered
+
+  std::map <uint16_t, uint8_t> m_ulHarqCurrentProcessId;
+  //HARQ status
+  // 0: process Id available
+  // x>0: process Id equal to `x` trasmission count
+  std::map <uint16_t, UlHarqProcessesStatus_t> m_ulHarqProcessesStatus;
+  std::map <uint16_t, UlHarqProcessesDciBuffer_t> m_ulHarqProcessesDciBuffer;
+
+
+  // RACH attributes
+  std::vector <struct RachListElement_s> m_rachList;
+  std::vector <uint16_t> m_rachAllocationMap;
+  uint8_t m_ulGrantMcs; // MCS for UL grant (default 0)
+
+
+  std::string m_CqaMetric;
+
+};
+
+} // namespace ns3
+
+#endif /* QOS_FF_MAC_SCHEDULER_H */
diff -Naur ns-3.19/src/lte/model/epc-enb-application.cc ns-3.20/src/lte/model/epc-enb-application.cc
--- ns-3.19/src/lte/model/epc-enb-application.cc	2014-06-17 10:34:00.724634453 -0700
+++ ns-3.20/src/lte/model/epc-enb-application.cc	2014-06-17 10:33:14.078994534 -0700
@@ -33,8 +33,7 @@
 
 namespace ns3 {
 
-NS_LOG_COMPONENT_DEFINE ("EpcEnbApplication")
-  ;
+NS_LOG_COMPONENT_DEFINE ("EpcEnbApplication");
 
 
 EpcEnbApplication::EpsFlowId_t::EpsFlowId_t ()
diff -Naur ns-3.19/src/lte/model/epc-gtpu-header.cc ns-3.20/src/lte/model/epc-gtpu-header.cc
--- ns-3.19/src/lte/model/epc-gtpu-header.cc	2014-06-17 10:34:00.726634438 -0700
+++ ns-3.20/src/lte/model/epc-gtpu-header.cc	2014-06-17 10:33:14.079994526 -0700
@@ -30,8 +30,7 @@
  *        GTP-U-v1 Header
  ********************************************************/
 
-NS_OBJECT_ENSURE_REGISTERED (GtpuHeader)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (GtpuHeader);
 
 TypeId
 GtpuHeader::GetTypeId (void)
diff -Naur ns-3.19/src/lte/model/epc-mme.cc ns-3.20/src/lte/model/epc-mme.cc
--- ns-3.19/src/lte/model/epc-mme.cc	2014-06-17 10:34:00.726634438 -0700
+++ ns-3.20/src/lte/model/epc-mme.cc	2014-06-17 10:33:14.080994518 -0700
@@ -33,8 +33,7 @@
 
 
 
-NS_OBJECT_ENSURE_REGISTERED (EpcMme)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (EpcMme);
 
 EpcMme::EpcMme ()
   : m_s11SapSgw (0)
diff -Naur ns-3.19/src/lte/model/epc-sgw-pgw-application.cc ns-3.20/src/lte/model/epc-sgw-pgw-application.cc
--- ns-3.19/src/lte/model/epc-sgw-pgw-application.cc	2014-06-17 10:34:00.728634422 -0700
+++ ns-3.20/src/lte/model/epc-sgw-pgw-application.cc	2014-06-17 10:33:14.082994503 -0700
@@ -30,8 +30,7 @@
 
 namespace ns3 {
 
-NS_LOG_COMPONENT_DEFINE ("EpcSgwPgwApplication")
-  ;
+NS_LOG_COMPONENT_DEFINE ("EpcSgwPgwApplication");
 
 
 /////////////////////////
diff -Naur ns-3.19/src/lte/model/epc-tft.cc ns-3.20/src/lte/model/epc-tft.cc
--- ns-3.19/src/lte/model/epc-tft.cc	2014-06-17 10:34:00.730634407 -0700
+++ ns-3.20/src/lte/model/epc-tft.cc	2014-06-17 10:33:14.083994495 -0700
@@ -28,8 +28,7 @@
 
 namespace ns3 {
 
-NS_LOG_COMPONENT_DEFINE ("EpcTft")
-  ;
+NS_LOG_COMPONENT_DEFINE ("EpcTft");
 
 std::ostream& operator<< (std::ostream& os, EpcTft::Direction& d)
 {
diff -Naur ns-3.19/src/lte/model/epc-ue-nas.cc ns-3.20/src/lte/model/epc-ue-nas.cc
--- ns-3.19/src/lte/model/epc-ue-nas.cc	2014-06-17 10:34:00.730634407 -0700
+++ ns-3.20/src/lte/model/epc-ue-nas.cc	2014-06-17 10:33:14.084994488 -0700
@@ -35,7 +35,7 @@
 
 
 
-const char* g_ueNasStateName[EpcUeNas::NUM_STATES] =
+static const std::string g_ueNasStateName[EpcUeNas::NUM_STATES] =
 {
   "OFF",
   "ATTACHING",
@@ -44,16 +44,15 @@
   "ACTIVE"
 };
 
-std::string ToString (EpcUeNas::State s)
+static inline const std::string & ToString (EpcUeNas::State s)
 {
-  return std::string (g_ueNasStateName[s]);
+  return g_ueNasStateName[s];
 }
 
 
 
 
-NS_OBJECT_ENSURE_REGISTERED (EpcUeNas)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (EpcUeNas);
 
 EpcUeNas::EpcUeNas ()
   : m_state (OFF),
diff -Naur ns-3.19/src/lte/model/epc-x2.cc ns-3.20/src/lte/model/epc-x2.cc
--- ns-3.19/src/lte/model/epc-x2.cc	2014-06-17 10:34:00.734634376 -0700
+++ ns-3.20/src/lte/model/epc-x2.cc	2014-06-17 10:33:14.088994457 -0700
@@ -80,8 +80,7 @@
 
 ///////////////////////////////////////////
 
-NS_OBJECT_ENSURE_REGISTERED (EpcX2)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (EpcX2);
 
 EpcX2::EpcX2 ()
   : m_x2cUdpPort (4444),
diff -Naur ns-3.19/src/lte/model/epc-x2-header.cc ns-3.20/src/lte/model/epc-x2-header.cc
--- ns-3.19/src/lte/model/epc-x2-header.cc	2014-06-17 10:34:00.732634392 -0700
+++ ns-3.20/src/lte/model/epc-x2-header.cc	2014-06-17 10:33:14.085994480 -0700
@@ -27,8 +27,7 @@
 namespace ns3 {
 
 
-NS_OBJECT_ENSURE_REGISTERED (EpcX2Header)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (EpcX2Header);
 
 EpcX2Header::EpcX2Header ()
   : m_messageType (0xfa),
@@ -146,8 +145,7 @@
 
 /////////////////////////////////////////////////////////////////////
 
-NS_OBJECT_ENSURE_REGISTERED (EpcX2HandoverRequestHeader)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (EpcX2HandoverRequestHeader);
 
 EpcX2HandoverRequestHeader::EpcX2HandoverRequestHeader ()
   : m_numberOfIes (1 + 1 + 1 + 1),
@@ -435,8 +433,7 @@
 
 /////////////////////////////////////////////////////////////////////
 
-NS_OBJECT_ENSURE_REGISTERED (EpcX2HandoverRequestAckHeader)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (EpcX2HandoverRequestAckHeader);
 
 EpcX2HandoverRequestAckHeader::EpcX2HandoverRequestAckHeader ()
   : m_numberOfIes (1 + 1 + 1 + 1),
@@ -661,8 +658,7 @@
 
 /////////////////////////////////////////////////////////////////////
 
-NS_OBJECT_ENSURE_REGISTERED (EpcX2HandoverPreparationFailureHeader)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (EpcX2HandoverPreparationFailureHeader);
 
 EpcX2HandoverPreparationFailureHeader::EpcX2HandoverPreparationFailureHeader ()
   : m_numberOfIes (1 + 1 + 1),
@@ -787,8 +783,7 @@
 
 /////////////////////////////////////////////////////////////////////
 
-NS_OBJECT_ENSURE_REGISTERED (EpcX2SnStatusTransferHeader)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (EpcX2SnStatusTransferHeader);
 
 EpcX2SnStatusTransferHeader::EpcX2SnStatusTransferHeader ()
   : m_numberOfIes (3),
@@ -980,8 +975,7 @@
 
 /////////////////////////////////////////////////////////////////////
 
-NS_OBJECT_ENSURE_REGISTERED (EpcX2UeContextReleaseHeader)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (EpcX2UeContextReleaseHeader);
 
 EpcX2UeContextReleaseHeader::EpcX2UeContextReleaseHeader ()
   : m_numberOfIes (1 + 1),
@@ -1088,8 +1082,7 @@
 
 /////////////////////////////////
 
-NS_OBJECT_ENSURE_REGISTERED (EpcX2LoadInformationHeader)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (EpcX2LoadInformationHeader);
 
 EpcX2LoadInformationHeader::EpcX2LoadInformationHeader ()
   : m_numberOfIes (1),
@@ -1313,8 +1306,7 @@
 
 ////////////////
 
-NS_OBJECT_ENSURE_REGISTERED (EpcX2ResourceStatusUpdateHeader)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (EpcX2ResourceStatusUpdateHeader);
 
 EpcX2ResourceStatusUpdateHeader::EpcX2ResourceStatusUpdateHeader ()
   : m_numberOfIes (3),
diff -Naur ns-3.19/src/lte/model/eps-bearer-tag.cc ns-3.20/src/lte/model/eps-bearer-tag.cc
--- ns-3.19/src/lte/model/eps-bearer-tag.cc	2014-06-17 10:34:00.734634376 -0700
+++ ns-3.20/src/lte/model/eps-bearer-tag.cc	2014-06-17 10:33:14.088994457 -0700
@@ -26,8 +26,7 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (EpsBearerTag)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (EpsBearerTag);
 
 TypeId
 EpsBearerTag::GetTypeId (void)
diff -Naur ns-3.19/src/lte/model/fdbet-ff-mac-scheduler.cc ns-3.20/src/lte/model/fdbet-ff-mac-scheduler.cc
--- ns-3.19/src/lte/model/fdbet-ff-mac-scheduler.cc	2014-06-17 10:34:01.091631620 -0700
+++ ns-3.20/src/lte/model/fdbet-ff-mac-scheduler.cc	2014-06-17 10:33:14.421991887 -0700
@@ -35,7 +35,7 @@
 
 namespace ns3 {
 
-int FdBetType0AllocationRbg[4] = {
+static const int FdBetType0AllocationRbg[4] = {
   10,       // RGB size 1
   26,       // RGB size 2
   63,       // RGB size 3
@@ -43,8 +43,7 @@
 };  // see table 7.1.6.1-1 of 36.213
 
 
-NS_OBJECT_ENSURE_REGISTERED (FdBetFfMacScheduler)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (FdBetFfMacScheduler);
 
 
 
@@ -1526,6 +1525,7 @@
     {
       if (ret.m_dciList.size () > 0)
         {
+          m_allocationMaps.insert (std::pair <uint16_t, std::vector <uint16_t> > (params.m_sfnSf, rbgAllocationMap));
           m_schedSapUser->SchedUlConfigInd (ret);
         }
         
@@ -1593,7 +1593,7 @@
       uldci.m_rbLen = rbPerFlow;
       bool allocated = false;
       NS_LOG_INFO (this << " RB Allocated " << rbAllocated << " rbPerFlow " << rbPerFlow << " flows " << nflows);
-      while ((!allocated)&&((rbAllocated + rbPerFlow - 1) < m_cschedCellConfig.m_ulBandwidth) && (rbPerFlow != 0))
+      while ((!allocated)&&((rbAllocated + rbPerFlow - m_cschedCellConfig.m_ulBandwidth) < 1) && (rbPerFlow != 0))
         {
           // check availability
           bool free = true;
diff -Naur ns-3.19/src/lte/model/fdmt-ff-mac-scheduler.cc ns-3.20/src/lte/model/fdmt-ff-mac-scheduler.cc
--- ns-3.19/src/lte/model/fdmt-ff-mac-scheduler.cc	2014-06-17 10:34:01.093631604 -0700
+++ ns-3.20/src/lte/model/fdmt-ff-mac-scheduler.cc	2014-06-17 10:33:14.423991871 -0700
@@ -35,7 +35,7 @@
 
 namespace ns3 {
 
-int FdMtType0AllocationRbg[4] = {
+static const int FdMtType0AllocationRbg[4] = {
   10,       // RGB size 1
   26,       // RGB size 2
   63,       // RGB size 3
@@ -43,8 +43,7 @@
 };  // see table 7.1.6.1-1 of 36.213
 
 
-NS_OBJECT_ENSURE_REGISTERED (FdMtFfMacScheduler)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (FdMtFfMacScheduler);
 
 
 
@@ -1505,6 +1504,7 @@
     {
       if (ret.m_dciList.size () > 0)
         {
+          m_allocationMaps.insert (std::pair <uint16_t, std::vector <uint16_t> > (params.m_sfnSf, rbgAllocationMap));
           m_schedSapUser->SchedUlConfigInd (ret);
         }
         
@@ -1571,7 +1571,7 @@
       uldci.m_rbLen = rbPerFlow;
       bool allocated = false;
       NS_LOG_INFO (this << " RB Allocated " << rbAllocated << " rbPerFlow " << rbPerFlow << " flows " << nflows);
-      while ((!allocated)&&((rbAllocated + rbPerFlow - 1) < m_cschedCellConfig.m_ulBandwidth) && (rbPerFlow != 0))
+      while ((!allocated)&&((rbAllocated + rbPerFlow - m_cschedCellConfig.m_ulBandwidth) < 1) && (rbPerFlow != 0))
         {
           // check availability
           bool free = true;
diff -Naur ns-3.19/src/lte/model/fdtbfq-ff-mac-scheduler.cc ns-3.20/src/lte/model/fdtbfq-ff-mac-scheduler.cc
--- ns-3.19/src/lte/model/fdtbfq-ff-mac-scheduler.cc	2014-06-17 10:34:01.095631589 -0700
+++ ns-3.20/src/lte/model/fdtbfq-ff-mac-scheduler.cc	2014-06-17 10:33:14.425991856 -0700
@@ -36,7 +36,7 @@
 
 namespace ns3 {
 
-int FdTbfqType0AllocationRbg[4] = {
+static const int FdTbfqType0AllocationRbg[4] = {
   10,       // RGB size 1
   26,       // RGB size 2
   63,       // RGB size 3
@@ -44,8 +44,7 @@
 };  // see table 7.1.6.1-1 of 36.213
 
 
-NS_OBJECT_ENSURE_REGISTERED (FdTbfqFfMacScheduler)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (FdTbfqFfMacScheduler);
 
 
 
@@ -1755,6 +1754,7 @@
     {
       if (ret.m_dciList.size () > 0)
         {
+          m_allocationMaps.insert (std::pair <uint16_t, std::vector <uint16_t> > (params.m_sfnSf, rbgAllocationMap));
           m_schedSapUser->SchedUlConfigInd (ret);
         }
         
@@ -1822,7 +1822,7 @@
       uldci.m_rbLen = rbPerFlow;
       bool allocated = false;
       NS_LOG_INFO (this << " RB Allocated " << rbAllocated << " rbPerFlow " << rbPerFlow << " flows " << nflows);
-      while ((!allocated)&&((rbAllocated + rbPerFlow - 1) < m_cschedCellConfig.m_ulBandwidth) && (rbPerFlow != 0))
+      while ((!allocated)&&((rbAllocated + rbPerFlow - m_cschedCellConfig.m_ulBandwidth) < 1) && (rbPerFlow != 0))
         {
           // check availability
           bool free = true;
diff -Naur ns-3.19/src/lte/model/ff-mac-scheduler.cc ns-3.20/src/lte/model/ff-mac-scheduler.cc
--- ns-3.19/src/lte/model/ff-mac-scheduler.cc	2014-06-17 10:34:01.097631573 -0700
+++ ns-3.20/src/lte/model/ff-mac-scheduler.cc	2014-06-17 10:33:14.427991840 -0700
@@ -28,8 +28,7 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (FfMacScheduler)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (FfMacScheduler);
 
 
 FfMacScheduler::FfMacScheduler ()
diff -Naur ns-3.19/src/lte/model/lte-amc.cc ns-3.20/src/lte/model/lte-amc.cc
--- ns-3.19/src/lte/model/lte-amc.cc	2014-06-17 10:34:01.098631566 -0700
+++ ns-3.20/src/lte/model/lte-amc.cc	2014-06-17 10:33:14.428991833 -0700
@@ -36,14 +36,13 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (LteAmc)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (LteAmc);
 
 // from 3GPP R1-081483 "Conveying MCS and TB size via PDCCH"
 // file TBS_support.xls
 // tab "MCS table" (rounded to 2 decimal digits)
 // the index in the vector (0-15) identifies the CQI value
-double SpectralEfficiencyForCqi[16] = {
+static const double SpectralEfficiencyForCqi[16] = {
   0.0, // out of range
   0.15, 0.23, 0.38, 0.6, 0.88, 1.18,
   1.48, 1.91, 2.41,
@@ -51,12 +50,13 @@
 };
 
 
+#if 0 // currently unused
 // Table 7.1.7.1-1 of 3GPP TS 36.213 v8.8.0
 // the index in the vector (range 0-31; valid values 0-28) identifies the MCS index
 // note that this is similar to the one in R1-081483 but:
 //  1) a few values are different
 //  2) in R1-081483, a valid MCS index is in the range 1-30 (not 0-28)
-int ModulationSchemeForMcs[32] = {
+static const int ModulationSchemeForMcs[32] = {
   2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 
   4, 4, 4, 4, 4, 4, 4,
   6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
@@ -64,6 +64,7 @@
   4,  // reserved
   6,  // reserved
 };
+#endif
 
 
 // from 3GPP R1-081483 "Conveying MCS and TB size via PDCCH"
@@ -71,7 +72,7 @@
 // tab "MCS table" (rounded to 2 decimal digits)
 // the index in the table corresponds to the MCS index according to the convention in TS 36.213
 // (i.e., the MCS index reported in R1-081483 minus one)
-double SpectralEfficiencyForMcs[32] = {
+static const double SpectralEfficiencyForMcs[32] = {
   0.15, 0.19, 0.23, 0.31, 0.38, 0.49, 0.6, 0.74, 0.88, 1.03, 1.18,
   1.33, 1.48, 1.7, 1.91, 2.16, 2.41, 2.57,
   2.73, 3.03, 3.32, 3.61, 3.9, 4.21, 4.52, 4.82, 5.12, 5.33, 5.55,
@@ -79,7 +80,7 @@
 };
 
 // Table 7.1.7.1-1 of 3GPP TS 36.213 v8.8.0
-int McsToItbs[29] = {
+static const int McsToItbs[29] = {
   0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 9, 10, 11, 12, 13, 14, 15, 15, 16, 17, 18,
   19, 20, 21, 22, 23, 24, 25, 26
 };
@@ -88,7 +89,7 @@
 // 3GPP TS 36.213 v8.8.0 Table 7.1.7.2.1-1: Transport block size table (dimension 27Ã—110)
 // for NPRB = 1 and Itbs = 6 the stadard returns 328, but it not consisent with the
 // other values, therefore we used 88 obtained following the sequence of NPRB = 1 values
-int TransportBlockSizeTable [110][27] = {
+static const int TransportBlockSizeTable [110][27] = {
 
   /* NPRB 001*/
   { 16, 24, 32, 40, 56, 72, 88, 104, 120, 136, 144, 176, 208, 224, 256, 280, 328, 336, 376, 408, 440, 488, 520, 552, 584, 616, 712},
diff -Naur ns-3.19/src/lte/model/lte-anr.cc ns-3.20/src/lte/model/lte-anr.cc
--- ns-3.19/src/lte/model/lte-anr.cc	2014-06-17 10:34:01.100631550 -0700
+++ ns-3.20/src/lte/model/lte-anr.cc	2014-06-17 10:33:13.612998130 -0700
@@ -33,8 +33,7 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (LteAnr)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (LteAnr);
 
 
 LteAnr::LteAnr (uint16_t servingCellId)
diff -Naur ns-3.19/src/lte/model/lte-asn1-header.cc ns-3.20/src/lte/model/lte-asn1-header.cc
--- ns-3.19/src/lte/model/lte-asn1-header.cc	2014-06-17 10:34:01.101631542 -0700
+++ ns-3.20/src/lte/model/lte-asn1-header.cc	2014-06-17 10:33:13.614998115 -0700
@@ -29,8 +29,7 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (Asn1Header)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (Asn1Header);
 
 TypeId
 Asn1Header::GetTypeId (void)
diff -Naur ns-3.19/src/lte/model/lte-common.cc ns-3.20/src/lte/model/lte-common.cc
--- ns-3.19/src/lte/model/lte-common.cc	2014-06-17 10:34:01.102631535 -0700
+++ ns-3.20/src/lte/model/lte-common.cc	2014-06-17 10:33:13.615998107 -0700
@@ -127,7 +127,7 @@
 //static double g_lowestFpS11dot3Value = -4096; // 0x8001 (1000 0000 0000 0000)
 
 
-uint32_t BufferSizeLevelBsrTable[64] = {
+static const uint32_t BufferSizeLevelBsrTable[64] = {
 
   0, 10, 12, 14, 17, 19, 22, 26, 31, 36, 42, 49, 57, 67, 78, 91, 
   107, 125, 146, 171, 200, 234, 274, 321, 376, 440, 515, 603, 
diff -Naur ns-3.19/src/lte/model/lte-enb-mac.cc ns-3.20/src/lte/model/lte-enb-mac.cc
--- ns-3.19/src/lte/model/lte-enb-mac.cc	2014-06-17 10:34:01.107631496 -0700
+++ ns-3.20/src/lte/model/lte-enb-mac.cc	2014-06-17 10:33:13.621998061 -0700
@@ -43,8 +43,7 @@
 namespace ns3 {
 
 
-NS_OBJECT_ENSURE_REGISTERED (LteEnbMac)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (LteEnbMac);
 
 
 
diff -Naur ns-3.19/src/lte/model/lte-enb-net-device.cc ns-3.20/src/lte/model/lte-enb-net-device.cc
--- ns-3.19/src/lte/model/lte-enb-net-device.cc	2014-06-17 10:34:01.109631480 -0700
+++ ns-3.20/src/lte/model/lte-enb-net-device.cc	2014-06-17 10:33:13.623998045 -0700
@@ -48,8 +48,7 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED ( LteEnbNetDevice)
-  ;
+NS_OBJECT_ENSURE_REGISTERED ( LteEnbNetDevice);
 
 TypeId LteEnbNetDevice::GetTypeId (void)
 {
diff -Naur ns-3.19/src/lte/model/lte-enb-phy.cc ns-3.20/src/lte/model/lte-enb-phy.cc
--- ns-3.19/src/lte/model/lte-enb-phy.cc	2014-06-17 10:34:01.112631458 -0700
+++ ns-3.20/src/lte/model/lte-enb-phy.cc	2014-06-17 10:33:13.626998022 -0700
@@ -49,8 +49,7 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (LteEnbPhy)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (LteEnbPhy);
 
 // duration of the data part of a subframe in DL
 // = 0.001 / 14 * 11 (fixed to 11 symbols) -1ns as margin to avoid overlapping simulator events
@@ -814,7 +813,7 @@
   m_ulBandwidth = ulBandwidth;
   m_dlBandwidth = dlBandwidth;
 
-  int Type0AllocationRbg[4] = {
+  static const int Type0AllocationRbg[4] = {
     10,     // RGB size 1
     26,     // RGB size 2
     63,     // RGB size 3
diff -Naur ns-3.19/src/lte/model/lte-enb-rrc.cc ns-3.20/src/lte/model/lte-enb-rrc.cc
--- ns-3.19/src/lte/model/lte-enb-rrc.cc	2014-06-17 10:34:01.116631427 -0700
+++ ns-3.20/src/lte/model/lte-enb-rrc.cc	2014-06-17 10:33:13.632997976 -0700
@@ -100,7 +100,7 @@
 ///////////////////////////////////////////
 
 
-const char* g_ueManagerStateName[UeManager::NUM_STATES] = 
+static const std::string g_ueManagerStateName[UeManager::NUM_STATES] =
 {
   "INITIAL_RANDOM_ACCESS",
   "CONNECTION_SETUP",
@@ -114,14 +114,13 @@
   "HANDOVER_LEAVING",
 };
 
-std::string ToString (UeManager::State s)
+static const std::string & ToString (UeManager::State s)
 {
-  return std::string (g_ueManagerStateName[s]);
+  return g_ueManagerStateName[s];
 }
 
 
-NS_OBJECT_ENSURE_REGISTERED (UeManager)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (UeManager);
 
 
 UeManager::UeManager ()
@@ -1042,7 +1041,7 @@
 {
   NS_LOG_FUNCTION (this);
   const uint8_t MAX_DRB_ID = 32;  
-  for (uint8_t drbid = (m_lastAllocatedDrbid + 1) % MAX_DRB_ID; 
+  for (int drbid = (m_lastAllocatedDrbid + 1) % MAX_DRB_ID; 
        drbid != m_lastAllocatedDrbid; 
        drbid = (drbid + 1) % MAX_DRB_ID)
     {
@@ -1220,8 +1219,7 @@
 // eNB RRC methods
 ///////////////////////////////////////////
 
-NS_OBJECT_ENSURE_REGISTERED (LteEnbRrc)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (LteEnbRrc);
 
 LteEnbRrc::LteEnbRrc ()
   : m_x2SapProvider (0),
@@ -2197,10 +2195,10 @@
 
 
 // from 3GPP TS 36.213 table 8.2-1 UE Specific SRS Periodicity
-const uint8_t SRS_ENTRIES = 9;
-uint16_t g_srsPeriodicity[SRS_ENTRIES] = {0, 2, 5, 10, 20, 40,  80, 160, 320};
-uint16_t g_srsCiLow[SRS_ENTRIES] =       {0, 0, 2,  7, 17, 37,  77, 157, 317};
-uint16_t g_srsCiHigh[SRS_ENTRIES] =      {0, 1, 6, 16, 36, 76, 156, 316, 636};
+static const uint8_t SRS_ENTRIES = 9;
+static const uint16_t g_srsPeriodicity[SRS_ENTRIES] = {0, 2, 5, 10, 20, 40,  80, 160, 320};
+static const uint16_t g_srsCiLow[SRS_ENTRIES] =       {0, 0, 2,  7, 17, 37,  77, 157, 317};
+static const uint16_t g_srsCiHigh[SRS_ENTRIES] =      {0, 1, 6, 16, 36, 76, 156, 316, 636};
 
 void 
 LteEnbRrc::SetSrsPeriodicity (uint32_t p)
diff -Naur ns-3.19/src/lte/model/lte-handover-algorithm.cc ns-3.20/src/lte/model/lte-handover-algorithm.cc
--- ns-3.19/src/lte/model/lte-handover-algorithm.cc	2014-06-17 10:34:01.118631411 -0700
+++ ns-3.20/src/lte/model/lte-handover-algorithm.cc	2014-06-17 10:33:13.634997960 -0700
@@ -26,8 +26,7 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (LteHandoverAlgorithm)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (LteHandoverAlgorithm);
 
 
 LteHandoverAlgorithm::LteHandoverAlgorithm ()
diff -Naur ns-3.19/src/lte/model/lte-mi-error-model.cc ns-3.20/src/lte/model/lte-mi-error-model.cc
--- ns-3.19/src/lte/model/lte-mi-error-model.cc	2014-06-17 10:34:00.270637958 -0700
+++ ns-3.20/src/lte/model/lte-mi-error-model.cc	2014-06-17 10:33:13.640997914 -0700
@@ -47,7 +47,7 @@
 namespace ns3 {
 
   // global table of the effective code rates (ECR)s that have BLER performance curves
-  double BlerCurvesEcrMap[38] = {
+  static const double BlerCurvesEcrMap[38] = {
     // QPSK (M=2)
     0.01, 0.026, 0.04,   // ECRs of MCS0 retx
     0.08, 0.1, 0.11, 0.15, 0.19, 0.24, 0.3, 0.37, 0.44, 0.51, // ECRs of MCSs
@@ -60,24 +60,26 @@
   };
 
   // Table codifing standard MCSs ECR to available ECRs
-  uint8_t McsEcrBlerTableMapping[29] = {
+  static const uint8_t McsEcrBlerTableMapping[29] = {
     3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
     16, 17, 18, 19, 20, 21, 22,
     26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37    
   };
 
   // Table of ECR of the standard MCSs
-  double McsEcrTable [29] = {0.08, 0.1, 0.11, 0.15, 0.19, 0.24, 0.3, 0.37, 0.44, 0.51, 0.3, 0.33, 0.37, 0.42, 0.48, 0.54, 0.6, 0.43, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.89, 0.92
+  static const double McsEcrTable [29] = {0.08, 0.1, 0.11, 0.15, 0.19, 0.24, 0.3, 0.37, 0.44, 0.51, 0.3, 0.33, 0.37, 0.42, 0.48, 0.54, 0.6, 0.43, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.89, 0.92
   };
 
+#if 0 // currently unused
   // Table with ECRs obtained with retransmissions with BLER curves
-  double HarqRetxEcr[9] = {0.00064, 0.000512, 0.000041, 0.09, 0.027, 0.0081, 0.185, 0.079, 0.034    
+  static const double HarqRetxEcr[9] = {0.00064, 0.000512, 0.000041, 0.09, 0.027, 0.0081, 0.185, 0.079, 0.034
   };
+#endif
  
   // PCFICH-PDCCH Error model based on 3GPP R4-081920 "LTE PDCCH/PCFICH
   //  Demodulation Performance Results with Implementation Margin"
   
-  double PdcchPcfichBlerCurveXaxis[PDCCH_PCFICH_CURVE_SIZE] = {
+  static const double PdcchPcfichBlerCurveXaxis[PDCCH_PCFICH_CURVE_SIZE] = {
       -10,-9.8,-9.6, -9.4, -9.2, -9.0, -8.8, -8.6, -8.4, -8.2, -8.0,
       -7.8, -7.6, -7.4, -7.2, -7.0, -6.8, -6.6, -6.4,   -6.2, -6.0, 
       -5.8, -5.6, -5.4, -5.2, -5.0, -4.8, -4.6, -4.4, -4.2, -4.0, 
@@ -85,7 +87,7 @@
       -1.8, -1.6, -1.4, -1.2, -1.0
   };
   
-  double PdcchPcfichBlerCurveYaxis[PDCCH_PCFICH_CURVE_SIZE] = {
+  static const double PdcchPcfichBlerCurveYaxis[PDCCH_PCFICH_CURVE_SIZE] = {
     0.922602, 0.871559, 0.82334, 0.777789, 0.734758, 0.694107, 0.655706,
     0.619429, 0.585159, 0.552785, 0.520927, 0.479229, 0.440869, 0.405579,
     0.373114, 0.343104, 0.309947,0.279994, 0.252936, 0.228492, 0.206048,
@@ -96,9 +98,11 @@
   
   };
   
-  int TbsIndex[32] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 9, 10, 11, 12, 13, 14, 15, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, -1, -1, -1};
+#if 0 // currently unused
+  static const int TbsIndex[32] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 9, 10, 11, 12, 13, 14, 15, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, -1, -1, -1};
+#endif
   
-  uint16_t cbSizeTable[188] = {   // as K column of table 5.1.3-3 of TS 36,212
+  static const uint16_t cbSizeTable[188] = {   // as K column of table 5.1.3-3 of TS 36,212
     
     40, 48, 56, 64, 72, 80, 88, 96, 104, 112, 120, 128, 136, 144, 152,
     160, 168, 176, 184, 192, 200, 208, 216, 224, 232, 240, 248, 256, 264,
@@ -114,43 +118,41 @@
     5824, 5888, 5952, 6016, 6080, 6144   
   };
   
-  ;
-  
-uint16_t cbMiSizeTable [9] = {40, 104, 160, 256, 512, 1024, 2560, 4032, 6144};
+static const uint16_t cbMiSizeTable [9] = {40, 104, 160, 256, 512, 1024, 2560, 4032, 6144};
 
 
-double MI_map_qpsk[MI_MAP_QPSK_SIZE] = {
+static const double MI_map_qpsk[MI_MAP_QPSK_SIZE] = {
   0.008922, 0.011813, 0.014697, 0.017570, 0.020430, 0.023276, 0.026109, 0.028929, 0.031734, 0.034526, 0.037304, 0.040069, 0.042821, 0.045559, 0.048285, 0.050999, 0.053700, 0.056389, 0.059066, 0.061731, 0.064384, 0.067026, 0.069657, 0.072277, 0.074885, 0.077483, 0.080070, 0.082647, 0.085213, 0.087769, 0.090315, 0.092850, 0.095376, 0.097892, 0.100399, 0.102895, 0.105383, 0.107861, 0.110329, 0.112789, 0.115239, 0.117680, 0.120113, 0.122536, 0.124951, 0.127357, 0.129755, 0.132144, 0.134525, 0.136897, 0.139261, 0.141616, 0.143964, 0.146303, 0.148635, 0.150958, 0.153273, 0.155581, 0.157881, 0.160173, 0.162457, 0.164734, 0.167003, 0.169265, 0.171519, 0.173765, 0.176005, 0.178237, 0.180461, 0.182679, 0.184889, 0.187092, 0.189288, 0.191477, 0.193659, 0.195834, 0.198002, 0.200164, 0.202318, 0.204465, 0.206606, 0.208740, 0.210867, 0.212988, 0.215102, 0.217209, 0.219310, 0.221405, 0.223492, 0.225574, 0.227649, 0.229717, 0.231780, 0.233835, 0.235885, 0.237928, 0.239965, 0.241996, 0.244021, 0.246039, 0.248052, 0.250058, 0.252058, 0.254052, 0.256040, 0.258023, 0.259999, 0.261969, 0.263933, 0.265892, 0.267844, 0.269791, 0.271732, 0.273667, 0.275597, 0.277520, 0.279438, 0.281350, 0.283257, 0.285158, 0.287053, 0.288943, 0.290827, 0.292705, 0.294578, 0.296446, 0.298308, 0.300164, 0.302015, 0.303861, 0.305701, 0.307536, 0.309365, 0.311189, 0.313007, 0.314821, 0.316629, 0.318431, 0.320229, 0.322021, 0.323808, 0.325589, 0.327366, 0.329137, 0.330903, 0.332664, 0.334420, 0.336171, 0.337916, 0.339657, 0.341392, 0.343123, 0.344848, 0.346568, 0.348284, 0.349994, 0.351699, 0.353400, 0.355095, 0.356786, 0.358471, 0.360152, 0.361828, 0.363499, 0.365165, 0.366174, 0.367827, 0.369475, 0.371118, 0.372755, 0.374388, 0.376015, 0.377637, 0.379255, 0.380867, 0.382474, 0.384076, 0.385674, 0.387266, 0.388854, 0.390436, 0.392014, 0.393587, 0.395155, 0.396718, 0.398277, 0.399830, 0.401379, 0.402924, 0.404463, 0.405998, 0.407529, 0.409054, 0.410576, 0.412092, 0.413604, 0.415111, 0.416614, 0.418113, 0.419606, 0.421096, 0.422581, 0.424061, 0.425537, 0.427009, 0.428476, 0.429939, 0.431398, 0.432852, 0.434302, 0.435748, 0.437189, 0.438627, 0.440060, 0.441488, 0.442913, 0.444333, 0.445749, 0.447161, 0.448569, 0.449973, 0.451373, 0.452768, 0.454160, 0.455547, 0.456931, 0.458310, 0.459685, 0.461057, 0.462424, 0.463788, 0.465147, 0.466503, 0.467854, 0.469202, 0.470546, 0.471886, 0.473222, 0.474555, 0.475883, 0.477208, 0.478529, 0.479846, 0.481159, 0.482469, 0.483774, 0.485077, 0.486375, 0.487670, 0.488961, 0.490248, 0.491532, 0.492812, 0.494088, 0.495361, 0.496630, 0.497896, 0.499158, 0.500416, 0.501671, 0.502922, 0.504170, 0.505414, 0.506655, 0.507893, 0.509126, 0.510357, 0.511584, 0.512807, 0.514027, 0.515244, 0.516457, 0.517667, 0.518873, 0.520076, 0.521276, 0.522472, 0.523665, 0.524855, 0.526042, 0.527225, 0.528404, 0.529581, 0.530754, 0.531924, 0.533091, 0.534255, 0.535415, 0.536572, 0.537726, 0.538877, 0.540024, 0.541169, 0.542310, 0.543448, 0.544583, 0.545715, 0.546844, 0.547969, 0.549092, 0.550211, 0.551328, 0.552441, 0.553551, 0.554658, 0.555763, 0.556864, 0.557962, 0.559057, 0.560149, 0.561238, 0.562325, 0.563408, 0.564488, 0.565566, 0.566640, 0.567712, 0.568780, 0.569846, 0.570909, 0.571969, 0.573026, 0.574080, 0.575131, 0.576180, 0.577225, 0.578268, 0.579308, 0.580345, 0.581380, 0.582411, 0.583440, 0.584466, 0.585489, 0.586510, 0.587528, 0.588543, 0.589555, 0.590565, 0.591571, 0.592576, 0.593577, 0.594576, 0.595572, 0.596565, 0.597556, 0.598544, 0.599530, 0.600513, 0.601493, 0.602470, 0.603445, 0.604418, 0.605387, 0.606355, 0.607319, 0.608281, 0.609241, 0.610198, 0.611152, 0.612104, 0.613053, 0.614000, 0.614944, 0.615886, 0.616825, 0.617762, 0.618696, 0.619628, 0.620557, 0.621484, 0.622409, 0.623331, 0.624250, 0.625167, 0.626082, 0.626994, 0.627904, 0.628812, 0.629717, 0.630619, 0.631520, 0.632418, 0.633313, 0.634206, 0.635097, 0.635986, 0.636872, 0.637756, 0.638637, 0.639516, 0.640393, 0.641268, 0.642140, 0.643010, 0.643878, 0.644743, 0.645606, 0.646467, 0.647326, 0.648182, 0.649037, 0.649889, 0.650738, 0.651586, 0.652431, 0.653274, 0.654115, 0.654954, 0.655790, 0.656624, 0.657457, 0.658287, 0.659114, 0.659940, 0.660763, 0.661585, 0.662404, 0.663221, 0.664036, 0.664849, 0.665660, 0.666468, 0.667275, 0.668079, 0.668882, 0.669682, 0.670480, 0.671276, 0.672070, 0.672862, 0.673652, 0.674440, 0.675226, 0.676010, 0.676792, 0.677572, 0.678349, 0.679125, 0.679899, 0.680671, 0.681440, 0.682208, 0.682974, 0.683738, 0.684500, 0.685260, 0.686018, 0.686774, 0.687528, 0.688280, 0.689030, 0.689778, 0.690525, 0.691269, 0.692012, 0.692752, 0.693491, 0.694228, 0.694963, 0.695696, 0.696427, 0.697156, 0.697883, 0.698609, 0.699333, 0.700055, 0.700774, 0.701493, 0.702209, 0.702923, 0.703636, 0.704347, 0.705056, 0.705763, 0.706468, 0.707172, 0.707874, 0.708574, 0.709272, 0.709969, 0.710663, 0.711356, 0.712047, 0.712737, 0.713424, 0.714110, 0.714794, 0.715477, 0.716157, 0.716836, 0.717513, 0.718189, 0.718862, 0.719535, 0.720205, 0.720873, 0.721540, 0.722206, 0.722869, 0.723531, 0.724191, 0.724850, 0.725507, 0.726162, 0.726815, 0.727467, 0.728117, 0.728766, 0.729413, 0.730058, 0.730702, 0.731344, 0.731984, 0.732623, 0.733260, 0.733896, 0.734530, 0.735162, 0.735793, 0.736422, 0.737050, 0.737676, 0.738300, 0.738923, 0.739544, 0.740164, 0.740782, 0.741399, 0.742014, 0.742627, 0.743239, 0.743850, 0.744459, 0.745066, 0.745672, 0.746276, 0.746879, 0.747480, 0.748080, 0.748678, 0.749275, 0.749870, 0.750464, 0.751056, 0.751647, 0.752236, 0.752824, 0.753410, 0.753995, 0.754579, 0.755161, 0.755741, 0.756320, 0.756898, 0.757474, 0.758049, 0.758622, 0.759194, 0.759764, 0.760333, 0.760901, 0.761467, 0.762032, 0.762595, 0.763157, 0.763717, 0.764277, 0.764834, 0.765391, 0.765946, 0.766499, 0.767051, 0.767602, 0.768152, 0.768700, 0.769246, 0.769792, 0.770336, 0.770878, 0.771419, 0.771959, 0.772498, 0.773035, 0.773571, 0.774106, 0.774639, 0.775171, 0.775701, 0.776231, 0.776759, 0.777285, 0.777811, 0.778335, 0.778858, 0.779379, 0.779899, 0.780418, 0.780936, 0.781452, 0.781967, 0.782481, 0.782993, 0.783504, 0.784014, 0.784523, 0.785030, 0.785536, 0.786041, 0.786545, 0.787047, 0.787549, 0.788048, 0.788547, 0.789045, 0.789541, 0.790036, 0.790530, 0.791022, 0.791513, 0.792004, 0.792493, 0.792980, 0.793467, 0.793952, 0.794436, 0.794919, 0.795401, 0.795881, 0.796361, 0.796839, 0.797316, 0.797792, 0.798266, 0.798740, 0.799212, 0.799683, 0.800153, 0.800622, 0.801090, 0.801556, 0.802022, 0.802486, 0.802949, 0.803411, 0.803872, 0.804331, 0.804790, 0.805247, 0.805704, 0.806159, 0.806613, 0.807066, 0.807518, 0.807969, 0.808418, 0.808867, 0.809314, 0.809761, 0.810206, 0.810650, 0.811093, 0.811535, 0.811976, 0.812416, 0.812854, 0.813292, 0.813729, 0.814164, 0.814599, 0.815032, 0.815464, 0.815896, 0.816326, 0.816755, 0.817183, 0.817610, 0.818036, 0.818461, 0.818885, 0.819308, 0.819730, 0.820151, 0.820571, 0.820990, 0.821407, 0.821824, 0.822240, 0.822655, 0.823068, 0.823481, 0.823893, 0.824303, 0.824713, 0.825122, 0.825529, 0.825936, 0.826342, 0.826747, 0.827150, 0.827553, 0.827955, 0.828356, 0.828756, 0.829154, 0.829552, 0.829949, 0.830345, 0.830740, 0.831134, 0.831527, 0.831919, 0.832311, 0.832701, 0.833090, 0.833478, 0.833866, 0.834252, 0.834638, 0.835022, 0.835406, 0.835789, 0.836170, 0.836551, 0.836931, 0.837310, 0.837688, 0.838065, 0.838442, 0.838817, 0.839191, 0.839565, 0.839938, 0.840309, 0.840680, 0.841050, 0.841419, 0.841787, 0.842154, 0.842521, 0.842886, 0.843251, 0.843615, 0.843977, 0.844339, 0.844700, 0.845061, 0.845420, 0.845778, 0.846136, 0.846493, 0.846849, 0.847204, 0.847558, 0.847911, 0.848263, 0.848615, 0.848966, 0.849316, 0.849665, 0.850013, 0.850360, 0.850707, 0.851052, 0.851397, 0.851741, 0.852085, 0.852427, 0.852768, 0.853109, 0.853449, 0.853788, 0.854126, 0.854464, 0.854801, 0.855136, 0.855471, 0.855806, 0.856139, 0.856472, 0.856803, 0.857134, 0.857465, 0.857794, 0.858123, 0.858451, 0.858778, 0.859104, 0.859429, 0.859754, 0.860078, 0.860401, 0.860723, 0.861045, 0.861366, 0.861686, 0.862005
 };
 
 
 
-double MI_map_qpsk_axis[MI_MAP_QPSK_SIZE] = {
+static const double MI_map_qpsk_axis[MI_MAP_QPSK_SIZE] = {
   0.013000, 0.017000, 0.021000, 0.025000, 0.029000, 0.033000, 0.037000, 0.041000, 0.045000, 0.049000, 0.053000, 0.057000, 0.061000, 0.065000, 0.069000, 0.073000, 0.077000, 0.081000, 0.085000, 0.089000, 0.093000, 0.097000, 0.101000, 0.105000, 0.109000, 0.113000, 0.117000, 0.121000, 0.125000, 0.129000, 0.133000, 0.137000, 0.141000, 0.145000, 0.149000, 0.153000, 0.157000, 0.161000, 0.165000, 0.169000, 0.173000, 0.177000, 0.181000, 0.185000, 0.189000, 0.193000, 0.197000, 0.201000, 0.205000, 0.209000, 0.213000, 0.217000, 0.221000, 0.225000, 0.229000, 0.233000, 0.237000, 0.241000, 0.245000, 0.249000, 0.253000, 0.257000, 0.261000, 0.265000, 0.269000, 0.273000, 0.277000, 0.281000, 0.285000, 0.289000, 0.293000, 0.297000, 0.301000, 0.305000, 0.309000, 0.313000, 0.317000, 0.321000, 0.325000, 0.329000, 0.333000, 0.337000, 0.341000, 0.345000, 0.349000, 0.353000, 0.357000, 0.361000, 0.365000, 0.369000, 0.373000, 0.377000, 0.381000, 0.385000, 0.389000, 0.393000, 0.397000, 0.401000, 0.405000, 0.409000, 0.413000, 0.417000, 0.421000, 0.425000, 0.429000, 0.433000, 0.437000, 0.441000, 0.445000, 0.449000, 0.453000, 0.457000, 0.461000, 0.465000, 0.469000, 0.473000, 0.477000, 0.481000, 0.485000, 0.489000, 0.493000, 0.497000, 0.501000, 0.505000, 0.509000, 0.513000, 0.517000, 0.521000, 0.525000, 0.529000, 0.533000, 0.537000, 0.541000, 0.545000, 0.549000, 0.553000, 0.557000, 0.561000, 0.565000, 0.569000, 0.573000, 0.577000, 0.581000, 0.585000, 0.589000, 0.593000, 0.597000, 0.601000, 0.605000, 0.609000, 0.613000, 0.617000, 0.621000, 0.625000, 0.629000, 0.633000, 0.637000, 0.641000, 0.645000, 0.649000, 0.653000, 0.657000, 0.661000, 0.665000, 0.669000, 0.673000, 0.677000, 0.681000, 0.685000, 0.689000, 0.693000, 0.697000, 0.701000, 0.705000, 0.709000, 0.713000, 0.717000, 0.721000, 0.725000, 0.729000, 0.733000, 0.737000, 0.741000, 0.745000, 0.749000, 0.753000, 0.757000, 0.761000, 0.765000, 0.769000, 0.773000, 0.777000, 0.781000, 0.785000, 0.789000, 0.793000, 0.797000, 0.801000, 0.805000, 0.809000, 0.813000, 0.817000, 0.821000, 0.825000, 0.829000, 0.833000, 0.837000, 0.841000, 0.845000, 0.849000, 0.853000, 0.857000, 0.861000, 0.865000, 0.869000, 0.873000, 0.877000, 0.881000, 0.885000, 0.889000, 0.893000, 0.897000, 0.901000, 0.905000, 0.909000, 0.913000, 0.917000, 0.921000, 0.925000, 0.929000, 0.933000, 0.937000, 0.941000, 0.945000, 0.949000, 0.953000, 0.957000, 0.961000, 0.965000, 0.969000, 0.973000, 0.977000, 0.981000, 0.985000, 0.989000, 0.993000, 0.997000, 1.001000, 1.005000, 1.009000, 1.013000, 1.017000, 1.021000, 1.025000, 1.029000, 1.033000, 1.037000, 1.041000, 1.045000, 1.049000, 1.053000, 1.057000, 1.061000, 1.065000, 1.069000, 1.073000, 1.077000, 1.081000, 1.085000, 1.089000, 1.093000, 1.097000, 1.101000, 1.105000, 1.109000, 1.113000, 1.117000, 1.121000, 1.125000, 1.129000, 1.133000, 1.137000, 1.141000, 1.145000, 1.149000, 1.153000, 1.157000, 1.161000, 1.165000, 1.169000, 1.173000, 1.177000, 1.181000, 1.185000, 1.189000, 1.193000, 1.197000, 1.201000, 1.205000, 1.209000, 1.213000, 1.217000, 1.221000, 1.225000, 1.229000, 1.233000, 1.237000, 1.241000, 1.245000, 1.249000, 1.253000, 1.257000, 1.261000, 1.265000, 1.269000, 1.273000, 1.277000, 1.281000, 1.285000, 1.289000, 1.293000, 1.297000, 1.301000, 1.305000, 1.309000, 1.313000, 1.317000, 1.321000, 1.325000, 1.329000, 1.333000, 1.337000, 1.341000, 1.345000, 1.349000, 1.353000, 1.357000, 1.361000, 1.365000, 1.369000, 1.373000, 1.377000, 1.381000, 1.385000, 1.389000, 1.393000, 1.397000, 1.401000, 1.405000, 1.409000, 1.413000, 1.417000, 1.421000, 1.425000, 1.429000, 1.433000, 1.437000, 1.441000, 1.445000, 1.449000, 1.453000, 1.457000, 1.461000, 1.465000, 1.469000, 1.473000, 1.477000, 1.481000, 1.485000, 1.489000, 1.493000, 1.497000, 1.501000, 1.505000, 1.509000, 1.513000, 1.517000, 1.521000, 1.525000, 1.529000, 1.533000, 1.537000, 1.541000, 1.545000, 1.549000, 1.553000, 1.557000, 1.561000, 1.565000, 1.569000, 1.573000, 1.577000, 1.581000, 1.585000, 1.589000, 1.593000, 1.597000, 1.601000, 1.605000, 1.609000, 1.613000, 1.617000, 1.621000, 1.625000, 1.629000, 1.633000, 1.637000, 1.641000, 1.645000, 1.649000, 1.653000, 1.657000, 1.661000, 1.665000, 1.669000, 1.673000, 1.677000, 1.681000, 1.685000, 1.689000, 1.693000, 1.697000, 1.701000, 1.705000, 1.709000, 1.713000, 1.717000, 1.721000, 1.725000, 1.729000, 1.733000, 1.737000, 1.741000, 1.745000, 1.749000, 1.753000, 1.757000, 1.761000, 1.765000, 1.769000, 1.773000, 1.777000, 1.781000, 1.785000, 1.789000, 1.793000, 1.797000, 1.801000, 1.805000, 1.809000, 1.813000, 1.817000, 1.821000, 1.825000, 1.829000, 1.833000, 1.837000, 1.841000, 1.845000, 1.849000, 1.853000, 1.857000, 1.861000, 1.865000, 1.869000, 1.873000, 1.877000, 1.881000, 1.885000, 1.889000, 1.893000, 1.897000, 1.901000, 1.905000, 1.909000, 1.913000, 1.917000, 1.921000, 1.925000, 1.929000, 1.933000, 1.937000, 1.941000, 1.945000, 1.949000, 1.953000, 1.957000, 1.961000, 1.965000, 1.969000, 1.973000, 1.977000, 1.981000, 1.985000, 1.989000, 1.993000, 1.997000, 2.001000, 2.005000, 2.009000, 2.013000, 2.017000, 2.021000, 2.025000, 2.029000, 2.033000, 2.037000, 2.041000, 2.045000, 2.049000, 2.053000, 2.057000, 2.061000, 2.065000, 2.069000, 2.073000, 2.077000, 2.081000, 2.085000, 2.089000, 2.093000, 2.097000, 2.101000, 2.105000, 2.109000, 2.113000, 2.117000, 2.121000, 2.125000, 2.129000, 2.133000, 2.137000, 2.141000, 2.145000, 2.149000, 2.153000, 2.157000, 2.161000, 2.165000, 2.169000, 2.173000, 2.177000, 2.181000, 2.185000, 2.189000, 2.193000, 2.197000, 2.201000, 2.205000, 2.209000, 2.213000, 2.217000, 2.221000, 2.225000, 2.229000, 2.233000, 2.237000, 2.241000, 2.245000, 2.249000, 2.253000, 2.257000, 2.261000, 2.265000, 2.269000, 2.273000, 2.277000, 2.281000, 2.285000, 2.289000, 2.293000, 2.297000, 2.301000, 2.305000, 2.309000, 2.313000, 2.317000, 2.321000, 2.325000, 2.329000, 2.333000, 2.337000, 2.341000, 2.345000, 2.349000, 2.353000, 2.357000, 2.361000, 2.365000, 2.369000, 2.373000, 2.377000, 2.381000, 2.385000, 2.389000, 2.393000, 2.397000, 2.401000, 2.405000, 2.409000, 2.413000, 2.417000, 2.421000, 2.425000, 2.429000, 2.433000, 2.437000, 2.441000, 2.445000, 2.449000, 2.453000, 2.457000, 2.461000, 2.465000, 2.469000, 2.473000, 2.477000, 2.481000, 2.485000, 2.489000, 2.493000, 2.497000, 2.501000, 2.505000, 2.509000, 2.513000, 2.517000, 2.521000, 2.525000, 2.529000, 2.533000, 2.537000, 2.541000, 2.545000, 2.549000, 2.553000, 2.557000, 2.561000, 2.565000, 2.569000, 2.573000, 2.577000, 2.581000, 2.585000, 2.589000, 2.593000, 2.597000, 2.601000, 2.605000, 2.609000, 2.613000, 2.617000, 2.621000, 2.625000, 2.629000, 2.633000, 2.637000, 2.641000, 2.645000, 2.649000, 2.653000, 2.657000, 2.661000, 2.665000, 2.669000, 2.673000, 2.677000, 2.681000, 2.685000, 2.689000, 2.693000, 2.697000, 2.701000, 2.705000, 2.709000, 2.713000, 2.717000, 2.721000, 2.725000, 2.729000, 2.733000, 2.737000, 2.741000, 2.745000, 2.749000, 2.753000, 2.757000, 2.761000, 2.765000, 2.769000, 2.773000, 2.777000, 2.781000, 2.785000, 2.789000, 2.793000, 2.797000, 2.801000, 2.805000, 2.809000, 2.813000, 2.817000, 2.821000, 2.825000, 2.829000, 2.833000, 2.837000, 2.841000, 2.845000, 2.849000, 2.853000, 2.857000, 2.861000, 2.865000, 2.869000, 2.873000, 2.877000, 2.881000, 2.885000, 2.889000, 2.893000, 2.897000, 2.901000, 2.905000, 2.909000, 2.913000, 2.917000, 2.921000, 2.925000, 2.929000, 2.933000, 2.937000, 2.941000, 2.945000, 2.949000, 2.953000, 2.957000, 2.961000, 2.965000, 2.969000, 2.973000, 2.977000, 2.981000, 2.985000, 2.989000, 2.993000, 2.997000, 3.001000, 3.005000, 3.009000, 3.013000, 3.017000, 3.021000, 3.025000, 3.029000, 3.033000, 3.037000, 3.041000, 3.045000, 3.049000, 3.053000, 3.057000, 3.061000, 3.065000, 3.069000, 3.073000, 3.077000, 3.081000, 3.085000, 3.089000, 3.093000, 3.097000, 3.101000, 3.105000, 3.109000, 3.113000, 3.117000, 3.121000, 3.125000, 3.129000, 3.133000, 3.137000, 3.141000, 3.145000, 3.149000, 3.153000, 3.157000, 3.161000, 3.165000, 3.169000, 3.173000, 3.177000, 3.181000, 3.185000, 3.189000, 3.193000, 3.197000
 };
 
 
-double MI_map_16qam[MI_MAP_16QAM_SIZE] = {
+static const double MI_map_16qam[MI_MAP_16QAM_SIZE] = {
   0.018884, 0.021859, 0.024808, 0.027732, 0.030631, 0.033506, 0.036357, 0.039185, 0.041991, 0.044776, 0.047538, 0.050280, 0.053002, 0.055703, 0.058385, 0.061048, 0.063692, 0.066318, 0.068925, 0.071514, 0.074086, 0.076640, 0.079178, 0.081699, 0.084203, 0.086691, 0.089163, 0.091619, 0.094059, 0.096484, 0.098894, 0.101289, 0.103669, 0.106034, 0.108385, 0.110721, 0.113043, 0.115351, 0.117645, 0.119926, 0.122192, 0.124446, 0.126686, 0.128912, 0.131126, 0.133326, 0.135514, 0.137689, 0.139852, 0.142001, 0.144139, 0.146101, 0.148211, 0.150308, 0.152392, 0.154464, 0.156524, 0.158571, 0.160606, 0.162630, 0.164641, 0.166641, 0.168629, 0.170606, 0.172572, 0.174526, 0.176470, 0.178403, 0.180325, 0.182236, 0.184136, 0.186027, 0.187907, 0.189777, 0.191636, 0.193486, 0.195326, 0.197156, 0.198976, 0.200787, 0.202588, 0.204380, 0.206162, 0.207935, 0.209700, 0.211455, 0.213201, 0.214938, 0.216666, 0.218386, 0.220097, 0.221800, 0.223494, 0.225180, 0.226857, 0.228526, 0.230187, 0.231840, 0.233485, 0.235121, 0.236750, 0.238372, 0.239985, 0.241591, 0.243189, 0.244779, 0.246362, 0.247938, 0.249506, 0.251067, 0.252621, 0.254167, 0.255707, 0.257239, 0.258764, 0.260283, 0.261794, 0.263299, 0.264797, 0.266288, 0.267772, 0.269250, 0.270722, 0.272186, 0.273645, 0.275097, 0.276542, 0.277981, 0.279414, 0.280841, 0.282262, 0.283676, 0.285085, 0.286487, 0.287883, 0.289274, 0.290659, 0.292037, 0.293410, 0.294777, 0.296139, 0.297495, 0.298845, 0.300189, 0.301528, 0.302862, 0.304190, 0.305513, 0.306830, 0.308142, 0.309449, 0.310750, 0.312046, 0.313337, 0.314623, 0.315903, 0.317179, 0.318449, 0.319715, 0.320975, 0.322231, 0.323481, 0.324727, 0.325968, 0.327204, 0.328436, 0.329662, 0.330884, 0.332102, 0.333314, 0.334522, 0.335726, 0.336924, 0.338119, 0.339309, 0.340494, 0.341675, 0.342852, 0.344024, 0.345192, 0.346355, 0.347515, 0.348670, 0.349821, 0.350967, 0.352110, 0.353248, 0.354382, 0.355512, 0.356639, 0.357761, 0.358879, 0.359993, 0.361103, 0.362209, 0.363311, 0.364410, 0.365504, 0.366595, 0.367682, 0.368765, 0.369844, 0.370920, 0.371992, 0.373060, 0.374125, 0.375186, 0.376243, 0.377297, 0.378347, 0.379393, 0.380436, 0.381476, 0.382512, 0.383545, 0.384574, 0.385600, 0.386622, 0.387641, 0.388657, 0.389669, 0.390678, 0.391683, 0.392686, 0.393685, 0.394681, 0.395674, 0.396663, 0.397649, 0.398632, 0.399612, 0.400589, 0.401563, 0.402534, 0.403501, 0.404466, 0.405427, 0.406386, 0.407341, 0.408294, 0.409243, 0.410190, 0.411133, 0.412074, 0.413012, 0.413947, 0.414879, 0.415808, 0.416735, 0.417658, 0.418579, 0.419497, 0.420412, 0.421325, 0.422234, 0.423142, 0.424046, 0.424947, 0.425846, 0.426743, 0.427636, 0.428527, 0.429416, 0.430302, 0.431185, 0.432065, 0.432943, 0.433819, 0.434692, 0.435562, 0.436430, 0.437296, 0.438159, 0.439019, 0.439877, 0.440733, 0.441586, 0.442437, 0.443285, 0.444131, 0.444975, 0.445816, 0.446493, 0.447329, 0.448163, 0.448994, 0.449823, 0.450650, 0.451474, 0.452297, 0.453116, 0.453934, 0.454749, 0.455562, 0.456373, 0.457182, 0.457988, 0.458793, 0.459595, 0.460395, 0.461192, 0.461988, 0.462781, 0.463572, 0.464362, 0.465149, 0.465934, 0.466716, 0.467497, 0.468276, 0.469053, 0.469827, 0.470600, 0.471370, 0.472139, 0.472905, 0.473670, 0.474432, 0.475193, 0.475952, 0.476708, 0.477463, 0.478216, 0.478967, 0.479716, 0.480463, 0.481208, 0.481951, 0.482692, 0.483432, 0.484169, 0.484905, 0.485639, 0.486371, 0.487101, 0.487830, 0.488556, 0.489281, 0.490004, 0.490726, 0.491445, 0.492163, 0.492879, 0.493593, 0.494306, 0.495016, 0.495725, 0.496433, 0.497138, 0.497842, 0.498544, 0.499245, 0.499944, 0.500641, 0.501337, 0.502030, 0.502723, 0.503413, 0.504102, 0.504790, 0.505475, 0.506159, 0.506842, 0.507523, 0.508202, 0.508880, 0.509556, 0.510231, 0.510904, 0.511575, 0.512245, 0.512914, 0.513581, 0.514246, 0.514910, 0.515572, 0.516233, 0.516893, 0.517551, 0.518207, 0.518862, 0.519515, 0.520167, 0.520818, 0.521467, 0.522115, 0.522761, 0.523405, 0.524049, 0.524691, 0.525331, 0.525970, 0.526608, 0.527244, 0.527879, 0.528513, 0.529145, 0.529776, 0.530405, 0.531033, 0.531660, 0.532285, 0.532909, 0.533532, 0.534153, 0.534773, 0.535392, 0.536009, 0.536625, 0.537240, 0.537853, 0.538465, 0.539076, 0.539361, 0.539968, 0.540575, 0.541180, 0.541783, 0.542386, 0.542987, 0.543587, 0.544186, 0.544783, 0.545379, 0.545974, 0.546568, 0.547160, 0.547751, 0.548341, 0.548930, 0.549517, 0.550103, 0.550688, 0.551272, 0.551855, 0.552436, 0.553016, 0.553595, 0.554173, 0.554749, 0.555325, 0.555899, 0.556472, 0.557044, 0.557615, 0.558184, 0.558753, 0.559320, 0.559886, 0.560451, 0.561015, 0.561578, 0.562140, 0.562700, 0.563259, 0.563818, 0.564375, 0.564931, 0.565486, 0.566040, 0.566593, 0.567144, 0.567695, 0.568244, 0.568793, 0.569340, 0.569887, 0.570432, 0.570976, 0.571519, 0.572061, 0.572602, 0.573142, 0.573681, 0.574219, 0.574756, 0.575292, 0.575827, 0.576361, 0.576894, 0.577425, 0.577956, 0.578486, 0.579015, 0.579543, 0.580069, 0.580595, 0.581120, 0.581644, 0.582167, 0.582689, 0.583210, 0.583730, 0.584249, 0.584767, 0.585284, 0.585800, 0.586315, 0.586829, 0.587342, 0.587855, 0.588366, 0.588877, 0.589386, 0.589895, 0.590402, 0.590909, 0.591415, 0.591920, 0.592424, 0.592927, 0.593429, 0.593930, 0.594431, 0.594930, 0.595429, 0.595926, 0.596423, 0.596919, 0.597414, 0.597908, 0.598402, 0.598894, 0.599386, 0.599876, 0.600366, 0.600855, 0.601343, 0.601830, 0.602317, 0.602802, 0.603287, 0.603771, 0.604254, 0.604736, 0.605217, 0.605697, 0.606177, 0.606656, 0.607134, 0.607611, 0.608087, 0.608563, 0.609038, 0.609511, 0.609985, 0.610457, 0.610928, 0.611399, 0.611869, 0.612338, 0.612806, 0.613274, 0.613740, 0.614206, 0.614671, 0.615136, 0.615599, 0.616062, 0.616524, 0.616985, 0.617446, 0.617905, 0.618364, 0.618822, 0.619280, 0.619736, 0.620192, 0.620647, 0.621102, 0.621555, 0.622008, 0.622460, 0.622912, 0.623362, 0.623812, 0.624261, 0.624710, 0.625157, 0.625604, 0.626051, 0.626496, 0.626941, 0.627385, 0.627828, 0.628271, 0.628713, 0.629154, 0.629594, 0.630034, 0.630473, 0.630911, 0.631349, 0.631786, 0.632222, 0.632658, 0.633093, 0.633527, 0.633960, 0.634393, 0.634825, 0.635257, 0.635687, 0.636117, 0.636547, 0.636975, 0.637403, 0.637831, 0.638257, 0.638683, 0.639109, 0.639533, 0.639957, 0.640381, 0.640803, 0.641225, 0.641647, 0.642067, 0.642487, 0.642907, 0.643326, 0.643744, 0.644161, 0.644578, 0.644994, 0.645410, 0.645824, 0.646239, 0.646652, 0.647065, 0.647477, 0.647889, 0.648300, 0.648711, 0.649120, 0.649530, 0.649938, 0.650346, 0.650753, 0.651160, 0.651566, 0.651972, 0.652377, 0.652781, 0.653184, 0.653587, 0.653990, 0.654392, 0.654793, 0.655193, 0.655593, 0.655993, 0.656392, 0.656790, 0.657187, 0.657584, 0.657981, 0.658377, 0.658772, 0.659167, 0.659561, 0.659954, 0.660347, 0.660739, 0.661131, 0.661522, 0.661913, 0.662303, 0.662692, 0.663081, 0.663469, 0.663857, 0.664244, 0.664631, 0.665017, 0.665402, 0.665787, 0.666171, 0.666555, 0.666938, 0.667321, 0.667703, 0.668085, 0.668466, 0.668846, 0.669226, 0.669605, 0.669984, 0.670362, 0.670740, 0.671117, 0.671494, 0.671870, 0.672245, 0.672620, 0.672995, 0.673368, 0.673742, 0.674115, 0.674487, 0.674859, 0.675230, 0.675601, 0.675971, 0.676340, 0.676709, 0.677078, 0.677446, 0.677814, 0.678181, 0.678547, 0.678913, 0.679279, 0.679643, 0.680008, 0.680372, 0.680735, 0.681098, 0.681460, 0.681822, 0.682184, 0.682544, 0.682905, 0.683265, 0.683624, 0.683983, 0.684341, 0.684699, 0.685056, 0.685413, 0.685769, 0.686125, 0.686481, 0.686835, 0.687190, 0.687544, 0.687897, 0.688250, 0.688602, 0.688954, 0.689305, 0.689656, 0.690007, 0.690357, 0.690706, 0.691055, 0.691404, 0.691752, 0.692099, 0.692446, 0.692793, 0.693139, 0.693485, 0.693830, 0.694175, 0.694519, 0.694863, 0.695206, 0.695549, 0.695891, 0.696233, 0.696574, 0.696915, 0.697256, 0.697596, 0.697935, 0.698274, 0.698613, 0.698951, 0.699289, 0.699626, 0.699963, 0.700299, 0.700635, 0.700971, 0.701306, 0.701640, 0.701974, 0.702308, 0.702641, 0.702974, 0.703306, 0.703638, 0.703969, 0.704300, 0.704631, 0.704961, 0.705291, 0.705620, 0.705949, 0.706277, 0.706605, 0.706932, 0.707259, 0.707586, 0.707912, 0.708238, 0.708563, 0.708888, 0.709212, 0.709536, 0.709859, 0.710183, 0.710505, 0.710828, 0.711149, 0.711471, 0.711792, 0.712112, 0.712432, 0.712752, 0.713071, 0.713390, 0.713709, 0.714027, 0.714344, 0.714661, 0.714978, 0.715295, 0.715611, 0.715926, 0.716241, 0.716556, 0.716870, 0.717184, 0.717497, 0.717811, 0.718123, 0.718435, 0.718747, 0.719059, 0.719370, 0.719680, 0.719991, 0.720300, 0.720610, 0.720919, 0.721227, 0.721536, 0.721843, 0.722151, 0.722458, 0.722764, 0.723071, 0.723376, 0.723682, 0.723987, 0.724291, 0.724596, 0.724899, 0.725203, 0.725506, 0.725809, 0.726111, 0.726413, 0.726714, 0.727015, 0.727316, 0.727616, 0.727916, 0.728216, 0.728515, 0.728814, 0.729112, 0.729410, 0.729708, 0.730005, 0.730302, 0.730599, 0.730895, 0.731191, 0.731486, 0.731781, 0.732076, 0.732370, 0.732664, 0.732957, 0.733250, 0.733543, 0.733835, 0.734127, 0.734419, 0.734710, 0.735001, 0.735292, 0.735582, 0.735872, 0.736161, 0.736450, 0.736739, 0.737027, 0.737315, 0.737603, 0.737890, 0.738177, 0.738463, 0.738750, 0.739035, 0.739321, 0.739606, 0.739891, 0.740175, 0.740459, 0.740743, 0.741026, 0.741309, 0.741591, 0.741874, 0.742155, 0.742437, 0.742718, 0.742999, 0.743279, 0.743559, 0.743839, 0.744119, 0.744398, 0.744676, 0.744955, 0.745233, 0.745510, 0.745788, 0.746065, 0.746341, 0.746618, 0.746893, 0.747169, 0.747444, 0.747719, 0.747994, 0.748268, 0.748542, 0.748815, 0.749089, 0.749361, 0.749634, 0.749906, 0.750178, 0.750450, 0.750721, 0.750992, 0.751262, 0.751532, 0.751802, 0.752072, 0.752341, 0.752610, 0.752878, 0.753146, 0.753414, 0.753682, 0.753949, 0.754216, 0.754482, 0.754748, 0.755014, 0.755280, 0.755545, 0.755810, 0.756074, 0.756339, 0.756603, 0.756866, 0.757129, 0.757392, 0.757655, 0.757917, 0.758179, 0.758441, 0.758702, 0.758963, 0.759224, 0.759484, 0.759744, 0.760004, 0.760264, 0.760523, 0.760781, 0.761040, 0.761298, 0.761556, 0.761813, 0.762071, 0.762328, 0.762584, 0.762840, 0.763096, 0.763352, 0.763607, 0.763862, 0.764117, 0.764371, 0.764626, 0.764879
 };
 
-double MI_map_16qam_axis[MI_MAP_16QAM_SIZE] = {
+static const double MI_map_16qam_axis[MI_MAP_16QAM_SIZE] = {
   0.063000, 0.073000, 0.083000, 0.093000, 0.103000, 0.113000, 0.123000, 0.133000, 0.143000, 0.153000, 0.163000, 0.173000, 0.183000, 0.193000, 0.203000, 0.213000, 0.223000, 0.233000, 0.243000, 0.253000, 0.263000, 0.273000, 0.283000, 0.293000, 0.303000, 0.313000, 0.323000, 0.333000, 0.343000, 0.353000, 0.363000, 0.373000, 0.383000, 0.393000, 0.403000, 0.413000, 0.423000, 0.433000, 0.443000, 0.453000, 0.463000, 0.473000, 0.483000, 0.493000, 0.503000, 0.513000, 0.523000, 0.533000, 0.543000, 0.553000, 0.563000, 0.573000, 0.583000, 0.593000, 0.603000, 0.613000, 0.623000, 0.633000, 0.643000, 0.653000, 0.663000, 0.673000, 0.683000, 0.693000, 0.703000, 0.713000, 0.723000, 0.733000, 0.743000, 0.753000, 0.763000, 0.773000, 0.783000, 0.793000, 0.803000, 0.813000, 0.823000, 0.833000, 0.843000, 0.853000, 0.863000, 0.873000, 0.883000, 0.893000, 0.903000, 0.913000, 0.923000, 0.933000, 0.943000, 0.953000, 0.963000, 0.973000, 0.983000, 0.993000, 1.003000, 1.013000, 1.023000, 1.033000, 1.043000, 1.053000, 1.063000, 1.073000, 1.083000, 1.093000, 1.103000, 1.113000, 1.123000, 1.133000, 1.143000, 1.153000, 1.163000, 1.173000, 1.183000, 1.193000, 1.203000, 1.213000, 1.223000, 1.233000, 1.243000, 1.253000, 1.263000, 1.273000, 1.283000, 1.293000, 1.303000, 1.313000, 1.323000, 1.333000, 1.343000, 1.353000, 1.363000, 1.373000, 1.383000, 1.393000, 1.403000, 1.413000, 1.423000, 1.433000, 1.443000, 1.453000, 1.463000, 1.473000, 1.483000, 1.493000, 1.503000, 1.513000, 1.523000, 1.533000, 1.543000, 1.553000, 1.563000, 1.573000, 1.583000, 1.593000, 1.603000, 1.613000, 1.623000, 1.633000, 1.643000, 1.653000, 1.663000, 1.673000, 1.683000, 1.693000, 1.703000, 1.713000, 1.723000, 1.733000, 1.743000, 1.753000, 1.763000, 1.773000, 1.783000, 1.793000, 1.803000, 1.813000, 1.823000, 1.833000, 1.843000, 1.853000, 1.863000, 1.873000, 1.883000, 1.893000, 1.903000, 1.913000, 1.923000, 1.933000, 1.943000, 1.953000, 1.963000, 1.973000, 1.983000, 1.993000, 2.003000, 2.013000, 2.023000, 2.033000, 2.043000, 2.053000, 2.063000, 2.073000, 2.083000, 2.093000, 2.103000, 2.113000, 2.123000, 2.133000, 2.143000, 2.153000, 2.163000, 2.173000, 2.183000, 2.193000, 2.203000, 2.213000, 2.223000, 2.233000, 2.243000, 2.253000, 2.263000, 2.273000, 2.283000, 2.293000, 2.303000, 2.313000, 2.323000, 2.333000, 2.343000, 2.353000, 2.363000, 2.373000, 2.383000, 2.393000, 2.403000, 2.413000, 2.423000, 2.433000, 2.443000, 2.453000, 2.463000, 2.473000, 2.483000, 2.493000, 2.503000, 2.513000, 2.523000, 2.533000, 2.543000, 2.553000, 2.563000, 2.573000, 2.583000, 2.593000, 2.603000, 2.613000, 2.623000, 2.633000, 2.643000, 2.653000, 2.663000, 2.673000, 2.683000, 2.693000, 2.703000, 2.713000, 2.723000, 2.733000, 2.743000, 2.753000, 2.763000, 2.773000, 2.783000, 2.793000, 2.803000, 2.813000, 2.823000, 2.833000, 2.843000, 2.853000, 2.863000, 2.873000, 2.883000, 2.893000, 2.903000, 2.913000, 2.923000, 2.933000, 2.943000, 2.953000, 2.963000, 2.973000, 2.983000, 2.993000, 3.003000, 3.013000, 3.023000, 3.033000, 3.043000, 3.053000, 3.063000, 3.073000, 3.083000, 3.093000, 3.103000, 3.113000, 3.123000, 3.133000, 3.143000, 3.153000, 3.163000, 3.173000, 3.183000, 3.193000, 3.203000, 3.213000, 3.223000, 3.233000, 3.243000, 3.253000, 3.263000, 3.273000, 3.283000, 3.293000, 3.303000, 3.313000, 3.323000, 3.333000, 3.343000, 3.353000, 3.363000, 3.373000, 3.383000, 3.393000, 3.403000, 3.413000, 3.423000, 3.433000, 3.443000, 3.453000, 3.463000, 3.473000, 3.483000, 3.493000, 3.503000, 3.513000, 3.523000, 3.533000, 3.543000, 3.553000, 3.563000, 3.573000, 3.583000, 3.593000, 3.603000, 3.613000, 3.623000, 3.633000, 3.643000, 3.653000, 3.663000, 3.673000, 3.683000, 3.693000, 3.703000, 3.713000, 3.723000, 3.733000, 3.743000, 3.753000, 3.763000, 3.773000, 3.783000, 3.793000, 3.803000, 3.813000, 3.823000, 3.833000, 3.843000, 3.853000, 3.863000, 3.873000, 3.883000, 3.893000, 3.903000, 3.913000, 3.923000, 3.933000, 3.943000, 3.953000, 3.963000, 3.973000, 3.983000, 3.993000, 4.003000, 4.013000, 4.023000, 4.033000, 4.043000, 4.053000, 4.063000, 4.073000, 4.083000, 4.093000, 4.103000, 4.113000, 4.123000, 4.133000, 4.143000, 4.153000, 4.163000, 4.173000, 4.183000, 4.193000, 4.203000, 4.213000, 4.223000, 4.233000, 4.243000, 4.253000, 4.263000, 4.273000, 4.283000, 4.293000, 4.303000, 4.313000, 4.323000, 4.333000, 4.343000, 4.353000, 4.363000, 4.373000, 4.383000, 4.393000, 4.403000, 4.413000, 4.423000, 4.433000, 4.443000, 4.453000, 4.463000, 4.473000, 4.483000, 4.493000, 4.503000, 4.513000, 4.523000, 4.533000, 4.543000, 4.553000, 4.563000, 4.573000, 4.583000, 4.593000, 4.603000, 4.613000, 4.623000, 4.633000, 4.643000, 4.653000, 4.663000, 4.673000, 4.683000, 4.693000, 4.703000, 4.713000, 4.723000, 4.733000, 4.743000, 4.753000, 4.763000, 4.773000, 4.783000, 4.793000, 4.803000, 4.813000, 4.823000, 4.833000, 4.843000, 4.853000, 4.863000, 4.873000, 4.883000, 4.893000, 4.903000, 4.913000, 4.923000, 4.933000, 4.943000, 4.953000, 4.963000, 4.973000, 4.983000, 4.993000, 5.003000, 5.013000, 5.023000, 5.033000, 5.043000, 5.053000, 5.063000, 5.073000, 5.083000, 5.093000, 5.103000, 5.113000, 5.123000, 5.133000, 5.143000, 5.153000, 5.163000, 5.173000, 5.183000, 5.193000, 5.203000, 5.213000, 5.223000, 5.233000, 5.243000, 5.253000, 5.263000, 5.273000, 5.283000, 5.293000, 5.303000, 5.313000, 5.323000, 5.333000, 5.343000, 5.353000, 5.363000, 5.373000, 5.383000, 5.393000, 5.403000, 5.413000, 5.423000, 5.433000, 5.443000, 5.453000, 5.463000, 5.473000, 5.483000, 5.493000, 5.503000, 5.513000, 5.523000, 5.533000, 5.543000, 5.553000, 5.563000, 5.573000, 5.583000, 5.593000, 5.603000, 5.613000, 5.623000, 5.633000, 5.643000, 5.653000, 5.663000, 5.673000, 5.683000, 5.693000, 5.703000, 5.713000, 5.723000, 5.733000, 5.743000, 5.753000, 5.763000, 5.773000, 5.783000, 5.793000, 5.803000, 5.813000, 5.823000, 5.833000, 5.843000, 5.853000, 5.863000, 5.873000, 5.883000, 5.893000, 5.903000, 5.913000, 5.923000, 5.933000, 5.943000, 5.953000, 5.963000, 5.973000, 5.983000, 5.993000, 6.003000, 6.013000, 6.023000, 6.033000, 6.043000, 6.053000, 6.063000, 6.073000, 6.083000, 6.093000, 6.103000, 6.113000, 6.123000, 6.133000, 6.143000, 6.153000, 6.163000, 6.173000, 6.183000, 6.193000, 6.203000, 6.213000, 6.223000, 6.233000, 6.243000, 6.253000, 6.263000, 6.273000, 6.283000, 6.293000, 6.303000, 6.313000, 6.323000, 6.333000, 6.343000, 6.353000, 6.363000, 6.373000, 6.383000, 6.393000, 6.403000, 6.413000, 6.423000, 6.433000, 6.443000, 6.453000, 6.463000, 6.473000, 6.483000, 6.493000, 6.503000, 6.513000, 6.523000, 6.533000, 6.543000, 6.553000, 6.563000, 6.573000, 6.583000, 6.593000, 6.603000, 6.613000, 6.623000, 6.633000, 6.643000, 6.653000, 6.663000, 6.673000, 6.683000, 6.693000, 6.703000, 6.713000, 6.723000, 6.733000, 6.743000, 6.753000, 6.763000, 6.773000, 6.783000, 6.793000, 6.803000, 6.813000, 6.823000, 6.833000, 6.843000, 6.853000, 6.863000, 6.873000, 6.883000, 6.893000, 6.903000, 6.913000, 6.923000, 6.933000, 6.943000, 6.953000, 6.963000, 6.973000, 6.983000, 6.993000, 7.003000, 7.013000, 7.023000, 7.033000, 7.043000, 7.053000, 7.063000, 7.073000, 7.083000, 7.093000, 7.103000, 7.113000, 7.123000, 7.133000, 7.143000, 7.153000, 7.163000, 7.173000, 7.183000, 7.193000, 7.203000, 7.213000, 7.223000, 7.233000, 7.243000, 7.253000, 7.263000, 7.273000, 7.283000, 7.293000, 7.303000, 7.313000, 7.323000, 7.333000, 7.343000, 7.353000, 7.363000, 7.373000, 7.383000, 7.393000, 7.403000, 7.413000, 7.423000, 7.433000, 7.443000, 7.453000, 7.463000, 7.473000, 7.483000, 7.493000, 7.503000, 7.513000, 7.523000, 7.533000, 7.543000, 7.553000, 7.563000, 7.573000, 7.583000, 7.593000, 7.603000, 7.613000, 7.623000, 7.633000, 7.643000, 7.653000, 7.663000, 7.673000, 7.683000, 7.693000, 7.703000, 7.713000, 7.723000, 7.733000, 7.743000, 7.753000, 7.763000, 7.773000, 7.783000, 7.793000, 7.803000, 7.813000, 7.823000, 7.833000, 7.843000, 7.853000, 7.863000, 7.873000, 7.883000, 7.893000, 7.903000, 7.913000, 7.923000, 7.933000, 7.943000, 7.953000, 7.963000, 7.973000, 7.983000, 7.993000, 8.003000, 8.013000, 8.023000, 8.033000, 8.043000, 8.053000, 8.063000, 8.073000, 8.083000, 8.093000, 8.103000, 8.113000, 8.123000, 8.133000, 8.143000, 8.153000, 8.163000, 8.173000, 8.183000, 8.193000, 8.203000, 8.213000, 8.223000, 8.233000, 8.243000, 8.253000, 8.263000, 8.273000, 8.283000, 8.293000, 8.303000, 8.313000, 8.323000, 8.333000, 8.343000, 8.353000, 8.363000, 8.373000, 8.383000, 8.393000, 8.403000, 8.413000, 8.423000, 8.433000, 8.443000, 8.453000, 8.463000, 8.473000, 8.483000, 8.493000, 8.503000, 8.513000, 8.523000, 8.533000, 8.543000, 8.553000, 8.563000, 8.573000, 8.583000, 8.593000, 8.603000, 8.613000, 8.623000, 8.633000, 8.643000, 8.653000, 8.663000, 8.673000, 8.683000, 8.693000, 8.703000, 8.713000, 8.723000, 8.733000, 8.743000, 8.753000, 8.763000, 8.773000, 8.783000, 8.793000, 8.803000, 8.813000, 8.823000, 8.833000, 8.843000, 8.853000, 8.863000, 8.873000, 8.883000, 8.893000, 8.903000, 8.913000, 8.923000, 8.933000, 8.943000, 8.953000, 8.963000, 8.973000, 8.983000, 8.993000, 9.003000, 9.013000, 9.023000, 9.033000, 9.043000, 9.053000, 9.063000, 9.073000, 9.083000, 9.093000, 9.103000, 9.113000, 9.123000, 9.133000, 9.143000, 9.153000, 9.163000, 9.173000, 9.183000, 9.193000, 9.203000, 9.213000, 9.223000, 9.233000, 9.243000, 9.253000, 9.263000, 9.273000, 9.283000, 9.293000, 9.303000, 9.313000, 9.323000, 9.333000, 9.343000, 9.353000, 9.363000, 9.373000, 9.383000, 9.393000, 9.403000, 9.413000, 9.423000, 9.433000, 9.443000, 9.453000, 9.463000, 9.473000, 9.483000, 9.493000, 9.503000, 9.513000, 9.523000, 9.533000, 9.543000, 9.553000, 9.563000, 9.573000, 9.583000, 9.593000, 9.603000, 9.613000, 9.623000, 9.633000, 9.643000, 9.653000, 9.663000, 9.673000, 9.683000, 9.693000, 9.703000, 9.713000, 9.723000, 9.733000, 9.743000, 9.753000, 9.763000, 9.773000, 9.783000, 9.793000, 9.803000, 9.813000, 9.823000, 9.833000, 9.843000, 9.853000, 9.863000, 9.873000, 9.883000, 9.893000, 9.903000, 9.913000, 9.923000, 9.933000, 9.943000, 9.953000, 9.963000, 9.973000, 9.983000, 9.993000
 };
 
 
-double MI_map_64qam[MI_MAP_64QAM_SIZE] = {
+static const double MI_map_64qam[MI_MAP_64QAM_SIZE] = {
   0.036455, 0.064415, 0.090225, 0.114215, 0.136597, 0.157298, 0.176808, 0.195063, 0.212193, 0.228310, 0.243505, 0.257860, 0.271445, 0.284323, 0.296550, 0.308175, 0.319243, 0.329796, 0.339870, 0.349499, 0.358715, 0.367545, 0.376015, 0.384150, 0.391971, 0.399498, 0.406751, 0.413746, 0.420499, 0.427026, 0.433340, 0.439453, 0.445378, 0.451125, 0.456705, 0.462127, 0.467400, 0.472532, 0.477531, 0.482404, 0.487157, 0.491797, 0.496330, 0.500760, 0.505094, 0.509116, 0.513264, 0.517327, 0.521309, 0.525213, 0.529043, 0.532803, 0.536495, 0.540123, 0.543689, 0.547196, 0.550646, 0.554041, 0.557385, 0.560678, 0.563922, 0.567120, 0.570273, 0.573383, 0.576451, 0.579478, 0.582467, 0.585418, 0.588332, 0.591211, 0.594055, 0.596866, 0.599644, 0.602392, 0.605108, 0.607795, 0.610453, 0.613082, 0.615684, 0.618259, 0.620808, 0.623331, 0.625829, 0.628303, 0.630753, 0.633179, 0.635582, 0.637963, 0.640321, 0.642658, 0.644974, 0.647269, 0.649543, 0.651797, 0.653815, 0.656029, 0.658222, 0.660396, 0.662552, 0.664689, 0.666807, 0.668908, 0.670990, 0.673056, 0.675104, 0.677135, 0.679149, 0.681147, 0.683128, 0.685094, 0.687044, 0.688978, 0.690896, 0.692799, 0.694688, 0.696561, 0.698420, 0.700264, 0.702094, 0.703909, 0.705711, 0.707499, 0.709273, 0.711033, 0.712781, 0.714515, 0.716235, 0.717943, 0.719638, 0.721321, 0.722991, 0.724648, 0.726293, 0.727926, 0.729547, 0.731156, 0.732753, 0.734339, 0.735913, 0.737475, 0.739026, 0.740566, 0.742095, 0.743613, 0.745120, 0.746616, 0.748101, 0.749576, 0.751040, 0.752494, 0.753937, 0.755371, 0.756794, 0.758207, 0.759610, 0.761003, 0.762387, 0.763761, 0.765125, 0.766479, 0.767825, 0.769160, 0.770487, 0.771805, 0.773113, 0.774412, 0.775702, 0.776984, 0.778257, 0.779521, 0.780776, 0.782022, 0.783261, 0.784490, 0.785712, 0.786925, 0.788130, 0.789327, 0.790515, 0.791696, 0.792868, 0.794033, 0.795190, 0.796339, 0.797481, 0.798615, 0.799741, 0.800860, 0.801971, 0.803075, 0.804172, 0.805261, 0.806343, 0.807418, 0.808486, 0.809547, 0.810601, 0.811647, 0.812687, 0.813721, 0.814747, 0.815767, 0.816780, 0.817786, 0.818786, 0.819780, 0.820767, 0.821747, 0.822722, 0.823689, 0.824651, 0.825607, 0.826556, 0.827499, 0.828436, 0.829367, 0.830292, 0.831212, 0.832125, 0.833032, 0.833934, 0.834830, 0.835720, 0.836605, 0.837484, 0.838357, 0.839225, 0.840088, 0.840945, 0.841796, 0.842642, 0.843483, 0.844319, 0.845149, 0.845974, 0.846794, 0.847609, 0.848419, 0.849223, 0.850023, 0.850818, 0.851608, 0.852392, 0.853172, 0.853947, 0.854718, 0.855483, 0.856244, 0.857000, 0.857752, 0.858499, 0.859241, 0.859979, 0.860712, 0.861441, 0.862165, 0.862885, 0.863600, 0.864311, 0.865018, 0.865720, 0.866418, 0.867112, 0.867802, 0.868488, 0.869169, 0.869846, 0.870519, 0.871188, 0.871854, 0.872515, 0.873172, 0.873825, 0.874474, 0.875120, 0.875761, 0.876399, 0.877033, 0.877663, 0.878289, 0.878911, 0.879530, 0.880146, 0.880757, 0.881365, 0.881969, 0.882570, 0.883167, 0.883761, 0.884351, 0.884938, 0.885521, 0.886101, 0.886677, 0.887250, 0.887820, 0.888387, 0.888950, 0.889509, 0.890066, 0.890619, 0.891169, 0.891716, 0.892259, 0.892800, 0.893337, 0.893872, 0.894403, 0.894931, 0.895456, 0.895978, 0.896497, 0.897013, 0.897526, 0.898036, 0.898543, 0.899047, 0.899549, 0.900047, 0.900543, 0.901036, 0.901526, 0.902013, 0.902497, 0.902979, 0.903458, 0.903934, 0.904407, 0.904878, 0.905346, 0.905812, 0.906275, 0.906735, 0.907193, 0.907648, 0.908100, 0.908550, 0.908998, 0.909443, 0.909885, 0.910325, 0.910762, 0.911198, 0.911630, 0.912060, 0.912488, 0.912914, 0.913337, 0.913757, 0.914176, 0.914592, 0.915005, 0.915417, 0.915826, 0.916233, 0.916638, 0.917040, 0.917440, 0.917838, 0.918234, 0.918628, 0.919019, 0.919408, 0.919796, 0.920181, 0.920564, 0.920944, 0.921323, 0.921700, 0.922075, 0.922447, 0.922818, 0.923186, 0.923553, 0.923917, 0.924280, 0.924641, 0.924999, 0.925356, 0.925711, 0.926064, 0.926415, 0.926764, 0.927111, 0.927456, 0.927800, 0.928141, 0.928481, 0.928819, 0.929155, 0.929490, 0.929822, 0.930153, 0.930482, 0.930809, 0.931135, 0.931459, 0.931781, 0.932101, 0.932420, 0.932737, 0.933052, 0.933365, 0.933677, 0.933988, 0.934296, 0.934603, 0.934909, 0.935213, 0.935515, 0.935815, 0.936114, 0.936412, 0.936708, 0.937002, 0.937295, 0.937586, 0.937876, 0.938164, 0.938451, 0.938736, 0.939020, 0.939302, 0.939583, 0.939862, 0.940140, 0.940416, 0.940691, 0.940965, 0.941237, 0.941507, 0.941777, 0.942045, 0.942311, 0.942576, 0.942840, 0.943103, 0.943364, 0.943623, 0.943882, 0.944139, 0.944395, 0.944649, 0.944902, 0.945154, 0.945405, 0.945654, 0.945902, 0.946149, 0.946394, 0.946638, 0.946881, 0.947123, 0.947363, 0.947603, 0.947841, 0.948078, 0.948313, 0.948548, 0.948781, 0.949013, 0.949244, 0.949474, 0.949702, 0.949930, 0.950156, 0.950381, 0.950605, 0.950828, 0.951050, 0.951270, 0.951490, 0.951708, 0.951926, 0.952142, 0.952357, 0.952571, 0.952784, 0.952996, 0.953207, 0.953417, 0.953626, 0.953833, 0.954040, 0.954246, 0.954451, 0.954654, 0.954857, 0.955059, 0.955259, 0.955459, 0.955657, 0.955855, 0.956052, 0.956248, 0.956442, 0.956636, 0.956829, 0.957021, 0.957212, 0.957402, 0.957591, 0.957779, 0.957966, 0.958153, 0.958338, 0.958522, 0.958706, 0.958889, 0.959071, 0.959251, 0.959431, 0.959611, 0.959789, 0.959966, 0.960143, 0.960318, 0.960493, 0.960667, 0.960840, 0.961013, 0.961184, 0.961355, 0.961524, 0.961693, 0.961862, 0.962029, 0.962195, 0.962361, 0.962526, 0.962690, 0.962854, 0.963016, 0.963178, 0.963339, 0.963499, 0.963659, 0.963817, 0.963975, 0.964132, 0.964289, 0.964444, 0.964599, 0.964754, 0.964907, 0.965060, 0.965212, 0.965363, 0.965513, 0.965663, 0.965812, 0.965961, 0.966108, 0.966255, 0.966402, 0.966547, 0.966692, 0.966836, 0.966980, 0.967123, 0.967265, 0.967407, 0.967547, 0.967688, 0.967827, 0.967966, 0.968104, 0.968242, 0.968379, 0.968515, 0.968650, 0.968785, 0.968920, 0.969053, 0.969186, 0.969319, 0.969451, 0.969582, 0.969713, 0.969843, 0.969972, 0.970101, 0.970229, 0.970356, 0.970483, 0.970610, 0.970736, 0.970861, 0.970985, 0.971110, 0.971233, 0.971356, 0.971478, 0.971600, 0.971721, 0.971842, 0.971962, 0.972081, 0.972200, 0.972319, 0.972437, 0.972554, 0.972671, 0.972787, 0.972903, 0.973018, 0.973133, 0.973247, 0.973360, 0.973473, 0.973586, 0.973698, 0.973809, 0.973920, 0.974031, 0.974141, 0.974250, 0.974359, 0.974468, 0.974576, 0.974683, 0.974790, 0.974897, 0.975003, 0.975108, 0.975213, 0.975318, 0.975422, 0.975526, 0.975629, 0.975731, 0.975834, 0.975935, 0.976037, 0.976138, 0.976238, 0.976338, 0.976437, 0.976536, 0.976635, 0.976733, 0.976831, 0.976928, 0.977025, 0.977121, 0.977217, 0.977312, 0.977407, 0.977502, 0.977596, 0.977690, 0.977783, 0.977876, 0.977969, 0.978061, 0.978153, 0.978244, 0.978335, 0.978425, 0.978515, 0.978605, 0.978694, 0.978783, 0.978871, 0.978959, 0.979047, 0.979134, 0.979221, 0.979308, 0.979394, 0.979479, 0.979565, 0.979650, 0.979734, 0.979818, 0.979902, 0.979986, 0.980069, 0.980151, 0.980234, 0.980316, 0.980397, 0.980479, 0.980560, 0.980640, 0.980720, 0.980800, 0.980879, 0.980959, 0.981037, 0.981116, 0.981194, 0.981271, 0.981349, 0.981426, 0.981503, 0.981579, 0.981655, 0.981731, 0.981806, 0.981881, 0.981956, 0.982030, 0.982104, 0.982178, 0.982251, 0.982324, 0.982397, 0.982469, 0.982541, 0.982613, 0.982685, 0.982756, 0.982827, 0.982897, 0.982967, 0.983037, 0.983107, 0.983176, 0.983245, 0.983314, 0.983382, 0.983450, 0.983518, 0.983586, 0.983653, 0.983720, 0.983786, 0.983853, 0.983919, 0.983985, 0.984050, 0.984115, 0.984180, 0.984245, 0.984309, 0.984373, 0.984437, 0.984500, 0.984564, 0.984627, 0.984689, 0.984752, 0.984814, 0.984876, 0.984937, 0.984999, 0.985060, 0.985121, 0.985181, 0.985242, 0.985302
 };
 
-double MI_map_64qam_axis[MI_MAP_64QAM_SIZE] = {
+static const double MI_map_64qam_axis[MI_MAP_64QAM_SIZE] = {
   0.250000, 0.460000, 0.670000, 0.880000, 1.090000, 1.300000, 1.510000, 1.720000, 1.930000, 2.140000, 2.350000, 2.560000, 2.770000, 2.980000, 3.190000, 3.400000, 3.610000, 3.820000, 4.030000, 4.240000, 4.450000, 4.660000, 4.870000, 5.080000, 5.290000, 5.500000, 5.710000, 5.920000, 6.130000, 6.340000, 6.550000, 6.760000, 6.970000, 7.180000, 7.390000, 7.600000, 7.810000, 8.020000, 8.230000, 8.440000, 8.650000, 8.860000, 9.070000, 9.280000, 9.490000, 9.700000, 9.910000, 10.120000, 10.330000, 10.540000, 10.750000, 10.960000, 11.170000, 11.380000, 11.590000, 11.800000, 12.010000, 12.220000, 12.430000, 12.640000, 12.850000, 13.060000, 13.270000, 13.480000, 13.690000, 13.900000, 14.110000, 14.320000, 14.530000, 14.740000, 14.950000, 15.160000, 15.370000, 15.580000, 15.790000, 16.000000, 16.210000, 16.420000, 16.630000, 16.840000, 17.050000, 17.260000, 17.470000, 17.680000, 17.890000, 18.100000, 18.310000, 18.520000, 18.730000, 18.940000, 19.150000, 19.360000, 19.570000, 19.780000, 19.990000, 20.200000, 20.410000, 20.620000, 20.830000, 21.040000, 21.250000, 21.460000, 21.670000, 21.880000, 22.090000, 22.300000, 22.510000, 22.720000, 22.930000, 23.140000, 23.350000, 23.560000, 23.770000, 23.980000, 24.190000, 24.400000, 24.610000, 24.820000, 25.030000, 25.240000, 25.450000, 25.660000, 25.870000, 26.080000, 26.290000, 26.500000, 26.710000, 26.920000, 27.130000, 27.340000, 27.550000, 27.760000, 27.970000, 28.180000, 28.390000, 28.600000, 28.810000, 29.020000, 29.230000, 29.440000, 29.650000, 29.860000, 30.070000, 30.280000, 30.490000, 30.700000, 30.910000, 31.120000, 31.330000, 31.540000, 31.750000, 31.960000, 32.170000, 32.380000, 32.590000, 32.800000, 33.010000, 33.220000, 33.430000, 33.640000, 33.850000, 34.060000, 34.270000, 34.480000, 34.690000, 34.900000, 35.110000, 35.320000, 35.530000, 35.740000, 35.950000, 36.160000, 36.370000, 36.580000, 36.790000, 37.000000, 37.210000, 37.420000, 37.630000, 37.840000, 38.050000, 38.260000, 38.470000, 38.680000, 38.890000, 39.100000, 39.310000, 39.520000, 39.730000, 39.940000, 40.150000, 40.360000, 40.570000, 40.780000, 40.990000, 41.200000, 41.410000, 41.620000, 41.830000, 42.040000, 42.250000, 42.460000, 42.670000, 42.880000, 43.090000, 43.300000, 43.510000, 43.720000, 43.930000, 44.140000, 44.350000, 44.560000, 44.770000, 44.980000, 45.190000, 45.400000, 45.610000, 45.820000, 46.030000, 46.240000, 46.450000, 46.660000, 46.870000, 47.080000, 47.290000, 47.500000, 47.710000, 47.920000, 48.130000, 48.340000, 48.550000, 48.760000, 48.970000, 49.180000, 49.390000, 49.600000, 49.810000, 50.020000, 50.230000, 50.440000, 50.650000, 50.860000, 51.070000, 51.280000, 51.490000, 51.700000, 51.910000, 52.120000, 52.330000, 52.540000, 52.750000, 52.960000, 53.170000, 53.380000, 53.590000, 53.800000, 54.010000, 54.220000, 54.430000, 54.640000, 54.850000, 55.060000, 55.270000, 55.480000, 55.690000, 55.900000, 56.110000, 56.320000, 56.530000, 56.740000, 56.950000, 57.160000, 57.370000, 57.580000, 57.790000, 58.000000, 58.210000, 58.420000, 58.630000, 58.840000, 59.050000, 59.260000, 59.470000, 59.680000, 59.890000, 60.100000, 60.310000, 60.520000, 60.730000, 60.940000, 61.150000, 61.360000, 61.570000, 61.780000, 61.990000, 62.200000, 62.410000, 62.620000, 62.830000, 63.040000, 63.250000, 63.460000, 63.670000, 63.880000, 64.090000, 64.300000, 64.510000, 64.720000, 64.930000, 65.140000, 65.350000, 65.560000, 65.770000, 65.980000, 66.190000, 66.400000, 66.610000, 66.820000, 67.030000, 67.240000, 67.450000, 67.660000, 67.870000, 68.080000, 68.290000, 68.500000, 68.710000, 68.920000, 69.130000, 69.340000, 69.550000, 69.760000, 69.970000, 70.180000, 70.390000, 70.600000, 70.810000, 71.020000, 71.230000, 71.440000, 71.650000, 71.860000, 72.070000, 72.280000, 72.490000, 72.700000, 72.910000, 73.120000, 73.330000, 73.540000, 73.750000, 73.960000, 74.170000, 74.380000, 74.590000, 74.800000, 75.010000, 75.220000, 75.430000, 75.640000, 75.850000, 76.060000, 76.270000, 76.480000, 76.690000, 76.900000, 77.110000, 77.320000, 77.530000, 77.740000, 77.950000, 78.160000, 78.370000, 78.580000, 78.790000, 79.000000, 79.210000, 79.420000, 79.630000, 79.840000, 80.050000, 80.260000, 80.470000, 80.680000, 80.890000, 81.100000, 81.310000, 81.520000, 81.730000, 81.940000, 82.150000, 82.360000, 82.570000, 82.780000, 82.990000, 83.200000, 83.410000, 83.620000, 83.830000, 84.040000, 84.250000, 84.460000, 84.670000, 84.880000, 85.090000, 85.300000, 85.510000, 85.720000, 85.930000, 86.140000, 86.350000, 86.560000, 86.770000, 86.980000, 87.190000, 87.400000, 87.610000, 87.820000, 88.030000, 88.240000, 88.450000, 88.660000, 88.870000, 89.080000, 89.290000, 89.500000, 89.710000, 89.920000, 90.130000, 90.340000, 90.550000, 90.760000, 90.970000, 91.180000, 91.390000, 91.600000, 91.810000, 92.020000, 92.230000, 92.440000, 92.650000, 92.860000, 93.070000, 93.280000, 93.490000, 93.700000, 93.910000, 94.120000, 94.330000, 94.540000, 94.750000, 94.960000, 95.170000, 95.380000, 95.590000, 95.800000, 96.010000, 96.220000, 96.430000, 96.640000, 96.850000, 97.060000, 97.270000, 97.480000, 97.690000, 97.900000, 98.110000, 98.320000, 98.530000, 98.740000, 98.950000, 99.160000, 99.370000, 99.580000, 99.790000, 100.000000, 100.210000, 100.420000, 100.630000, 100.840000, 101.050000, 101.260000, 101.470000, 101.680000, 101.890000, 102.100000, 102.310000, 102.520000, 102.730000, 102.940000, 103.150000, 103.360000, 103.570000, 103.780000, 103.990000, 104.200000, 104.410000, 104.620000, 104.830000, 105.040000, 105.250000, 105.460000, 105.670000, 105.880000, 106.090000, 106.300000, 106.510000, 106.720000, 106.930000, 107.140000, 107.350000, 107.560000, 107.770000, 107.980000, 108.190000, 108.400000, 108.610000, 108.820000, 109.030000, 109.240000, 109.450000, 109.660000, 109.870000, 110.080000, 110.290000, 110.500000, 110.710000, 110.920000, 111.130000, 111.340000, 111.550000, 111.760000, 111.970000, 112.180000, 112.390000, 112.600000, 112.810000, 113.020000, 113.230000, 113.440000, 113.650000, 113.860000, 114.070000, 114.280000, 114.490000, 114.700000, 114.910000, 115.120000, 115.330000, 115.540000, 115.750000, 115.960000, 116.170000, 116.380000, 116.590000, 116.800000, 117.010000, 117.220000, 117.430000, 117.640000, 117.850000, 118.060000, 118.270000, 118.480000, 118.690000, 118.900000, 119.110000, 119.320000, 119.530000, 119.740000, 119.950000, 120.160000, 120.370000, 120.580000, 120.790000, 121.000000, 121.210000, 121.420000, 121.630000, 121.840000, 122.050000, 122.260000, 122.470000, 122.680000, 122.890000, 123.100000, 123.310000, 123.520000, 123.730000, 123.940000, 124.150000, 124.360000, 124.570000, 124.780000, 124.990000, 125.200000, 125.410000, 125.620000, 125.830000, 126.040000, 126.250000, 126.460000, 126.670000, 126.880000, 127.090000, 127.300000, 127.510000, 127.720000, 127.930000, 128.140000, 128.350000, 128.560000, 128.770000, 128.980000, 129.190000, 129.400000, 129.610000, 129.820000, 130.030000, 130.240000, 130.450000, 130.660000, 130.870000, 131.080000, 131.290000, 131.500000, 131.710000, 131.920000, 132.130000, 132.340000, 132.550000, 132.760000, 132.970000, 133.180000, 133.390000, 133.600000, 133.810000, 134.020000, 134.230000, 134.440000, 134.650000, 134.860000, 135.070000, 135.280000, 135.490000, 135.700000, 135.910000, 136.120000, 136.330000, 136.540000, 136.750000, 136.960000, 137.170000, 137.380000, 137.590000, 137.800000, 138.010000, 138.220000, 138.430000, 138.640000, 138.850000, 139.060000, 139.270000, 139.480000, 139.690000, 139.900000, 140.110000, 140.320000, 140.530000, 140.740000, 140.950000, 141.160000, 141.370000, 141.580000, 141.790000, 142.000000, 142.210000, 142.420000, 142.630000, 142.840000, 143.050000, 143.260000, 143.470000, 143.680000, 143.890000, 144.100000, 144.310000, 144.520000, 144.730000, 144.940000, 145.150000, 145.360000, 145.570000, 145.780000, 145.990000, 146.200000, 146.410000, 146.620000, 146.830000, 147.040000, 147.250000, 147.460000, 147.670000, 147.880000, 148.090000, 148.300000, 148.510000, 148.720000, 148.930000, 149.140000, 149.350000, 149.560000, 149.770000, 149.980000, 150.190000, 150.400000, 150.610000, 150.820000, 151.030000, 151.240000, 151.450000, 151.660000, 151.870000, 152.080000, 152.290000, 152.500000, 152.710000, 152.920000, 153.130000, 153.340000, 153.550000, 153.760000, 153.970000, 154.180000, 154.390000, 154.600000, 154.810000, 155.020000, 155.230000, 155.440000, 155.650000, 155.860000, 156.070000, 156.280000, 156.490000, 156.700000, 156.910000, 157.120000, 157.330000, 157.540000, 157.750000, 157.960000
 };
 
 
 
 
-double bEcrTable [9][38] = {
+static const double bEcrTable [9][38] = {
   // CB of 40 bits
   {
     0.02472, 0.06352, 0.09516, // QPSK retx
@@ -235,7 +237,7 @@
 };
   
   
-double cEcrTable [9][38] = {
+static const double cEcrTable [9][38] = {
   // CB of 40 bits
   {
     0.00543, 0.01337, 0.01969, // QPSK retx
@@ -465,21 +467,23 @@
   while (sinrIt!=sinrCopy.ValuesEnd ())
     {
       double sinrLin = *sinrIt;
-      int tr = 0;
-      while ((tr<MI_MAP_QPSK_SIZE)&&(MI_map_qpsk_axis[tr] < sinrLin))
-        {
-          tr++;
-        }
       if (sinrLin > MI_map_qpsk_axis[MI_MAP_QPSK_SIZE-1])
         {
           MI = 1;
         }
       else 
-        {
-          NS_ASSERT_MSG (tr<MI_MAP_QPSK_SIZE, "MI map out of data");
-          MI = MI_map_qpsk[tr];
+        { 
+          // since the values in MI_map_qpsk_axis are uniformly spaced, we have
+          // index = ((sinrLin - value[0]) / (value[SIZE-1] - value[0])) * (SIZE-1)
+              // the scaling coefficient is always the same, so we use a static const
+              // to speed up the calculation
+          static const double scalingCoeffQpsk = 
+            (MI_MAP_QPSK_SIZE - 1) / (MI_map_qpsk_axis[MI_MAP_QPSK_SIZE-1] - MI_map_qpsk_axis[0]);
+          double sinrIndexDouble = (sinrLin -  MI_map_qpsk_axis[0]) * scalingCoeffQpsk + 1;
+          uint32_t sinrIndex = std::max(0.0, std::floor (sinrIndexDouble));
+          NS_ASSERT_MSG (sinrIndex < MI_MAP_QPSK_SIZE, "MI map out of data");
+          MI = MI_map_qpsk[sinrIndex];
         }
-//       NS_LOG_DEBUG (" RB " << rb << " SINR " << 10*log10 (sinrLin) << " MI " << MI);
       MIsum += MI;
       sinrIt++;
       rb++;
@@ -655,7 +659,8 @@
   else
     {
       // second segmentation size: K- = maximum K in table such that K < K+
-      Kminus = cbSizeTable[KplusId-1 > 0 ? KplusId-1 : 0];
+      // -fstrict-overflow sensitive, see bug 1868
+      Kminus = cbSizeTable[ KplusId > 1 ? KplusId - 1 : 0];
       deltaK = Kplus - Kminus;
       Cminus = floor ((((double) C * Kplus) - (double)B1) / (double)deltaK);
       Cplus = C - Cminus;
diff -Naur ns-3.19/src/lte/model/lte-net-device.cc ns-3.20/src/lte/model/lte-net-device.cc
--- ns-3.19/src/lte/model/lte-net-device.cc	2014-06-17 10:34:00.271637951 -0700
+++ ns-3.20/src/lte/model/lte-net-device.cc	2014-06-17 10:33:13.642997899 -0700
@@ -40,8 +40,7 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED ( LteNetDevice)
-  ;
+NS_OBJECT_ENSURE_REGISTERED ( LteNetDevice);
 
 ////////////////////////////////
 // LteNetDevice
diff -Naur ns-3.19/src/lte/model/lte-pdcp.cc ns-3.20/src/lte/model/lte-pdcp.cc
--- ns-3.19/src/lte/model/lte-pdcp.cc	2014-06-17 10:34:00.274637928 -0700
+++ ns-3.20/src/lte/model/lte-pdcp.cc	2014-06-17 10:33:13.644997883 -0700
@@ -61,8 +61,7 @@
 
 ///////////////////////////////////////
 
-NS_OBJECT_ENSURE_REGISTERED (LtePdcp)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (LtePdcp);
 
 LtePdcp::LtePdcp ()
   : m_pdcpSapUser (0),
diff -Naur ns-3.19/src/lte/model/lte-pdcp-header.cc ns-3.20/src/lte/model/lte-pdcp-header.cc
--- ns-3.19/src/lte/model/lte-pdcp-header.cc	2014-06-17 10:34:00.272637943 -0700
+++ ns-3.20/src/lte/model/lte-pdcp-header.cc	2014-06-17 10:33:13.642997899 -0700
@@ -26,8 +26,7 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (LtePdcpHeader)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (LtePdcpHeader);
 
 LtePdcpHeader::LtePdcpHeader ()
   : m_dcBit (0xff),
diff -Naur ns-3.19/src/lte/model/lte-pdcp-tag.cc ns-3.20/src/lte/model/lte-pdcp-tag.cc
--- ns-3.19/src/lte/model/lte-pdcp-tag.cc	2014-06-17 10:34:00.273637936 -0700
+++ ns-3.20/src/lte/model/lte-pdcp-tag.cc	2014-06-17 10:33:13.644997883 -0700
@@ -25,8 +25,7 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (PdcpTag)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (PdcpTag);
 
 PdcpTag::PdcpTag ()
   : m_senderTimestamp (Seconds (0))
diff -Naur ns-3.19/src/lte/model/lte-phy.cc ns-3.20/src/lte/model/lte-phy.cc
--- ns-3.19/src/lte/model/lte-phy.cc	2014-06-17 10:34:00.276637912 -0700
+++ ns-3.20/src/lte/model/lte-phy.cc	2014-06-17 10:33:13.646997868 -0700
@@ -33,8 +33,7 @@
 namespace ns3 {
 
 
-NS_OBJECT_ENSURE_REGISTERED (LtePhy)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (LtePhy);
 
 
 LtePhy::LtePhy ()
diff -Naur ns-3.19/src/lte/model/lte-phy-tag.cc ns-3.20/src/lte/model/lte-phy-tag.cc
--- ns-3.19/src/lte/model/lte-phy-tag.cc	2014-06-17 10:34:00.275637920 -0700
+++ ns-3.20/src/lte/model/lte-phy-tag.cc	2014-06-17 10:33:13.645997876 -0700
@@ -26,8 +26,7 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (LtePhyTag)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (LtePhyTag);
 
 TypeId
 LtePhyTag::GetTypeId (void)
diff -Naur ns-3.19/src/lte/model/lte-radio-bearer-info.cc ns-3.20/src/lte/model/lte-radio-bearer-info.cc
--- ns-3.19/src/lte/model/lte-radio-bearer-info.cc	2014-06-17 10:34:00.277637905 -0700
+++ ns-3.20/src/lte/model/lte-radio-bearer-info.cc	2014-06-17 10:33:13.647997860 -0700
@@ -29,8 +29,7 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (LteRadioBearerInfo)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (LteRadioBearerInfo);
 
 LteRadioBearerInfo::LteRadioBearerInfo (void)
 {
diff -Naur ns-3.19/src/lte/model/lte-radio-bearer-tag.cc ns-3.20/src/lte/model/lte-radio-bearer-tag.cc
--- ns-3.19/src/lte/model/lte-radio-bearer-tag.cc	2014-06-17 10:34:00.278637897 -0700
+++ ns-3.20/src/lte/model/lte-radio-bearer-tag.cc	2014-06-17 10:33:13.648997853 -0700
@@ -25,8 +25,7 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (LteRadioBearerTag)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (LteRadioBearerTag);
 
 TypeId
 LteRadioBearerTag::GetTypeId (void)
diff -Naur ns-3.19/src/lte/model/lte-rlc-am.cc ns-3.20/src/lte/model/lte-rlc-am.cc
--- ns-3.19/src/lte/model/lte-rlc-am.cc	2014-06-17 10:34:00.280637881 -0700
+++ ns-3.20/src/lte/model/lte-rlc-am.cc	2014-06-17 10:33:13.650997837 -0700
@@ -30,8 +30,7 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (LteRlcAm)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (LteRlcAm);
 
 LteRlcAm::LteRlcAm ()
 {
diff -Naur ns-3.19/src/lte/model/lte-rlc-am-header.cc ns-3.20/src/lte/model/lte-rlc-am-header.cc
--- ns-3.19/src/lte/model/lte-rlc-am-header.cc	2014-06-17 10:34:00.279637889 -0700
+++ ns-3.20/src/lte/model/lte-rlc-am-header.cc	2014-06-17 10:33:13.649997845 -0700
@@ -26,8 +26,7 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (LteRlcAmHeader)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (LteRlcAmHeader);
 
 LteRlcAmHeader::LteRlcAmHeader ()
   : m_headerLength (0),
diff -Naur ns-3.19/src/lte/model/lte-rlc.cc ns-3.20/src/lte/model/lte-rlc.cc
--- ns-3.19/src/lte/model/lte-rlc.cc	2014-06-17 10:34:00.287637828 -0700
+++ ns-3.20/src/lte/model/lte-rlc.cc	2014-06-17 10:33:13.657997783 -0700
@@ -81,8 +81,7 @@
 
 ///////////////////////////////////////
 
-NS_OBJECT_ENSURE_REGISTERED (LteRlc)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (LteRlc);
 
 LteRlc::LteRlc ()
   : m_rlcSapUser (0),
@@ -168,8 +167,7 @@
 
 ////////////////////////////////////////
 
-NS_OBJECT_ENSURE_REGISTERED (LteRlcSm)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (LteRlcSm);
 
 LteRlcSm::LteRlcSm ()
 {
diff -Naur ns-3.19/src/lte/model/lte-rlc-header.cc ns-3.20/src/lte/model/lte-rlc-header.cc
--- ns-3.19/src/lte/model/lte-rlc-header.cc	2014-06-17 10:34:00.281637874 -0700
+++ ns-3.20/src/lte/model/lte-rlc-header.cc	2014-06-17 10:33:13.651997829 -0700
@@ -26,8 +26,7 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (LteRlcHeader)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (LteRlcHeader);
 
 LteRlcHeader::LteRlcHeader ()
   : m_headerLength (0),
diff -Naur ns-3.19/src/lte/model/lte-rlc-sdu-status-tag.cc ns-3.20/src/lte/model/lte-rlc-sdu-status-tag.cc
--- ns-3.19/src/lte/model/lte-rlc-sdu-status-tag.cc	2014-06-17 10:34:00.283637858 -0700
+++ ns-3.20/src/lte/model/lte-rlc-sdu-status-tag.cc	2014-06-17 10:33:13.652997822 -0700
@@ -22,8 +22,7 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (LteRlcSduStatusTag)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (LteRlcSduStatusTag);
 
 LteRlcSduStatusTag::LteRlcSduStatusTag ()
 {
diff -Naur ns-3.19/src/lte/model/lte-rlc-sequence-number.h ns-3.20/src/lte/model/lte-rlc-sequence-number.h
--- ns-3.19/src/lte/model/lte-rlc-sequence-number.h	2014-06-17 10:34:00.283637858 -0700
+++ ns-3.20/src/lte/model/lte-rlc-sequence-number.h	2014-06-17 10:33:13.653997814 -0700
@@ -78,7 +78,7 @@
   SequenceNumber10 operator++ (int)
   {
     SequenceNumber10 retval (m_value);
-    m_value = (m_value + 1) % 1024;
+    m_value = ((uint32_t)m_value + 1) % 1024;
     return retval;
   }
 
diff -Naur ns-3.19/src/lte/model/lte-rlc-tag.cc ns-3.20/src/lte/model/lte-rlc-tag.cc
--- ns-3.19/src/lte/model/lte-rlc-tag.cc	2014-06-17 10:34:00.284637851 -0700
+++ ns-3.20/src/lte/model/lte-rlc-tag.cc	2014-06-17 10:33:13.653997814 -0700
@@ -24,8 +24,7 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (RlcTag)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (RlcTag);
 
 RlcTag::RlcTag ()
   : m_senderTimestamp (Seconds (0))
diff -Naur ns-3.19/src/lte/model/lte-rlc-tm.cc ns-3.20/src/lte/model/lte-rlc-tm.cc
--- ns-3.19/src/lte/model/lte-rlc-tm.cc	2014-06-17 10:34:00.284637851 -0700
+++ ns-3.20/src/lte/model/lte-rlc-tm.cc	2014-06-17 10:33:13.654997806 -0700
@@ -29,8 +29,7 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (LteRlcTm)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (LteRlcTm);
 
 LteRlcTm::LteRlcTm ()
   : m_maxTxBufferSize (0),
diff -Naur ns-3.19/src/lte/model/lte-rlc-um.cc ns-3.20/src/lte/model/lte-rlc-um.cc
--- ns-3.19/src/lte/model/lte-rlc-um.cc	2014-06-17 10:34:00.286637835 -0700
+++ ns-3.20/src/lte/model/lte-rlc-um.cc	2014-06-17 10:33:13.656997791 -0700
@@ -30,8 +30,7 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (LteRlcUm)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (LteRlcUm);
 
 LteRlcUm::LteRlcUm ()
   : m_maxTxBufferSize (10 * 1024),
diff -Naur ns-3.19/src/lte/model/lte-rrc-protocol-ideal.cc ns-3.20/src/lte/model/lte-rrc-protocol-ideal.cc
--- ns-3.19/src/lte/model/lte-rrc-protocol-ideal.cc	2014-06-17 10:34:00.292637789 -0700
+++ ns-3.20/src/lte/model/lte-rrc-protocol-ideal.cc	2014-06-17 10:33:13.662997744 -0700
@@ -37,10 +37,9 @@
 namespace ns3 {
 
 
-const Time RRC_IDEAL_MSG_DELAY = MilliSeconds (0); 
+static const Time RRC_IDEAL_MSG_DELAY = MilliSeconds (0);
 
-NS_OBJECT_ENSURE_REGISTERED (LteUeRrcProtocolIdeal)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (LteUeRrcProtocolIdeal);
 
 LteUeRrcProtocolIdeal::LteUeRrcProtocolIdeal ()
   :  m_ueRrcSapProvider (0),
@@ -207,8 +206,7 @@
 }
 
 
-NS_OBJECT_ENSURE_REGISTERED (LteEnbRrcProtocolIdeal)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (LteEnbRrcProtocolIdeal);
 
 LteEnbRrcProtocolIdeal::LteEnbRrcProtocolIdeal ()
   :  m_enbRrcSapProvider (0)
@@ -421,8 +419,8 @@
  * 
  */
 
-std::map<uint32_t, LteRrcSap::HandoverPreparationInfo> g_handoverPreparationInfoMsgMap;
-uint32_t g_handoverPreparationInfoMsgIdCounter = 0;
+static std::map<uint32_t, LteRrcSap::HandoverPreparationInfo> g_handoverPreparationInfoMsgMap;
+static uint32_t g_handoverPreparationInfoMsgIdCounter = 0;
 
 /*
  * This header encodes the map key discussed above. We keep this
@@ -527,8 +525,8 @@
 
 
 
-std::map<uint32_t, LteRrcSap::RrcConnectionReconfiguration> g_handoverCommandMsgMap;
-uint32_t g_handoverCommandMsgIdCounter = 0;
+static std::map<uint32_t, LteRrcSap::RrcConnectionReconfiguration> g_handoverCommandMsgMap;
+static uint32_t g_handoverCommandMsgIdCounter = 0;
 
 /*
  * This header encodes the map key discussed above. We keep this
diff -Naur ns-3.19/src/lte/model/lte-rrc-protocol-real.cc ns-3.20/src/lte/model/lte-rrc-protocol-real.cc
--- ns-3.19/src/lte/model/lte-rrc-protocol-real.cc	2014-06-17 10:34:00.294637773 -0700
+++ ns-3.20/src/lte/model/lte-rrc-protocol-real.cc	2014-06-17 10:33:13.663997737 -0700
@@ -40,8 +40,7 @@
 
 const Time RRC_REAL_MSG_DELAY = MilliSeconds (0); 
 
-NS_OBJECT_ENSURE_REGISTERED (LteUeRrcProtocolReal)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (LteUeRrcProtocolReal);
 
 LteUeRrcProtocolReal::LteUeRrcProtocolReal ()
   :  m_ueRrcSapProvider (0),
@@ -351,8 +350,7 @@
     }
 }
 
-NS_OBJECT_ENSURE_REGISTERED (LteEnbRrcProtocolReal)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (LteEnbRrcProtocolReal);
 
 LteEnbRrcProtocolReal::LteEnbRrcProtocolReal ()
   :  m_enbRrcSapProvider (0)
diff -Naur ns-3.19/src/lte/model/lte-spectrum-phy.cc ns-3.20/src/lte/model/lte-spectrum-phy.cc
--- ns-3.19/src/lte/model/lte-spectrum-phy.cc	2014-06-17 10:34:00.298637743 -0700
+++ ns-3.20/src/lte/model/lte-spectrum-phy.cc	2014-06-17 10:33:13.668997698 -0700
@@ -53,7 +53,7 @@
 // = 0.001 / 14 * 3 (ctrl fixed to 3 symbols) -1ns as margin to avoid overlapping simulator events
 static const Time DL_CTRL_DURATION = NanoSeconds (214286 -1);
 
-double EffectiveCodingRate[29] = {
+static const double EffectiveCodingRate[29] = {
   0.08,
   0.1,
   0.11,
@@ -110,8 +110,7 @@
   return ( (a.m_rnti < b.m_rnti) || ( (a.m_rnti == b.m_rnti) && (a.m_layer < b.m_layer) ) );
 }
 
-NS_OBJECT_ENSURE_REGISTERED (LteSpectrumPhy)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (LteSpectrumPhy);
 
 LteSpectrumPhy::LteSpectrumPhy ()
   : m_state (IDLE),
diff -Naur ns-3.19/src/lte/model/lte-spectrum-value-helper.cc ns-3.20/src/lte/model/lte-spectrum-value-helper.cc
--- ns-3.19/src/lte/model/lte-spectrum-value-helper.cc	2014-06-17 10:34:00.301637719 -0700
+++ ns-3.20/src/lte/model/lte-spectrum-value-helper.cc	2014-06-17 10:33:13.670997683 -0700
@@ -54,7 +54,7 @@
  * The table was converted to C syntax doing a cut & paste from TS 36.101 and running the following filter:
  * awk '{if ((NR % 7) == 1) printf("{"); printf ("%s",$0); if ((NR % 7) == 0) printf("},\n"); else printf(", ");}' | sed 's/ â€“ /, /g' 
  */
-struct EutraChannelNumbers
+static const struct EutraChannelNumbers
 {
   uint8_t band;
   double fDlLow;
diff -Naur ns-3.19/src/lte/model/lte-ue-mac.cc ns-3.20/src/lte/model/lte-ue-mac.cc
--- ns-3.19/src/lte/model/lte-ue-mac.cc	2014-06-17 10:34:00.304637696 -0700
+++ ns-3.20/src/lte/model/lte-ue-mac.cc	2014-06-17 10:33:13.674997652 -0700
@@ -41,8 +41,7 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (LteUeMac)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (LteUeMac);
 
 
 ///////////////////////////////////////////////////////////
diff -Naur ns-3.19/src/lte/model/lte-ue-net-device.cc ns-3.20/src/lte/model/lte-ue-net-device.cc
--- ns-3.19/src/lte/model/lte-ue-net-device.cc	2014-06-17 10:34:00.306637681 -0700
+++ ns-3.20/src/lte/model/lte-ue-net-device.cc	2014-06-17 10:33:13.675997644 -0700
@@ -48,8 +48,7 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED ( LteUeNetDevice)
-  ;
+NS_OBJECT_ENSURE_REGISTERED ( LteUeNetDevice);
 
 
 TypeId LteUeNetDevice::GetTypeId (void)
diff -Naur ns-3.19/src/lte/model/lte-ue-phy.cc ns-3.20/src/lte/model/lte-ue-phy.cc
--- ns-3.19/src/lte/model/lte-ue-phy.cc	2014-06-17 10:34:00.310637650 -0700
+++ ns-3.20/src/lte/model/lte-ue-phy.cc	2014-06-17 10:33:13.679997613 -0700
@@ -106,20 +106,19 @@
 // LteUePhy methods
 ////////////////////////////////////////
 
-const char* g_uePhyStateName[LteUePhy::NUM_STATES] =
+static const std::string g_uePhyStateName[LteUePhy::NUM_STATES] =
 {
   "CELL_SEARCH",
   "SYNCHRONIZED"
 };
 
-std::string ToString (LteUePhy::State s)
+static inline const std::string & ToString (LteUePhy::State s)
 {
-  return std::string (g_uePhyStateName[s]);
+  return g_uePhyStateName[s];
 }
 
 
-NS_OBJECT_ENSURE_REGISTERED (LteUePhy)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (LteUePhy);
 
 
 LteUePhy::LteUePhy ()
@@ -1110,7 +1109,7 @@
     {
       m_dlBandwidth = dlBandwidth;
 
-      int Type0AllocationRbg[4] = {
+      static const int Type0AllocationRbg[4] = {
         10,     // RGB size 1
         26,     // RGB size 2
         63,     // RGB size 3
diff -Naur ns-3.19/src/lte/model/lte-ue-rrc.cc ns-3.20/src/lte/model/lte-ue-rrc.cc
--- ns-3.19/src/lte/model/lte-ue-rrc.cc	2014-06-17 10:34:00.314637619 -0700
+++ ns-3.20/src/lte/model/lte-ue-rrc.cc	2014-06-17 10:33:13.683997582 -0700
@@ -88,7 +88,7 @@
 
 
 
-const char* g_ueRrcStateName[LteUeRrc::NUM_STATES] = 
+static const std::string g_ueRrcStateName[LteUeRrc::NUM_STATES] =
 {
   "IDLE_START",
   "IDLE_CELL_SEARCH",
@@ -105,9 +105,9 @@
   "CONNECTED_REESTABLISHING"
 };
 
-std::string ToString (LteUeRrc::State s)
+static const std::string & ToString (LteUeRrc::State s)
 {
-  return std::string (g_ueRrcStateName[s]);
+  return g_ueRrcStateName[s];
 }
 
 
@@ -115,8 +115,7 @@
 // ue RRC methods
 /////////////////////////////
 
-NS_OBJECT_ENSURE_REGISTERED (LteUeRrc)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (LteUeRrc);
 
 
 LteUeRrc::LteUeRrc ()
diff -Naur ns-3.19/src/lte/model/no-op-handover-algorithm.cc ns-3.20/src/lte/model/no-op-handover-algorithm.cc
--- ns-3.19/src/lte/model/no-op-handover-algorithm.cc	2014-06-17 10:34:00.316637604 -0700
+++ ns-3.20/src/lte/model/no-op-handover-algorithm.cc	2014-06-17 10:33:13.686997559 -0700
@@ -26,8 +26,7 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (NoOpHandoverAlgorithm)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (NoOpHandoverAlgorithm);
 
 
 NoOpHandoverAlgorithm::NoOpHandoverAlgorithm ()
diff -Naur ns-3.19/src/lte/model/pf-ff-mac-scheduler.cc ns-3.20/src/lte/model/pf-ff-mac-scheduler.cc
--- ns-3.19/src/lte/model/pf-ff-mac-scheduler.cc	2014-06-17 10:34:00.320637573 -0700
+++ ns-3.20/src/lte/model/pf-ff-mac-scheduler.cc	2014-06-17 10:33:13.690997528 -0700
@@ -34,7 +34,7 @@
 
 namespace ns3 {
 
-int PfType0AllocationRbg[4] = {
+static const int PfType0AllocationRbg[4] = {
   10,       // RGB size 1
   26,       // RGB size 2
   63,       // RGB size 3
@@ -42,8 +42,7 @@
 };  // see table 7.1.6.1-1 of 36.213
 
 
-NS_OBJECT_ENSURE_REGISTERED (PfFfMacScheduler)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (PfFfMacScheduler);
 
 
 
@@ -1550,6 +1549,7 @@
     {
       if (ret.m_dciList.size () > 0)
         {
+          m_allocationMaps.insert (std::pair <uint16_t, std::vector <uint16_t> > (params.m_sfnSf, rbgAllocationMap));
           m_schedSapUser->SchedUlConfigInd (ret);
         }
         
@@ -1617,7 +1617,7 @@
       uldci.m_rbLen = rbPerFlow;
       bool allocated = false;
       NS_LOG_INFO (this << " RB Allocated " << rbAllocated << " rbPerFlow " << rbPerFlow << " flows " << nflows);
-      while ((!allocated)&&((rbAllocated + rbPerFlow - 1) < m_cschedCellConfig.m_ulBandwidth) && (rbPerFlow != 0))
+      while ((!allocated)&&((rbAllocated + rbPerFlow - m_cschedCellConfig.m_ulBandwidth) < 1) && (rbPerFlow != 0))
         {
           // check availability
           bool free = true;
diff -Naur ns-3.19/src/lte/model/pss-ff-mac-scheduler.cc ns-3.20/src/lte/model/pss-ff-mac-scheduler.cc
--- ns-3.19/src/lte/model/pss-ff-mac-scheduler.cc	2014-06-17 10:34:00.322637557 -0700
+++ ns-3.20/src/lte/model/pss-ff-mac-scheduler.cc	2014-06-17 10:33:13.692997513 -0700
@@ -38,7 +38,7 @@
 
 namespace ns3 {
 
-int PssType0AllocationRbg[4] = {
+static const int PssType0AllocationRbg[4] = {
   10,       // RGB size 1
   26,       // RGB size 2
   63,       // RGB size 3
@@ -46,8 +46,7 @@
 };  // see table 7.1.6.1-1 of 36.213
 
 
-NS_OBJECT_ENSURE_REGISTERED (PssFfMacScheduler)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (PssFfMacScheduler);
 
 
 
@@ -1855,6 +1854,7 @@
     {
       if (ret.m_dciList.size () > 0)
         {
+          m_allocationMaps.insert (std::pair <uint16_t, std::vector <uint16_t> > (params.m_sfnSf, rbgAllocationMap));
           m_schedSapUser->SchedUlConfigInd (ret);
         }
         
@@ -1922,7 +1922,7 @@
       uldci.m_rbLen = rbPerFlow;
       bool allocated = false;
       NS_LOG_INFO (this << " RB Allocated " << rbAllocated << " rbPerFlow " << rbPerFlow << " flows " << nflows);
-      while ((!allocated)&&((rbAllocated + rbPerFlow - 1) < m_cschedCellConfig.m_ulBandwidth) && (rbPerFlow != 0))
+      while ((!allocated)&&((rbAllocated + rbPerFlow - m_cschedCellConfig.m_ulBandwidth) < 1) && (rbPerFlow != 0))
         {
           // check availability
           bool free = true;
diff -Naur ns-3.19/src/lte/model/rem-spectrum-phy.cc ns-3.20/src/lte/model/rem-spectrum-phy.cc
--- ns-3.19/src/lte/model/rem-spectrum-phy.cc	2014-06-17 10:34:00.323637549 -0700
+++ ns-3.20/src/lte/model/rem-spectrum-phy.cc	2014-06-17 10:33:13.693997505 -0700
@@ -35,8 +35,7 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (RemSpectrumPhy)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (RemSpectrumPhy);
 
 RemSpectrumPhy::RemSpectrumPhy ()
   : m_mobility (0),    
diff -Naur ns-3.19/src/lte/model/rr-ff-mac-scheduler.cc ns-3.20/src/lte/model/rr-ff-mac-scheduler.cc
--- ns-3.19/src/lte/model/rr-ff-mac-scheduler.cc	2014-06-17 10:34:00.327637518 -0700
+++ ns-3.20/src/lte/model/rr-ff-mac-scheduler.cc	2014-06-17 10:33:13.697997474 -0700
@@ -36,7 +36,7 @@
 
 namespace ns3 {
 
-int Type0AllocationRbg[4] = {
+static const int Type0AllocationRbg[4] = {
   10,       // RGB size 1
   26,       // RGB size 2
   63,       // RGB size 3
@@ -46,8 +46,7 @@
 
 
 
-NS_OBJECT_ENSURE_REGISTERED (RrFfMacScheduler)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (RrFfMacScheduler);
 
 
 class RrSchedulerMemberCschedSapProvider : public FfMacCschedSapProvider
@@ -1389,6 +1388,7 @@
     {
       if (ret.m_dciList.size () > 0)
         {
+          m_allocationMaps.insert (std::pair <uint16_t, std::vector <uint16_t> > (params.m_sfnSf, rbgAllocationMap));
           m_schedSapUser->SchedUlConfigInd (ret);
         }
       return;  // no flows to be scheduled
@@ -1454,7 +1454,7 @@
       uldci.m_rbLen = rbPerFlow;
       bool allocated = false;
       NS_LOG_INFO (this << " RB Allocated " << rbAllocated << " rbPerFlow " << rbPerFlow << " flows " << nflows);
-      while ((!allocated)&&((rbAllocated + rbPerFlow - 1) < m_cschedCellConfig.m_ulBandwidth) && (rbPerFlow != 0))
+      while ((!allocated)&&((rbAllocated + rbPerFlow - m_cschedCellConfig.m_ulBandwidth) < 1) && (rbPerFlow != 0))
         {
           // check availability
           bool free = true;
diff -Naur ns-3.19/src/lte/model/tdbet-ff-mac-scheduler.cc ns-3.20/src/lte/model/tdbet-ff-mac-scheduler.cc
--- ns-3.19/src/lte/model/tdbet-ff-mac-scheduler.cc	2014-06-17 10:34:00.329637503 -0700
+++ ns-3.20/src/lte/model/tdbet-ff-mac-scheduler.cc	2014-06-17 10:33:13.699997459 -0700
@@ -35,7 +35,7 @@
 
 namespace ns3 {
 
-int TdBetType0AllocationRbg[4] = {
+static const int TdBetType0AllocationRbg[4] = {
   10,       // RGB size 1
   26,       // RGB size 2
   63,       // RGB size 3
@@ -43,8 +43,7 @@
 };  // see table 7.1.6.1-1 of 36.213
 
 
-NS_OBJECT_ENSURE_REGISTERED (TdBetFfMacScheduler)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (TdBetFfMacScheduler);
 
 
 
@@ -1448,6 +1447,7 @@
     {
       if (ret.m_dciList.size () > 0)
         {
+          m_allocationMaps.insert (std::pair <uint16_t, std::vector <uint16_t> > (params.m_sfnSf, rbgAllocationMap));
           m_schedSapUser->SchedUlConfigInd (ret);
         }
         
@@ -1515,7 +1515,7 @@
       uldci.m_rbLen = rbPerFlow;
       bool allocated = false;
       NS_LOG_INFO (this << " RB Allocated " << rbAllocated << " rbPerFlow " << rbPerFlow << " flows " << nflows);
-      while ((!allocated)&&((rbAllocated + rbPerFlow - 1) < m_cschedCellConfig.m_ulBandwidth) && (rbPerFlow != 0))
+      while ((!allocated)&&((rbAllocated + rbPerFlow - m_cschedCellConfig.m_ulBandwidth) < 1) && (rbPerFlow != 0))
         {
           // check availability
           bool free = true;
diff -Naur ns-3.19/src/lte/model/tdmt-ff-mac-scheduler.cc ns-3.20/src/lte/model/tdmt-ff-mac-scheduler.cc
--- ns-3.19/src/lte/model/tdmt-ff-mac-scheduler.cc	2014-06-17 10:34:00.331637488 -0700
+++ ns-3.20/src/lte/model/tdmt-ff-mac-scheduler.cc	2014-06-17 10:33:13.700997451 -0700
@@ -35,7 +35,7 @@
 
 namespace ns3 {
 
-int TdMtType0AllocationRbg[4] = {
+static const int TdMtType0AllocationRbg[4] = {
   10,       // RGB size 1
   26,       // RGB size 2
   63,       // RGB size 3
@@ -43,8 +43,7 @@
 };  // see table 7.1.6.1-1 of 36.213
 
 
-NS_OBJECT_ENSURE_REGISTERED (TdMtFfMacScheduler)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (TdMtFfMacScheduler);
 
 
 
@@ -1445,6 +1444,7 @@
     {
       if (ret.m_dciList.size () > 0)
         {
+          m_allocationMaps.insert (std::pair <uint16_t, std::vector <uint16_t> > (params.m_sfnSf, rbgAllocationMap));
           m_schedSapUser->SchedUlConfigInd (ret);
         }
         
@@ -1511,7 +1511,7 @@
       uldci.m_rbLen = rbPerFlow;
       bool allocated = false;
       NS_LOG_INFO (this << " RB Allocated " << rbAllocated << " rbPerFlow " << rbPerFlow << " flows " << nflows);
-      while ((!allocated)&&((rbAllocated + rbPerFlow - 1) < m_cschedCellConfig.m_ulBandwidth) && (rbPerFlow != 0))
+      while ((!allocated)&&((rbAllocated + rbPerFlow - m_cschedCellConfig.m_ulBandwidth) < 1) && (rbPerFlow != 0))
         {
           // check availability
           bool free = true;
diff -Naur ns-3.19/src/lte/model/tdtbfq-ff-mac-scheduler.cc ns-3.20/src/lte/model/tdtbfq-ff-mac-scheduler.cc
--- ns-3.19/src/lte/model/tdtbfq-ff-mac-scheduler.cc	2014-06-17 10:34:00.333637472 -0700
+++ ns-3.20/src/lte/model/tdtbfq-ff-mac-scheduler.cc	2014-06-17 10:33:13.702997436 -0700
@@ -36,7 +36,7 @@
 
 namespace ns3 {
 
-int TdTbfqType0AllocationRbg[4] = {
+static const int TdTbfqType0AllocationRbg[4] = {
   10,       // RGB size 1
   26,       // RGB size 2
   63,       // RGB size 3
@@ -44,8 +44,7 @@
 };  // see table 7.1.6.1-1 of 36.213
 
 
-NS_OBJECT_ENSURE_REGISTERED (TdTbfqFfMacScheduler)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (TdTbfqFfMacScheduler);
 
 
 
@@ -1542,6 +1541,7 @@
     {
       if (ret.m_dciList.size () > 0)
         {
+          m_allocationMaps.insert (std::pair <uint16_t, std::vector <uint16_t> > (params.m_sfnSf, rbgAllocationMap));
           m_schedSapUser->SchedUlConfigInd (ret);
         }
         
@@ -1609,7 +1609,7 @@
       uldci.m_rbLen = rbPerFlow;
       bool allocated = false;
       NS_LOG_INFO (this << " RB Allocated " << rbAllocated << " rbPerFlow " << rbPerFlow << " flows " << nflows);
-      while ((!allocated)&&((rbAllocated + rbPerFlow - 1) < m_cschedCellConfig.m_ulBandwidth) && (rbPerFlow != 0))
+      while ((!allocated)&&((rbAllocated + rbPerFlow - m_cschedCellConfig.m_ulBandwidth) < 1) && (rbPerFlow != 0))
         {
           // check availability
           bool free = true;
diff -Naur ns-3.19/src/lte/model/trace-fading-loss-model.cc ns-3.20/src/lte/model/trace-fading-loss-model.cc
--- ns-3.19/src/lte/model/trace-fading-loss-model.cc	2014-06-17 10:34:00.334637464 -0700
+++ ns-3.20/src/lte/model/trace-fading-loss-model.cc	2014-06-17 10:33:13.703997428 -0700
@@ -34,8 +34,7 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (TraceFadingLossModel)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (TraceFadingLossModel);
   
 
 
diff -Naur ns-3.19/src/lte/model/tta-ff-mac-scheduler.cc ns-3.20/src/lte/model/tta-ff-mac-scheduler.cc
--- ns-3.19/src/lte/model/tta-ff-mac-scheduler.cc	2014-06-17 10:34:00.335637457 -0700
+++ ns-3.20/src/lte/model/tta-ff-mac-scheduler.cc	2014-06-17 10:33:13.705997412 -0700
@@ -35,7 +35,7 @@
 
 namespace ns3 {
 
-int TtaType0AllocationRbg[4] = {
+static const int TtaType0AllocationRbg[4] = {
   10,       // RGB size 1
   26,       // RGB size 2
   63,       // RGB size 3
@@ -43,8 +43,7 @@
 };  // see table 7.1.6.1-1 of 36.213
 
 
-NS_OBJECT_ENSURE_REGISTERED (TtaFfMacScheduler)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (TtaFfMacScheduler);
 
 
 
@@ -1524,6 +1523,7 @@
     {
       if (ret.m_dciList.size () > 0)
         {
+          m_allocationMaps.insert (std::pair <uint16_t, std::vector <uint16_t> > (params.m_sfnSf, rbgAllocationMap));
           m_schedSapUser->SchedUlConfigInd (ret);
         }
         
@@ -1590,7 +1590,7 @@
       uldci.m_rbLen = rbPerFlow;
       bool allocated = false;
       NS_LOG_INFO (this << " RB Allocated " << rbAllocated << " rbPerFlow " << rbPerFlow << " flows " << nflows);
-      while ((!allocated)&&((rbAllocated + rbPerFlow - 1) < m_cschedCellConfig.m_ulBandwidth) && (rbPerFlow != 0))
+      while ((!allocated)&&((rbAllocated + rbPerFlow - m_cschedCellConfig.m_ulBandwidth) < 1) && (rbPerFlow != 0))
         {
           // check availability
           bool free = true;
diff -Naur ns-3.19/src/lte/test/epc-test-gtpu.cc ns-3.20/src/lte/test/epc-test-gtpu.cc
--- ns-3.19/src/lte/test/epc-test-gtpu.cc	2014-06-17 10:34:00.336637449 -0700
+++ ns-3.20/src/lte/test/epc-test-gtpu.cc	2014-06-17 10:33:13.706997405 -0700
@@ -28,7 +28,7 @@
 
 NS_LOG_COMPONENT_DEFINE ("EpcGtpuTest");
 
-namespace ns3 {
+using namespace ns3;
 
 
 /**
@@ -85,5 +85,3 @@
   NS_TEST_ASSERT_MSG_EQ (h1, h2, "Wrong value!");
 }
 
-} // namespace ns3
-
diff -Naur ns-3.19/src/lte/test/epc-test-gtpu.h ns-3.20/src/lte/test/epc-test-gtpu.h
--- ns-3.19/src/lte/test/epc-test-gtpu.h	2014-06-17 10:34:00.337637441 -0700
+++ ns-3.20/src/lte/test/epc-test-gtpu.h	2014-06-17 10:33:13.706997405 -0700
@@ -26,7 +26,7 @@
 #include "ns3/test.h"
 
 
-namespace ns3 {
+using namespace ns3;
 
 
 
@@ -50,7 +50,4 @@
 };
 
 
-} // namespace ns3
-
-
 #endif /* EPC_TEST_GTPU_H */
diff -Naur ns-3.19/src/lte/test/epc-test-s1u-downlink.cc ns-3.20/src/lte/test/epc-test-s1u-downlink.cc
--- ns-3.19/src/lte/test/epc-test-s1u-downlink.cc	2014-06-17 10:34:00.338637433 -0700
+++ ns-3.20/src/lte/test/epc-test-s1u-downlink.cc	2014-06-17 10:33:13.707997397 -0700
@@ -41,11 +41,10 @@
 #include "ns3/eps-bearer.h"
 #include "lte-test-entities.h"
 
-namespace ns3 {
+using namespace ns3;
 
 
-NS_LOG_COMPONENT_DEFINE ("EpcTestS1uDownlink")
-  ;
+NS_LOG_COMPONENT_DEFINE ("EpcTestS1uDownlink");
 
 
 
@@ -311,8 +310,3 @@
   v8.push_back (e8);
   AddTestCase (new EpcS1uDlTestCase ("1 eNB, 100 pkts 15000 bytes each", v8), TestCase::QUICK);
 }
-
-
-
-}  // namespace ns3
-
diff -Naur ns-3.19/src/lte/test/epc-test-s1u-uplink.cc ns-3.20/src/lte/test/epc-test-s1u-uplink.cc
--- ns-3.19/src/lte/test/epc-test-s1u-uplink.cc	2014-06-17 10:34:00.339637426 -0700
+++ ns-3.20/src/lte/test/epc-test-s1u-uplink.cc	2014-06-17 10:33:13.708997389 -0700
@@ -48,12 +48,11 @@
 #include "ns3/config.h"
 #include "lte-test-entities.h"
 
-namespace ns3 {
+using namespace ns3;
 
 
 
-NS_LOG_COMPONENT_DEFINE ("EpcTestS1uUplink")
-  ;
+NS_LOG_COMPONENT_DEFINE ("EpcTestS1uUplink");
 
 /*
  * A Udp client. Sends UDP packet carrying sequence number and time
@@ -538,8 +537,3 @@
   AddTestCase (new EpcS1uUlTestCase ("1 eNB, 100 pkts 15000 bytes each", v8), TestCase::QUICK);
   
 }
-
-
-
-}  // namespace ns3
-
diff -Naur ns-3.19/src/lte/test/lte-simple-helper.cc ns-3.20/src/lte/test/lte-simple-helper.cc
--- ns-3.19/src/lte/test/lte-simple-helper.cc	2014-06-17 10:34:00.339637426 -0700
+++ ns-3.20/src/lte/test/lte-simple-helper.cc	2014-06-17 10:33:13.709997382 -0700
@@ -35,8 +35,7 @@
 namespace ns3 {
 
 
-NS_OBJECT_ENSURE_REGISTERED (LteSimpleHelper)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (LteSimpleHelper);
 
 LteSimpleHelper::LteSimpleHelper (void)
 {
diff -Naur ns-3.19/src/lte/test/lte-simple-net-device.cc ns-3.20/src/lte/test/lte-simple-net-device.cc
--- ns-3.19/src/lte/test/lte-simple-net-device.cc	2014-06-17 10:34:00.340637418 -0700
+++ ns-3.20/src/lte/test/lte-simple-net-device.cc	2014-06-17 10:33:13.710997374 -0700
@@ -28,8 +28,7 @@
 namespace ns3 {
 
 
-NS_OBJECT_ENSURE_REGISTERED (LteSimpleNetDevice)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (LteSimpleNetDevice);
 
 
 TypeId LteSimpleNetDevice::GetTypeId (void)
diff -Naur ns-3.19/src/lte/test/lte-test-cell-selection.cc ns-3.20/src/lte/test/lte-test-cell-selection.cc
--- ns-3.19/src/lte/test/lte-test-cell-selection.cc	2014-06-17 10:34:00.341637411 -0700
+++ ns-3.20/src/lte/test/lte-test-cell-selection.cc	2014-06-17 10:33:13.711997366 -0700
@@ -45,7 +45,7 @@
 
 NS_LOG_COMPONENT_DEFINE ("LteCellSelectionTest");
 
-namespace ns3 {
+using namespace ns3;
 
 
 /*
@@ -425,7 +425,3 @@
 {
   NS_LOG_FUNCTION (this << imsi << cellId << rnti);
 }
-
-
-
-} // end of namespace ns3
diff -Naur ns-3.19/src/lte/test/lte-test-cell-selection.h ns-3.20/src/lte/test/lte-test-cell-selection.h
--- ns-3.19/src/lte/test/lte-test-cell-selection.h	2014-06-17 10:34:00.342637403 -0700
+++ ns-3.20/src/lte/test/lte-test-cell-selection.h	2014-06-17 10:33:13.711997366 -0700
@@ -29,8 +29,15 @@
 #include <ns3/lte-ue-rrc.h>
 #include <vector>
 
+
 namespace ns3 {
 
+class LteUeNetDevice;
+
+}
+
+using namespace ns3;
+
 
 /**
  * \brief Test suite for executing the cell selection test cases in without-EPC
@@ -46,7 +53,6 @@
 
 
 
-class LteUeNetDevice;
 
 /**
  * \brief Testing the initial cell selection procedure by UE at IDLE state in
@@ -122,9 +128,4 @@
 
 }; // end of class LteCellSelectionTestCase
 
-
-
-} // end of namespace ns3
-
-
 #endif /* LTE_TEST_CELL_SELECTION_H */
diff -Naur ns-3.19/src/lte/test/lte-test-cqa-ff-mac-scheduler.cc ns-3.20/src/lte/test/lte-test-cqa-ff-mac-scheduler.cc
--- ns-3.19/src/lte/test/lte-test-cqa-ff-mac-scheduler.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.20/src/lte/test/lte-test-cqa-ff-mac-scheduler.cc	2014-06-17 10:33:13.712997359 -0700
@@ -0,0 +1,691 @@
+/* -*-  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:  Biljana Bojovic<bbojovic@cttc.es>
+ *          Dizhi Zhou <dizhi.zhou@gmail.com>
+ * 			Marco Miozzo <marco.miozzo@cttc.es>,
+ *          Nicola Baldo <nbaldo@cttc.es>
+ *
+ */
+
+#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-cqa-ff-mac-scheduler.h"
+
+NS_LOG_COMPONENT_DEFINE ("LenaTestCqaFfMacScheduler");
+
+using namespace ns3;
+
+LenaTestCqaFfMacSchedulerSuite::LenaTestCqaFfMacSchedulerSuite ()
+  : TestSuite ("lte-cqa-ff-mac-scheduler", SYSTEM)
+{
+  NS_LOG_INFO ("creating LenaTestCqaFfMacSchedulerSuite");
+
+  bool errorModel = false;
+
+  // General config
+  // Traffic: UDP traffic with fixed rate
+  // Token generation rate = traffic rate
+  // RLC header length = 2 bytes, PDCP header = 2 bytes
+  // Simulation time = 1.0 sec
+  // Throughput in this file is calculated in RLC layer
+
+  //Test Case 1: homogeneous flow test in CQA (same distance)
+  // DOWNLINK -> DISTANCE 0 -> MCS 28 -> Itbs 26 (from table 7.1.7.2.1-1 of 36.2    13)
+  // Traffic info
+  //   UDP traffic: payload size = 200 bytes, interval = 1 ms
+  //   UDP rate in scheduler: (payload + RLC header + PDCP header + IP header + UDP header) * 1000 byte/sec -> 232000 byte/rate 
+  // Totol bandwidth: 24 PRB at Itbs 26 -> 2196 -> 2196000 byte/sec
+  // 1 user -> 232000 * 1 = 232000 < 2196000 -> throughput = 232000 byte/sec
+  // 3 user -> 232000 * 3 = 696000 < 2196000 -> througphut = 232000 byte/sec
+  // 6 user -> 232000 * 6 = 139200 < 2196000 -> throughput = 232000 byte/sec
+  // 12 user -> 232000 * 12 = 2784000 > 2196000 -> throughput = 2196000 / 12 = 183000 byte/sec
+  // UPLINK -> DISTANCE 0 -> MCS 28 -> Itbs 26 (from table 7.1.7.2.1-1 of 36.2    13)
+  // 1 user -> 25 PRB at Itbs 26 -> 2292 -> 2292000 > 232000 -> throughput = 232000 bytes/sec
+  // 3 users -> 8 PRB at Itbs 26 -> 749 -> 749000 > 232000 -> throughput = 232000 bytes/sec 
+  // 6 users -> 4 PRB at Itbs 26 -> 373 -> 373000 > 232000 -> throughput = 232000 bytes/sec
+  // 12 users -> 2 PRB at Itbs 26 -> 185 -> 185000 < 232000 -> throughput = 185000 bytes/sec
+  AddTestCase (new LenaCqaFfMacSchedulerTestCase1 (1,0,232000,232000,200,1,errorModel), TestCase::EXTENSIVE);
+  AddTestCase (new LenaCqaFfMacSchedulerTestCase1 (3,0,232000,232000,200,1,errorModel), TestCase::EXTENSIVE);
+  AddTestCase (new LenaCqaFfMacSchedulerTestCase1 (6,0,232000,232000,200,1,errorModel), TestCase::EXTENSIVE);
+
+  //AddTestCase (new LenaCqaFfMacSchedulerTestCase1 (12,0,183000,185000,200,1,errorModel));// simulation time = 1.5, otherwise, ul test will fail
+
+  // DOWNLINK - DISTANCE 4800 -> MCS 22 -> Itbs 20 (from table 7.1.7.2.1-1 of 36.213)
+  // Traffic info
+  //   UDP traffic: payload size = 200 bytes, interval = 1 ms
+  //   UDP rate in scheduler: (payload + RLC header + PDCP header + IP header + UDP header) * 1000 byte/sec -> 232000 byte/rate 
+  // Totol bandwidth: 24 PRB at Itbs 20 -> 1383 -> 1383000 byte/sec
+  // 1 user -> 903000 * 1 = 232000 < 1383000 -> throughput = 232000 byte/sec
+  // 3 user -> 232000 * 3 = 696000 < 1383000 -> througphut = 232000 byte/sec
+  // 6 user -> 232000 * 6 = 139200 > 1383000 -> throughput = 1383000 / 6 = 230500 byte/sec
+  // 12 user -> 232000 * 12 = 2784000 > 1383000 -> throughput =  1383000 / 12 = 115250 byte/sec
+  // UPLINK - DISTANCE 4800 -> MCS 14 -> Itbs 13 (from table 7.1.7.2.1-1 of 36.213)
+  // 1 user -> 25 PRB at Itbs 13 -> 807 -> 807000 > 232000 -> throughput = 232000 bytes/sec
+  // 3 users -> 8 PRB at Itbs 13 -> 253 -> 253000 > 232000 -> throughput = 232000 bytes/sec
+  // 6 users -> 4 PRB at Itbs 13 -> 125 -> 125000 < 232000 -> throughput = 125000 bytes/sec
+  // after the patch enforcing min 3 PRBs per UE:
+  // 12 users -> 3 PRB at Itbs 13 -> 93  bytes * 8/12 UE/TTI  -> 62000 < 232000 -> throughput = 62000  bytes/sec
+  AddTestCase (new LenaCqaFfMacSchedulerTestCase1 (1,4800,232000,232000,200,1,errorModel), TestCase::EXTENSIVE);
+  AddTestCase (new LenaCqaFfMacSchedulerTestCase1 (3,4800,232000,232000,200,1,errorModel), TestCase::EXTENSIVE);
+  AddTestCase (new LenaCqaFfMacSchedulerTestCase1 (6,4800,230500,125000,200,1,errorModel), TestCase::EXTENSIVE);
+  //AddTestCase (new LenaCqaFfMacSchedulerTestCase1 (12,4800,115250,62000,200,1,errorModel)); // simulation time = 1.5, otherwise, ul test will fail
+
+  // DOWNLINK - DISTANCE 6000 -> MCS 20 -> Itbs 18 (from table 7.1.7.2.1-1 of 36.213)
+  // Traffic info
+  //   UDP traffic: payload size = 200 bytes, interval = 1 ms
+  //   UDP rate in scheduler: (payload + RLC header + PDCP header + IP header + UDP header) * 1000 byte/sec -> 232000 byte/rate 
+  // Totol bandwidth: 24 PRB at Itbs 18 -> 1191 -> 1191000 byte/sec
+  // 1 user -> 903000 * 1 = 232000 < 1191000 -> throughput = 232000 byte/sec
+  // 3 user -> 232000 * 3 = 696000 < 1191000 -> througphut = 232000 byte/sec
+  // 6 user -> 232000 * 6 = 1392000 > 1191000 -> throughput = 1191000 / 6 = 198500 byte/sec
+  // 12 user -> 232000 * 12 = 2784000 > 1191000 -> throughput =  1191000 / 12 = 99250 byte/sec
+
+  // UPLINK - DISTANCE 6000 -> MCS 12 -> Itbs 11 (from table 7.1.7.2.1-1 of 36.213)
+  // 1 user -> 25 PRB at Itbs 11 -> 621 -> 621000 > 232000 -> throughput = 232000 bytes/sec
+  // 3 users -> 8 PRB at Itbs 11 -> 201 -> 201000 < 232000 -> throughput = 201000  bytes/sec
+  // 6 users -> 4 PRB at Itbs 11 -> 97 -> 97000 < 232000 -> throughput = 97000 bytes/sec
+  // after the patch enforcing min 3 PRBs per UE:
+  // 12 users -> 3 PRB at Itbs 11 -> 73 bytes * 8/12 UE/TTI -> 48667 < 232000 -> throughput = 48667 bytes/sec
+  AddTestCase (new LenaCqaFfMacSchedulerTestCase1 (1,6000,232000,232000,200,1,errorModel), TestCase::EXTENSIVE);
+  AddTestCase (new LenaCqaFfMacSchedulerTestCase1 (3,6000,232000,201000,200,1,errorModel), TestCase::EXTENSIVE);
+  AddTestCase (new LenaCqaFfMacSchedulerTestCase1 (6,6000,198500,97000,200,1,errorModel), TestCase::EXTENSIVE);
+  //AddTestCase (new LenaCqaFfMacSchedulerTestCase1 (12,6000,99250,48667,200,1, errorModel)); // simulation time = 1.5, otherwise, ul test will fail
+
+  // DOWNLINK - DISTANCE 10000 -> MCS 14 -> Itbs 13 (from table 7.1.7.2.1-1 of 36.213)
+  // Traffic info
+  //   UDP traffic: payload size = 200 bytes, interval = 1 ms
+  //   UDP rate in scheduler: (payload + RLC header + PDCP header + IP header + UDP header) * 1000 byte/sec -> 232000 byte/rate 
+  // Totol bandwidth: 24 PRB at Itbs 13 -> 775 -> 775000 byte/sec
+  // 1 user -> 903000 * 1 = 232000 < 775000 -> throughput = 232000 byte/sec
+  // 3 user -> 232000 * 3 = 696000 > 775000 -> througphut = 232000 byte/sec
+  // 6 user -> 232000 * 6 = 139200 > 775000 -> throughput = 775000 / 6 = 129166 byte/sec
+  // 12 user -> 232000 * 12 = 2784000 > 775000 -> throughput =  775000 / 12 = 64583 byte/sec
+  // UPLINK - DISTANCE 10000 -> MCS 8 -> Itbs 8 (from table 7.1.7.2.1-1 of 36.213)
+  // 1 user -> 24 PRB at Itbs 8 -> 437 -> 437000 > 232000 -> throughput = 232000 bytes/sec
+  // 3 users -> 8 PRB at Itbs 8 -> 137 -> 137000 < 232000 -> throughput = 137000 bytes/sec
+  // 6 users -> 4 PRB at Itbs 8 -> 67 -> 67000 < 232000 -> throughput = 67000 bytes/sec
+  // after the patch enforcing min 3 PRBs per UE:
+  // 12 users -> 3 PRB at Itbs 8 -> 49 bytes * 8/12 UE/TTI -> 32667 < 232000 -> throughput = 32667  bytes/sec
+  AddTestCase (new LenaCqaFfMacSchedulerTestCase1 (1,10000,232000,232000,200,1,errorModel), TestCase::EXTENSIVE);
+  AddTestCase (new LenaCqaFfMacSchedulerTestCase1 (3,10000,232000,137000,200,1,errorModel), TestCase::EXTENSIVE);
+  AddTestCase (new LenaCqaFfMacSchedulerTestCase1 (6,10000,129166,67000,200,1,errorModel), TestCase::EXTENSIVE);
+  //AddTestCase (new LenaCqaFfMacSchedulerTestCase1 (12,10000,64583,32667,200,1,errorModel));// simulation time = 1.5, otherwise, ul test will fail
+
+  // Test Case 2: homogeneous flow test in CQA (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 = 4 / ( 1/2196000 + 1/1191000 + 1/1383000 + 1/775000 ) = 1209046 byte/s
+  // 132000 * 4 = 528000 < 1209046 -> estimated throughput in downlink = 132000 byte/sec
+  std::vector<uint16_t> dist1;
+  dist1.push_back (0);       // User 0 distance --> MCS 28
+  dist1.push_back (4800);    // User 1 distance --> MCS 22
+  dist1.push_back (6000);    // User 2 distance --> MCS 20
+  dist1.push_back (10000);   // User 3 distance --> MCS 14
+  std::vector<uint16_t> packetSize1;
+  packetSize1.push_back (100);
+  packetSize1.push_back (100);
+  packetSize1.push_back (100);
+  packetSize1.push_back (100);
+  std::vector<uint32_t> estThrCqaDl1;
+  estThrCqaDl1.push_back (132000); // User 0 estimated TTI throughput from CQA
+  estThrCqaDl1.push_back (132000); // User 1 estimated TTI throughput from CQA
+  estThrCqaDl1.push_back (132000); // User 2 estimated TTI throughput from CQA
+  estThrCqaDl1.push_back (132000); // User 3 estimated TTI throughput from CQA
+  AddTestCase (new LenaCqaFfMacSchedulerTestCase2 (dist1,estThrCqaDl1,packetSize1,1,errorModel), TestCase::QUICK);
+
+  // Traffic2 info
+  //   UDP traffic: payload size = 200 bytes, interval = 1 ms
+  //   UDP rate in scheduler: (payload + RLC header + PDCP header + IP header + UDP header) * 1000 byte/sec -> 232000 byte/rate 
+  // Maximum throughput = 4 / ( 1/2196000 + 1/1191000 + 1/1383000 + 1/775000 ) = 1209046 byte/s
+  // 232000 * 4 = 928000 < 1209046 -> estimated throughput in downlink = 928000 / 4 = 230000 byte/sec
+  std::vector<uint16_t> dist2;
+  dist2.push_back (0);       // User 0 distance --> MCS 28
+  dist2.push_back (4800);    // User 1 distance --> MCS 22
+  dist2.push_back (6000);    // User 2 distance --> MCS 20
+  dist2.push_back (10000);   // User 3 distance --> MCS 14
+  std::vector<uint16_t> packetSize2;
+  packetSize2.push_back (200);
+  packetSize2.push_back (200);
+  packetSize2.push_back (200);
+  packetSize2.push_back (200);
+  std::vector<uint32_t> estThrCqaDl2;
+  estThrCqaDl2.push_back (230000); // User 0 estimated TTI throughput from CQA
+  estThrCqaDl2.push_back (230000); // User 1 estimated TTI throughput from CQA
+  estThrCqaDl2.push_back (230000); // User 2 estimated TTI throughput from CQA
+  estThrCqaDl2.push_back (230000); // User 3 estimated TTI throughput from CQA
+  AddTestCase (new LenaCqaFfMacSchedulerTestCase2 (dist2,estThrCqaDl2,packetSize2,1,errorModel), TestCase::QUICK);
+
+  // Test Case 3: heterogeneous flow test in CQA
+  //   UDP traffic: payload size = [100,200,300] bytes, interval = 1 ms
+  //   UDP rate in scheduler: (payload + RLC header + PDCP header + IP header + UDP header) * 1000 byte/sec -> [132000, 232000, 332000] byte/rate
+  // Maximum throughput = 3 / ( 1/2196000 + 1/1191000 + 1/1383000) = 1486569 byte/s
+  // 132000 + 232000 + 332000 = 696000 < 1486569 -> estimated throughput in downlink = [132000, 232000, 332000] byte/sec
+  std::vector<uint16_t> dist3;
+  dist3.push_back (0);    // User 0 distance --> MCS 28
+  dist3.push_back (4800);    // User 1 distance --> MCS 22
+  dist3.push_back (6000);    // User 2 distance --> MCS 20
+  std::vector<uint16_t> packetSize3;
+  packetSize3.push_back (100);
+  packetSize3.push_back (200);
+  packetSize3.push_back (300);
+  std::vector<uint32_t> estThrCqaDl3;
+  estThrCqaDl3.push_back (132000); // User 0 estimated TTI throughput from CQA
+  estThrCqaDl3.push_back (232000); // User 1 estimated TTI throughput from CQA
+  estThrCqaDl3.push_back (332000); // User 2 estimated TTI throughput from CQA
+  AddTestCase (new LenaCqaFfMacSchedulerTestCase2 (dist3,estThrCqaDl3,packetSize3,1,errorModel), TestCase::QUICK);
+
+}
+
+static LenaTestCqaFfMacSchedulerSuite lenaTestCqaFfMacSchedulerSuite;
+
+// --------------- T E S T - C A S E   # 1 ------------------------------
+
+
+std::string 
+LenaCqaFfMacSchedulerTestCase1::BuildNameString (uint16_t nUser, uint16_t dist)
+{
+  std::ostringstream oss;
+  oss << nUser << " UEs, distance " << dist << " m";
+  return oss.str ();
+}
+
+
+LenaCqaFfMacSchedulerTestCase1::LenaCqaFfMacSchedulerTestCase1 (uint16_t nUser, uint16_t dist, double thrRefDl, double thrRefUl, uint16_t packetSize, uint16_t interval,bool errorModelEnabled)
+  : TestCase (BuildNameString (nUser, dist)),
+    m_nUser (nUser),
+    m_dist (dist),
+    m_packetSize (packetSize),
+    m_interval (interval),
+    m_thrRefDl (thrRefDl),
+    m_thrRefUl (thrRefUl),
+    m_errorModelEnabled (errorModelEnabled)
+{
+}
+
+LenaCqaFfMacSchedulerTestCase1::~LenaCqaFfMacSchedulerTestCase1 ()
+{
+}
+
+void
+LenaCqaFfMacSchedulerTestCase1::DoRun (void)
+{
+  NS_LOG_FUNCTION (this << GetName ());
+
+  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);
+
+  //LogComponentEnable ("CqaFfMacScheduler", LOG_DEBUG);
+
+  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);
+
+  //Config::SetDefault ("ns3::LteAmc::AmcModel", EnumValue (LteAmc::PiroEW2010));
+  //Config::SetDefault ("ns3::LteAmc::Ber", DoubleValue (0.00005));
+  //Config::SetDefault ("ns3::LteSpectrumPhy::CtrlErrorModelEnabled", BooleanValue (false));
+  //Config::SetDefault ("ns3::LteSpectrumPhy::DataErrorModelEnabled", BooleanValue (false));
+
+  //Config::SetDefault ("ns3::LteEnbRrc::EpsBearerToRlcMapping", EnumValue (LteHelper::RLC_UM_ALWAYS));
+
+//   LogComponentDisableAll (LOG_LEVEL_ALL);
+  //LogComponentEnable ("LenaTestCqaFfMacCheduler", LOG_LEVEL_ALL);
+   
+  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::CqaFfMacScheduler");
+  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, 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 + 32) * (1000 / m_interval) * 8;  // bit/s, considering IP, UDP, RLC, PDCP header size
+      qos.gbrUl = (m_packetSize + 32) * (1000 / m_interval) * 8;
+      qos.mbrDl = 0;
+      qos.mbrUl = 0;
+      
+      enum EpsBearer::Qci q = EpsBearer::GBR_CONV_VOICE;
+      EpsBearer bearer (q, qos);
+      lteHelper->ActivateDedicatedEpsBearer (ueDevice, bearer, EpcTft::Default ());  
+    }
+
+  // Install downlind 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));
+
+      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));
+
+      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 = 0.5;
+  double tolerance = 0.1;
+  Simulator::Stop (Seconds (statsStartTime + statsDuration - 0.0001));
+
+  lteHelper->EnableRlcTraces ();
+  lteHelper->EnableMacTraces ();
+  Ptr<RadioBearerStatsCalculator> rlcStats = lteHelper->GetRlcStats ();
+  rlcStats->SetAttribute ("StartTime", TimeValue (Seconds (statsStartTime)));
+  rlcStats->SetAttribute ("EpochDuration", TimeValue (Seconds (statsDuration)));
+
+  Simulator::Run ();
+
+  /**
+   * Check that the downlink assignation is done in a "token bank fair queue" manner
+   */
+
+  NS_LOG_INFO ("DL - Test with " << m_nUser << " user(s) at distance " << m_dist);
+  std::vector <uint64_t> dlDataRxed;
+  for (int i = 0; i < m_nUser; i++)
+    {
+      // get the imsi
+      uint64_t imsi = ueDevs.Get (i)->GetObject<LteUeNetDevice> ()->GetImsi ();
+      // get the lcId
+      uint8_t lcId = 4;
+      uint64_t data = rlcStats->GetDlRxData (imsi, lcId);
+      dlDataRxed.push_back (data);
+      NS_LOG_INFO ("\tUser " << i << " imsi " << imsi << " bytes rxed " << (double)dlDataRxed.at (i) << "  thr " << (double)dlDataRxed.at (i) / statsDuration << " ref " << m_thrRefDl);
+    }
+
+  for (int i = 0; i < m_nUser; i++)
+    {
+      NS_TEST_ASSERT_MSG_EQ_TOL ((double)dlDataRxed.at (i) / statsDuration, m_thrRefDl, m_thrRefDl * tolerance, " Unfair Throughput!");
+    }
+
+  /**
+  * Check that the uplink assignation is done in a "round robin" manner
+  */
+
+  NS_LOG_INFO ("UL - Test with " << m_nUser << " user(s) at distance " << m_dist);
+  std::vector <uint64_t> ulDataRxed;
+  for (int i = 0; i < m_nUser; i++)
+    {
+      // get the imsi
+      uint64_t imsi = ueDevs.Get (i)->GetObject<LteUeNetDevice> ()->GetImsi ();
+      // get the lcId
+      uint8_t lcId = 4;
+      ulDataRxed.push_back (rlcStats->GetUlRxData (imsi, lcId));
+      NS_LOG_INFO ("\tUser " << i << " imsi " << imsi << " bytes rxed " << (double)ulDataRxed.at (i) << "  thr " << (double)ulDataRxed.at (i) / statsDuration << " ref " << m_thrRefUl);
+    }
+
+  for (int i = 0; i < m_nUser; i++)
+    {
+      NS_TEST_ASSERT_MSG_EQ_TOL ((double)ulDataRxed.at (i) / statsDuration, m_thrRefUl, m_thrRefUl * tolerance, " Unfair Throughput!");
+    }
+  Simulator::Destroy ();
+
+}
+
+
+
+// --------------- T E S T - C A S E   # 2 ------------------------------
+
+
+std::string 
+LenaCqaFfMacSchedulerTestCase2::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 ();
+}
+
+
+LenaCqaFfMacSchedulerTestCase2::LenaCqaFfMacSchedulerTestCase2 (std::vector<uint16_t> dist, std::vector<uint32_t> estThrCqaDl, std::vector<uint16_t> packetSize, uint16_t interval,bool errorModelEnabled)
+  : TestCase (BuildNameString (dist.size (), dist)),
+    m_nUser (dist.size ()),
+    m_dist (dist),
+    m_packetSize (packetSize),
+    m_interval (interval),
+    m_estThrCqaDl (estThrCqaDl),
+    m_errorModelEnabled (errorModelEnabled)
+{
+}
+
+LenaCqaFfMacSchedulerTestCase2::~LenaCqaFfMacSchedulerTestCase2 ()
+{
+}
+
+void
+LenaCqaFfMacSchedulerTestCase2::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);
+
+
+//   LogComponentDisableAll (LOG_LEVEL_ALL);
+  //LogComponentEnable ("LenaTestCqaFfMacCheduler", LOG_LEVEL_ALL);
+   
+  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::CqaFfMacScheduler");
+  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);
+      lteHelper->ActivateDedicatedEpsBearer (ueDevice, bearer, EpcTft::Default ());  
+    }
+
+
+  // Install downlind 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 = 0.5;
+  double tolerance = 0.1;
+  Simulator::Stop (Seconds (statsStartTime + statsDuration - 0.0001));
+
+  lteHelper->EnableRlcTraces ();
+  Ptr<RadioBearerStatsCalculator> rlcStats = lteHelper->GetRlcStats ();
+  rlcStats->SetAttribute ("StartTime", TimeValue (Seconds (statsStartTime)));
+  rlcStats->SetAttribute ("EpochDuration", TimeValue (Seconds (statsDuration)));
+
+
+  Simulator::Run ();
+
+  /**
+   * Check that the downlink assignation is done in a "token bank fair queue" manner
+   */
+
+  NS_LOG_INFO ("DL - Test with " << m_nUser << " user(s)");
+  std::vector <uint64_t> dlDataRxed;
+  for (int i = 0; i < m_nUser; i++)
+    {
+      // get the imsi
+      uint64_t imsi = ueDevs.Get (i)->GetObject<LteUeNetDevice> ()->GetImsi ();
+      // get the lcId
+      uint8_t lcId = 4;
+      dlDataRxed.push_back (rlcStats->GetDlRxData (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_estThrCqaDl.at (i));
+    }
+
+  for (int i = 0; i < m_nUser; i++)
+    {
+      NS_TEST_ASSERT_MSG_EQ_TOL ((double)dlDataRxed.at (i) / statsDuration, m_estThrCqaDl.at (i), m_estThrCqaDl.at (i) * tolerance, " Unfair Throughput!");
+    }
+
+  Simulator::Destroy ();
+
+}
diff -Naur ns-3.19/src/lte/test/lte-test-cqa-ff-mac-scheduler.h ns-3.20/src/lte/test/lte-test-cqa-ff-mac-scheduler.h
--- ns-3.19/src/lte/test/lte-test-cqa-ff-mac-scheduler.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.20/src/lte/test/lte-test-cqa-ff-mac-scheduler.h	2014-06-17 10:33:13.712997359 -0700
@@ -0,0 +1,83 @@
+/* -*-  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:  Biljana Bojovic<bbojovic@cttc.es>
+ *          Dizhi Zhou <dizhi.zhou@gmail.com>
+ * 			Marco Miozzo <marco.miozzo@cttc.es>,
+ *          Nicola Baldo <nbaldo@cttc.es>
+ *
+ */
+
+#ifndef LENA_TEST_CQA_FF_MAC_SCHEDULER_H
+#define LENA_TEST_CQA_FF_MAC_SCHEDULER_H
+
+#include "ns3/simulator.h"
+#include "ns3/test.h"
+
+
+using namespace ns3;
+
+/**
+* This is a system test program. The test is based on a scenario with single eNB and several UEs.
+* The goal of the test is validating if the obtained throughput performance is consistent with the definition of CQA scheduler.
+*
+*/
+
+class LenaCqaFfMacSchedulerTestCase1 : public TestCase
+{
+public:
+  LenaCqaFfMacSchedulerTestCase1 (uint16_t nUser, uint16_t dist, double thrRefDl, double thrRefUl, uint16_t packetSize, uint16_t interval, bool  errorModelEnabled);
+  virtual ~LenaCqaFfMacSchedulerTestCase1 ();
+
+private:
+  static std::string BuildNameString (uint16_t nUser, uint16_t dist);
+  virtual void DoRun (void);
+  uint16_t m_nUser;
+  uint16_t m_dist;
+  uint16_t m_packetSize;  // byte
+  uint16_t m_interval;    // ms
+  double m_thrRefDl;
+  double m_thrRefUl;
+  bool m_errorModelEnabled;
+};
+
+
+class LenaCqaFfMacSchedulerTestCase2 : public TestCase
+{
+public:
+  LenaCqaFfMacSchedulerTestCase2 (std::vector<uint16_t> dist, std::vector<uint32_t> estThrCqaDl, std::vector<uint16_t> packetSize, uint16_t interval, bool  errorModelEnabled);
+  virtual ~LenaCqaFfMacSchedulerTestCase2 ();
+
+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_estThrCqaDl;
+  bool m_errorModelEnabled;
+};
+
+
+class LenaTestCqaFfMacSchedulerSuite : public TestSuite
+{
+public:
+  LenaTestCqaFfMacSchedulerSuite ();
+};
+
+#endif /* LENA_TEST_CQA_FF_MAC_SCHEDULER_H */
diff -Naur ns-3.19/src/lte/test/lte-test-downlink-sinr.cc ns-3.20/src/lte/test/lte-test-downlink-sinr.cc
--- ns-3.19/src/lte/test/lte-test-downlink-sinr.cc	2014-06-17 10:34:00.342637403 -0700
+++ ns-3.20/src/lte/test/lte-test-downlink-sinr.cc	2014-06-17 10:33:13.713997351 -0700
@@ -37,8 +37,7 @@
 
 NS_LOG_COMPONENT_DEFINE ("LteDownlinkSinrTest");
 
-namespace ns3 {
-
+using namespace ns3;
 
 /**
  * Test 1.1 SINR calculation in downlink
@@ -446,6 +445,3 @@
   dlPhy->Dispose ();
   Simulator::Destroy ();
 }
-
-
-} // namespace
diff -Naur ns-3.19/src/lte/test/lte-test-downlink-sinr.h ns-3.20/src/lte/test/lte-test-downlink-sinr.h
--- ns-3.19/src/lte/test/lte-test-downlink-sinr.h	2014-06-17 10:34:00.343637395 -0700
+++ ns-3.20/src/lte/test/lte-test-downlink-sinr.h	2014-06-17 10:33:13.713997351 -0700
@@ -27,9 +27,7 @@
 
 #include "ns3/test.h"
 
-
-namespace ns3 {
-
+using namespace ns3;
 
 /**
  * Test 1.1 SINR calculation in downlink
@@ -70,6 +68,4 @@
     Ptr<SpectrumValue> m_sinr;
 };
 
-} // namespace ns3
-
 #endif /* LTE_TEST_DOWNLINK_SINR_H */
diff -Naur ns-3.19/src/lte/test/lte-test-earfcn.cc ns-3.20/src/lte/test/lte-test-earfcn.cc
--- ns-3.19/src/lte/test/lte-test-earfcn.cc	2014-06-17 10:34:00.343637395 -0700
+++ ns-3.20/src/lte/test/lte-test-earfcn.cc	2014-06-17 10:33:13.713997351 -0700
@@ -27,7 +27,7 @@
 
 NS_LOG_COMPONENT_DEFINE ("LteTestEarfcn");
 
-namespace ns3 {
+using namespace ns3;
 
 class LteEarfcnTestCase : public TestCase
 {
@@ -150,6 +150,3 @@
   AddTestCase (new LteEarfcnTestCase ("EARFCN=19400", 19400, 1730e6), TestCase::QUICK);
   AddTestCase (new LteEarfcnTestCase ("EARFCN=50000", 50000, 0.0), TestCase::QUICK);
 }
-
-
-} // namespace ns3
diff -Naur ns-3.19/src/lte/test/lte-test-entities.cc ns-3.20/src/lte/test/lte-test-entities.cc
--- ns-3.19/src/lte/test/lte-test-entities.cc	2014-06-17 10:34:00.344637387 -0700
+++ ns-3.20/src/lte/test/lte-test-entities.cc	2014-06-17 10:33:13.714997343 -0700
@@ -186,7 +186,7 @@
 LteTestRrc::Start ()
 {
   NS_LOG_FUNCTION (this);
-  NS_ASSERT_MSG (m_arrivalTime != 0, "Arrival time must be different from 0");
+  NS_ASSERT_MSG (m_arrivalTime != Time (0), "Arrival time must be different from 0");
 
   // Stats
   m_txPdus++;
@@ -608,8 +608,7 @@
 
 
 
-NS_OBJECT_ENSURE_REGISTERED (EpcTestRrc)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (EpcTestRrc);
 
 EpcTestRrc::EpcTestRrc ()
   : m_s1SapProvider (0)
diff -Naur ns-3.19/src/lte/test/lte-test-fading.cc ns-3.20/src/lte/test/lte-test-fading.cc
--- ns-3.19/src/lte/test/lte-test-fading.cc	2014-06-17 10:34:00.345637379 -0700
+++ ns-3.20/src/lte/test/lte-test-fading.cc	2014-06-17 10:33:13.715997336 -0700
@@ -52,7 +52,7 @@
 
 NS_LOG_COMPONENT_DEFINE ("LteFadingTest");
 
-namespace ns3 {
+using namespace ns3;
 
 
 /**
@@ -295,6 +295,3 @@
   (*outPsd1)[1] = (10 * std::log10 (180000*(*outPsd1)[1])) - (10 * std::log10 (180000*(*inPsd1)[1]));
   m_fadingSamples.push_back ((*outPsd1));
 }
-
-} // namespace ns3
-
diff -Naur ns-3.19/src/lte/test/lte-test-fading.h ns-3.20/src/lte/test/lte-test-fading.h
--- ns-3.19/src/lte/test/lte-test-fading.h	2014-06-17 10:34:00.345637379 -0700
+++ ns-3.20/src/lte/test/lte-test-fading.h	2014-06-17 10:33:13.716997328 -0700
@@ -31,7 +31,7 @@
 
 #include <ns3/trace-fading-loss-model.h>
 
-namespace ns3 {
+using namespace ns3;
 
 
 /**
@@ -83,7 +83,4 @@
     uint16_t m_mcsIndex;
 };
 
-} // namespace ns3
-
-
 #endif /*LTE_TEST_FADING_H*/
diff -Naur ns-3.19/src/lte/test/lte-test-fdbet-ff-mac-scheduler.cc ns-3.20/src/lte/test/lte-test-fdbet-ff-mac-scheduler.cc
--- ns-3.19/src/lte/test/lte-test-fdbet-ff-mac-scheduler.cc	2014-06-17 10:34:00.346637372 -0700
+++ ns-3.20/src/lte/test/lte-test-fdbet-ff-mac-scheduler.cc	2014-06-17 10:33:13.716997328 -0700
@@ -53,7 +53,7 @@
 
 NS_LOG_COMPONENT_DEFINE ("LenaTestFdBetFfMacScheduler");
 
-namespace ns3 {
+using namespace ns3;
 
 LenaTestFdBetFfMacSchedulerSuite::LenaTestFdBetFfMacSchedulerSuite ()
   : TestSuite ("lte-fdbet-ff-mac-scheduler", SYSTEM)
@@ -489,10 +489,3 @@
   Simulator::Destroy ();
 
 }
-
-
-} // namespace ns3
-
-
-
-
diff -Naur ns-3.19/src/lte/test/lte-test-fdbet-ff-mac-scheduler.h ns-3.20/src/lte/test/lte-test-fdbet-ff-mac-scheduler.h
--- ns-3.19/src/lte/test/lte-test-fdbet-ff-mac-scheduler.h	2014-06-17 10:34:00.346637372 -0700
+++ ns-3.20/src/lte/test/lte-test-fdbet-ff-mac-scheduler.h	2014-06-17 10:33:13.717997320 -0700
@@ -27,7 +27,7 @@
 #include "ns3/test.h"
 
 
-namespace ns3 {
+using namespace ns3;
 
 
 /**
@@ -81,10 +81,4 @@
   LenaTestFdBetFfMacSchedulerSuite ();
 };
 
-
-
-
-} // namespace ns3
-
-
 #endif /* LENA_TEST_FDBET_FF_MAC_SCHEDULER_H */
diff -Naur ns-3.19/src/lte/test/lte-test-fdtbfq-ff-mac-scheduler.cc ns-3.20/src/lte/test/lte-test-fdtbfq-ff-mac-scheduler.cc
--- ns-3.19/src/lte/test/lte-test-fdtbfq-ff-mac-scheduler.cc	2014-06-17 10:34:00.348637356 -0700
+++ ns-3.20/src/lte/test/lte-test-fdtbfq-ff-mac-scheduler.cc	2014-06-17 10:33:13.719997305 -0700
@@ -60,7 +60,7 @@
 
 NS_LOG_COMPONENT_DEFINE ("LenaTestFdTbfqFfMacScheduler");
 
-namespace ns3 {
+using namespace ns3;
 
 LenaTestFdTbfqFfMacSchedulerSuite::LenaTestFdTbfqFfMacSchedulerSuite ()
   : TestSuite ("lte-fdtbfq-ff-mac-scheduler", SYSTEM)
@@ -693,10 +693,3 @@
   Simulator::Destroy ();
 
 }
-
-
-} // namespace ns3
-
-
-
-
diff -Naur ns-3.19/src/lte/test/lte-test-fdtbfq-ff-mac-scheduler.h ns-3.20/src/lte/test/lte-test-fdtbfq-ff-mac-scheduler.h
--- ns-3.19/src/lte/test/lte-test-fdtbfq-ff-mac-scheduler.h	2014-06-17 10:34:00.348637356 -0700
+++ ns-3.20/src/lte/test/lte-test-fdtbfq-ff-mac-scheduler.h	2014-06-17 10:33:13.719997305 -0700
@@ -27,7 +27,7 @@
 #include "ns3/test.h"
 
 
-namespace ns3 {
+using namespace ns3;
 
 
 /**
@@ -84,8 +84,4 @@
 
 
 
-
-} // namespace ns3
-
-
 #endif /* LENA_TEST_FDTBFQ_FF_MAC_SCHEDULER_H */
diff -Naur ns-3.19/src/lte/test/lte-test-harq.cc ns-3.20/src/lte/test/lte-test-harq.cc
--- ns-3.19/src/lte/test/lte-test-harq.cc	2014-06-17 10:34:00.349637349 -0700
+++ ns-3.20/src/lte/test/lte-test-harq.cc	2014-06-17 10:33:13.719997305 -0700
@@ -54,7 +54,7 @@
 
 NS_LOG_COMPONENT_DEFINE ("LenaTestHarq");
 
-namespace ns3 {
+using namespace ns3;
 
 
 LenaTestHarqSuite::LenaTestHarqSuite ()
@@ -260,6 +260,3 @@
 
   Simulator::Destroy ();
 }
-
-
-} // namespace
diff -Naur ns-3.19/src/lte/test/lte-test-harq.h ns-3.20/src/lte/test/lte-test-harq.h
--- ns-3.19/src/lte/test/lte-test-harq.h	2014-06-17 10:34:00.349637349 -0700
+++ ns-3.20/src/lte/test/lte-test-harq.h	2014-06-17 10:33:13.720997297 -0700
@@ -25,7 +25,7 @@
 #include "ns3/test.h"
 
 
-namespace ns3 {
+using namespace ns3;
 
 
 /**
@@ -61,10 +61,4 @@
   LenaTestHarqSuite ();
 };
 
-
-
-
-} // namespace ns3
-
-
 #endif /* LENA_TEST_HARQ_H */
diff -Naur ns-3.19/src/lte/test/lte-test-interference.cc ns-3.20/src/lte/test/lte-test-interference.cc
--- ns-3.19/src/lte/test/lte-test-interference.cc	2014-06-17 10:34:00.350637341 -0700
+++ ns-3.20/src/lte/test/lte-test-interference.cc	2014-06-17 10:33:13.721997289 -0700
@@ -41,7 +41,7 @@
 
 NS_LOG_COMPONENT_DEFINE ("LteInterferenceTest");
 
-namespace ns3 {
+using namespace ns3;
 
 
 void
@@ -248,6 +248,3 @@
       NS_TEST_ASSERT_MSG_EQ ((uint32_t)mcs, (uint32_t)m_ulMcs, "Wrong UL MCS");
     }
 }
-
-} // namespace ns3
-
diff -Naur ns-3.19/src/lte/test/lte-test-interference.h ns-3.20/src/lte/test/lte-test-interference.h
--- ns-3.19/src/lte/test/lte-test-interference.h	2014-06-17 10:34:00.350637341 -0700
+++ ns-3.20/src/lte/test/lte-test-interference.h	2014-06-17 10:33:13.721997289 -0700
@@ -25,7 +25,7 @@
 #include "ns3/test.h"
 
 
-namespace ns3 {
+using namespace ns3;
 
 
 /**
@@ -62,8 +62,4 @@
   uint16_t m_ulMcs;
 };
 
-
-} // namespace ns3
-
-
 #endif /* LTE_TEST_INTERFERENCE_H */
diff -Naur ns-3.19/src/lte/test/lte-test-link-adaptation.cc ns-3.20/src/lte/test/lte-test-link-adaptation.cc
--- ns-3.19/src/lte/test/lte-test-link-adaptation.cc	2014-06-17 10:34:00.351637333 -0700
+++ ns-3.20/src/lte/test/lte-test-link-adaptation.cc	2014-06-17 10:33:13.722997281 -0700
@@ -37,7 +37,7 @@
 
 NS_LOG_COMPONENT_DEFINE ("LteLinkAdaptationTest");
 
-namespace ns3 {
+using namespace ns3;
 
 
 /**
@@ -244,6 +244,3 @@
       NS_TEST_ASSERT_MSG_EQ ((uint16_t)mcsTb1, m_mcsIndex, "Wrong MCS index");
     }
 }
-
-} // namespace ns3
-
diff -Naur ns-3.19/src/lte/test/lte-test-link-adaptation.h ns-3.20/src/lte/test/lte-test-link-adaptation.h
--- ns-3.19/src/lte/test/lte-test-link-adaptation.h	2014-06-17 10:34:00.352637325 -0700
+++ ns-3.20/src/lte/test/lte-test-link-adaptation.h	2014-06-17 10:33:13.722997281 -0700
@@ -24,7 +24,7 @@
 #include "ns3/test.h"
 
 
-namespace ns3 {
+using namespace ns3;
 
 
 /**
@@ -55,8 +55,4 @@
   uint16_t m_mcsIndex;
 };
 
-
-} // namespace ns3
-
-
 #endif /* LTE_TEST_LINK_ADAPTATION_H */
diff -Naur ns-3.19/src/lte/test/lte-test-mimo.cc ns-3.20/src/lte/test/lte-test-mimo.cc
--- ns-3.19/src/lte/test/lte-test-mimo.cc	2014-06-17 10:34:00.352637325 -0700
+++ ns-3.20/src/lte/test/lte-test-mimo.cc	2014-06-17 10:33:13.723997274 -0700
@@ -58,7 +58,7 @@
 
 NS_LOG_COMPONENT_DEFINE ("LteTestMimo");
 
-namespace ns3 {
+using namespace ns3;
 
 
 LenaTestMimoSuite::LenaTestMimoSuite ()
@@ -261,8 +261,3 @@
   m_dlDataRxed.push_back (rlcStats->GetDlRxData (imsi, lcId));
   NS_LOG_INFO (Simulator::Now () << "\t get bytes " << m_dlDataRxed.at (m_dlDataRxed.size () - 1));
 }
-
-
-
-} // namespace ns3
-
diff -Naur ns-3.19/src/lte/test/lte-test-mimo.h ns-3.20/src/lte/test/lte-test-mimo.h
--- ns-3.19/src/lte/test/lte-test-mimo.h	2014-06-17 10:34:00.353637318 -0700
+++ ns-3.20/src/lte/test/lte-test-mimo.h	2014-06-17 10:33:13.723997274 -0700
@@ -25,7 +25,7 @@
 #include "ns3/test.h"
 
 
-namespace ns3 {
+using namespace ns3;
 
 
 /**
@@ -60,10 +60,4 @@
   LenaTestMimoSuite ();
 };
 
-
-
-
-} // namespace ns3
-
-
 #endif /* LENA_TEST_MIMO_H */
diff -Naur ns-3.19/src/lte/test/lte-test-pathloss-model.cc ns-3.20/src/lte/test/lte-test-pathloss-model.cc
--- ns-3.19/src/lte/test/lte-test-pathloss-model.cc	2014-06-17 10:34:00.354637310 -0700
+++ ns-3.20/src/lte/test/lte-test-pathloss-model.cc	2014-06-17 10:33:13.724997266 -0700
@@ -52,7 +52,7 @@
 
 NS_LOG_COMPONENT_DEFINE ("LtePathlossModelTest");
 
-namespace ns3 {
+using namespace ns3;
 
 
 /**
@@ -306,7 +306,3 @@
     NS_TEST_ASSERT_MSG_EQ ((uint16_t)mcsTb1, m_mcsIndex, "Wrong MCS index");
   }
 }
-                                         
-
-} // namespace ns3
-
diff -Naur ns-3.19/src/lte/test/lte-test-pathloss-model.h ns-3.20/src/lte/test/lte-test-pathloss-model.h
--- ns-3.19/src/lte/test/lte-test-pathloss-model.h	2014-06-17 10:34:00.354637310 -0700
+++ ns-3.20/src/lte/test/lte-test-pathloss-model.h	2014-06-17 10:33:13.725997258 -0700
@@ -28,7 +28,7 @@
 #include <ns3/buildings-propagation-loss-model.h>
 
 
-namespace ns3 {
+using namespace ns3;
 
 
 /**
@@ -59,9 +59,5 @@
     uint16_t m_mcsIndex;
 };
 
-
-} // namespace ns3
-
-
 #endif /* LTE_TEST_PATHLOSS_MODEL_H */
 
diff -Naur ns-3.19/src/lte/test/lte-test-pf-ff-mac-scheduler.cc ns-3.20/src/lte/test/lte-test-pf-ff-mac-scheduler.cc
--- ns-3.19/src/lte/test/lte-test-pf-ff-mac-scheduler.cc	2014-06-17 10:34:00.356637295 -0700
+++ ns-3.20/src/lte/test/lte-test-pf-ff-mac-scheduler.cc	2014-06-17 10:33:13.726997250 -0700
@@ -52,7 +52,7 @@
 
 NS_LOG_COMPONENT_DEFINE ("LenaTestPfFfMacScheduler");
 
-namespace ns3 {
+using namespace ns3;
 
 LenaTestPfFfMacSchedulerSuite::LenaTestPfFfMacSchedulerSuite ()
   : TestSuite ("lte-pf-ff-mac-scheduler", SYSTEM)
@@ -503,10 +503,3 @@
   Simulator::Destroy ();
 
 }
-
-
-} // namespace ns3
-
-
-
-
diff -Naur ns-3.19/src/lte/test/lte-test-pf-ff-mac-scheduler.h ns-3.20/src/lte/test/lte-test-pf-ff-mac-scheduler.h
--- ns-3.19/src/lte/test/lte-test-pf-ff-mac-scheduler.h	2014-06-17 10:34:00.356637295 -0700
+++ ns-3.20/src/lte/test/lte-test-pf-ff-mac-scheduler.h	2014-06-17 10:33:13.727997243 -0700
@@ -26,7 +26,7 @@
 #include "ns3/test.h"
 
 
-namespace ns3 {
+using namespace ns3;
 
 
 /**
@@ -80,10 +80,4 @@
   LenaTestPfFfMacSchedulerSuite ();
 };
 
-
-
-
-} // namespace ns3
-
-
 #endif /* LENA_TEST_PF_FF_MAC_SCHEDULER_H */
diff -Naur ns-3.19/src/lte/test/lte-test-phy-error-model.cc ns-3.20/src/lte/test/lte-test-phy-error-model.cc
--- ns-3.19/src/lte/test/lte-test-phy-error-model.cc	2014-06-17 10:34:00.358637279 -0700
+++ ns-3.20/src/lte/test/lte-test-phy-error-model.cc	2014-06-17 10:33:13.728997235 -0700
@@ -55,7 +55,7 @@
 
 NS_LOG_COMPONENT_DEFINE ("LteTestPhyErrorModel");
 
-namespace ns3 {
+using namespace ns3;
 
 
 LenaTestPhyErrorModelSuite::LenaTestPhyErrorModelSuite ()
@@ -433,6 +433,3 @@
   
   Simulator::Destroy ();
 }
-
-
-} // namespace
diff -Naur ns-3.19/src/lte/test/lte-test-phy-error-model.h ns-3.20/src/lte/test/lte-test-phy-error-model.h
--- ns-3.19/src/lte/test/lte-test-phy-error-model.h	2014-06-17 10:34:00.358637279 -0700
+++ ns-3.20/src/lte/test/lte-test-phy-error-model.h	2014-06-17 10:33:13.729997227 -0700
@@ -26,7 +26,7 @@
 #include <ns3/nstime.h>
 
 
-namespace ns3 {
+using namespace ns3;
 
 
 /**
@@ -86,10 +86,4 @@
   LenaTestPhyErrorModelSuite ();
 };
 
-
-
-
-} // namespace ns3
-
-
 #endif /* LENA_TEST_PHY_ERROR_MODEL_H */
diff -Naur ns-3.19/src/lte/test/lte-test-pss-ff-mac-scheduler.cc ns-3.20/src/lte/test/lte-test-pss-ff-mac-scheduler.cc
--- ns-3.19/src/lte/test/lte-test-pss-ff-mac-scheduler.cc	2014-06-17 10:34:00.359637271 -0700
+++ ns-3.20/src/lte/test/lte-test-pss-ff-mac-scheduler.cc	2014-06-17 10:33:13.730997219 -0700
@@ -60,7 +60,7 @@
 
 NS_LOG_COMPONENT_DEFINE ("LenaTestPssFfMacScheduler");
 
-namespace ns3 {
+using namespace ns3;
 
 LenaTestPssFfMacSchedulerSuite::LenaTestPssFfMacSchedulerSuite ()
   : TestSuite ("lte-pss-ff-mac-scheduler", SYSTEM)
@@ -687,10 +687,3 @@
   Simulator::Destroy ();
 
 }
-
-
-} // namespace ns3
-
-
-
-
diff -Naur ns-3.19/src/lte/test/lte-test-pss-ff-mac-scheduler.h ns-3.20/src/lte/test/lte-test-pss-ff-mac-scheduler.h
--- ns-3.19/src/lte/test/lte-test-pss-ff-mac-scheduler.h	2014-06-17 10:34:00.359637271 -0700
+++ ns-3.20/src/lte/test/lte-test-pss-ff-mac-scheduler.h	2014-06-17 10:33:13.730997219 -0700
@@ -27,7 +27,7 @@
 #include "ns3/test.h"
 
 
-namespace ns3 {
+using namespace ns3;
 
 
 /**
@@ -82,10 +82,4 @@
   LenaTestPssFfMacSchedulerSuite ();
 };
 
-
-
-
-} // namespace ns3
-
-
 #endif /* LENA_TEST_PSS_FF_MAC_SCHEDULER_H */
diff -Naur ns-3.19/src/lte/test/lte-test-rlc-am-e2e.cc ns-3.20/src/lte/test/lte-test-rlc-am-e2e.cc
--- ns-3.19/src/lte/test/lte-test-rlc-am-e2e.cc	2014-06-17 10:34:00.360637264 -0700
+++ ns-3.20/src/lte/test/lte-test-rlc-am-e2e.cc	2014-06-17 10:33:13.730997219 -0700
@@ -39,7 +39,7 @@
 
 NS_LOG_COMPONENT_DEFINE ("LteRlcAmE2eTest");
 
-namespace ns3 {
+using namespace ns3;
 
 
 /**
@@ -221,6 +221,3 @@
 
   Simulator::Destroy ();
 }
-
-} // namespace ns3
-
diff -Naur ns-3.19/src/lte/test/lte-test-rlc-am-e2e.h ns-3.20/src/lte/test/lte-test-rlc-am-e2e.h
--- ns-3.19/src/lte/test/lte-test-rlc-am-e2e.h	2014-06-17 10:34:00.360637264 -0700
+++ ns-3.20/src/lte/test/lte-test-rlc-am-e2e.h	2014-06-17 10:33:13.731997212 -0700
@@ -24,7 +24,7 @@
 #include "ns3/test.h"
 
 
-namespace ns3 {
+using namespace ns3;
 
 
 /**
@@ -57,8 +57,4 @@
     double   m_losses;
 };
 
-
-} // namespace ns3
-
-
 #endif // LTE_TEST_RLC_AM_E2E_H
diff -Naur ns-3.19/src/lte/test/lte-test-rlc-am-transmitter.cc ns-3.20/src/lte/test/lte-test-rlc-am-transmitter.cc
--- ns-3.19/src/lte/test/lte-test-rlc-am-transmitter.cc	2014-06-17 10:34:00.376637141 -0700
+++ ns-3.20/src/lte/test/lte-test-rlc-am-transmitter.cc	2014-06-17 10:33:13.731997212 -0700
@@ -29,7 +29,7 @@
 
 NS_LOG_COMPONENT_DEFINE ("LteRlcAmTransmitterTest");
 
-namespace ns3 {
+using namespace ns3;
 
 
 /**
@@ -297,6 +297,3 @@
   Simulator::Run ();
   Simulator::Destroy ();
 }
-
-} // namespace ns3
-
diff -Naur ns-3.19/src/lte/test/lte-test-rlc-am-transmitter.h ns-3.20/src/lte/test/lte-test-rlc-am-transmitter.h
--- ns-3.19/src/lte/test/lte-test-rlc-am-transmitter.h	2014-06-17 10:34:00.376637141 -0700
+++ ns-3.20/src/lte/test/lte-test-rlc-am-transmitter.h	2014-06-17 10:33:13.732997204 -0700
@@ -30,6 +30,10 @@
 class LteTestMac;
 class LteTestPdcp;
 
+}
+
+using namespace ns3;
+
 /**
  * TestSuite 4.1.1 RLC AM: Only transmitter
  */
@@ -120,6 +124,4 @@
 
 };
 
-} // namespace ns3
-
 #endif // LTE_TEST_RLC_AM_TRANSMITTER_H
diff -Naur ns-3.19/src/lte/test/lte-test-rlc-um-e2e.cc ns-3.20/src/lte/test/lte-test-rlc-um-e2e.cc
--- ns-3.19/src/lte/test/lte-test-rlc-um-e2e.cc	2014-06-17 10:34:00.376637141 -0700
+++ ns-3.20/src/lte/test/lte-test-rlc-um-e2e.cc	2014-06-17 10:33:13.732997204 -0700
@@ -38,7 +38,7 @@
 
 NS_LOG_COMPONENT_DEFINE ("LteRlcUmE2eTest");
 
-namespace ns3 {
+using namespace ns3;
 
 
 /**
@@ -233,6 +233,3 @@
 
   Simulator::Destroy ();
 }
-
-} // namespace ns3
-
diff -Naur ns-3.19/src/lte/test/lte-test-rlc-um-e2e.h ns-3.20/src/lte/test/lte-test-rlc-um-e2e.h
--- ns-3.19/src/lte/test/lte-test-rlc-um-e2e.h	2014-06-17 10:34:00.376637141 -0700
+++ ns-3.20/src/lte/test/lte-test-rlc-um-e2e.h	2014-06-17 10:33:13.732997204 -0700
@@ -24,7 +24,7 @@
 #include "ns3/test.h"
 
 
-namespace ns3 {
+using namespace ns3;
 
 
 /**
@@ -57,8 +57,4 @@
     double   m_losses;
 };
 
-
-} // namespace ns3
-
-
 #endif // LTE_TEST_RLC_UM_E2E_H
diff -Naur ns-3.19/src/lte/test/lte-test-rlc-um-transmitter.cc ns-3.20/src/lte/test/lte-test-rlc-um-transmitter.cc
--- ns-3.19/src/lte/test/lte-test-rlc-um-transmitter.cc	2014-06-17 10:34:00.377637133 -0700
+++ ns-3.20/src/lte/test/lte-test-rlc-um-transmitter.cc	2014-06-17 10:33:13.733997196 -0700
@@ -29,7 +29,7 @@
 
 NS_LOG_COMPONENT_DEFINE ("LteRlcUmTransmitterTest");
 
-namespace ns3 {
+using namespace ns3;
 
 
 /**
@@ -298,7 +298,3 @@
   Simulator::Run ();
   Simulator::Destroy ();
 }
-
-} // namespace ns3
-
-
diff -Naur ns-3.19/src/lte/test/lte-test-rlc-um-transmitter.h ns-3.20/src/lte/test/lte-test-rlc-um-transmitter.h
--- ns-3.19/src/lte/test/lte-test-rlc-um-transmitter.h	2014-06-17 10:34:00.377637133 -0700
+++ ns-3.20/src/lte/test/lte-test-rlc-um-transmitter.h	2014-06-17 10:33:13.733997196 -0700
@@ -23,13 +23,16 @@
 
 #include "ns3/test.h"
 
-
 namespace ns3 {
 
 class LteTestRrc;
 class LteTestMac;
 class LteTestPdcp;
 
+}
+
+using namespace ns3;
+
 /**
  * TestSuite 4.1.1 RLC UM: Only transmitter
  */
@@ -120,6 +123,4 @@
 
 };
 
-} // namespace ns3
-
 #endif /* LTE_TEST_RLC_UM_TRANSMITTER_H */
diff -Naur ns-3.19/src/lte/test/lte-test-rr-ff-mac-scheduler.cc ns-3.20/src/lte/test/lte-test-rr-ff-mac-scheduler.cc
--- ns-3.19/src/lte/test/lte-test-rr-ff-mac-scheduler.cc	2014-06-17 10:34:00.379637117 -0700
+++ ns-3.20/src/lte/test/lte-test-rr-ff-mac-scheduler.cc	2014-06-17 10:33:13.735997181 -0700
@@ -50,7 +50,7 @@
 
 NS_LOG_COMPONENT_DEFINE ("LenaTestRrFfMacScheduler");
 
-namespace ns3 {
+using namespace ns3;
 
 
 LenaTestRrFfMacSchedulerSuite::LenaTestRrFfMacSchedulerSuite ()
@@ -292,7 +292,3 @@
 
   Simulator::Destroy ();
 }
-
-
-} // namespace ns3
-
diff -Naur ns-3.19/src/lte/test/lte-test-rr-ff-mac-scheduler.h ns-3.20/src/lte/test/lte-test-rr-ff-mac-scheduler.h
--- ns-3.19/src/lte/test/lte-test-rr-ff-mac-scheduler.h	2014-06-17 10:34:00.379637117 -0700
+++ ns-3.20/src/lte/test/lte-test-rr-ff-mac-scheduler.h	2014-06-17 10:33:13.735997181 -0700
@@ -25,7 +25,7 @@
 #include "ns3/test.h"
 
 
-namespace ns3 {
+using namespace ns3;
 
 
 /**
@@ -62,10 +62,4 @@
   LenaTestRrFfMacSchedulerSuite ();
 };
 
-
-
-} // namespace ns3
-
-
-
 #endif /* LENA_TEST_RR_FF_MAC_SCHEDULER_H */
diff -Naur ns-3.19/src/lte/test/lte-test-spectrum-value-helper.cc ns-3.20/src/lte/test/lte-test-spectrum-value-helper.cc
--- ns-3.19/src/lte/test/lte-test-spectrum-value-helper.cc	2014-06-17 10:34:00.382637094 -0700
+++ ns-3.20/src/lte/test/lte-test-spectrum-value-helper.cc	2014-06-17 10:33:13.738997158 -0700
@@ -28,7 +28,7 @@
 
 NS_LOG_COMPONENT_DEFINE ("LteTestSpectrumValueHelper");
 
-namespace ns3 {
+using namespace ns3;
 
 class LteSpectrumModelTestCase : public TestCase
 {
@@ -1652,6 +1652,3 @@
 
 
 }
-
-
-} // namespace ns3
diff -Naur ns-3.19/src/lte/test/lte-test-tdbet-ff-mac-scheduler.cc ns-3.20/src/lte/test/lte-test-tdbet-ff-mac-scheduler.cc
--- ns-3.19/src/lte/test/lte-test-tdbet-ff-mac-scheduler.cc	2014-06-17 10:34:00.382637094 -0700
+++ ns-3.20/src/lte/test/lte-test-tdbet-ff-mac-scheduler.cc	2014-06-17 10:33:13.738997158 -0700
@@ -53,7 +53,7 @@
 
 NS_LOG_COMPONENT_DEFINE ("LenaTestTdBetFfMacScheduler");
 
-namespace ns3 {
+using namespace ns3;
 
 LenaTestTdBetFfMacSchedulerSuite::LenaTestTdBetFfMacSchedulerSuite ()
   : TestSuite ("lte-tdbet-ff-mac-scheduler", SYSTEM)
@@ -491,10 +491,3 @@
   Simulator::Destroy ();
 
 }
-
-
-} // namespace ns3
-
-
-
-
diff -Naur ns-3.19/src/lte/test/lte-test-tdbet-ff-mac-scheduler.h ns-3.20/src/lte/test/lte-test-tdbet-ff-mac-scheduler.h
--- ns-3.19/src/lte/test/lte-test-tdbet-ff-mac-scheduler.h	2014-06-17 10:34:00.383637086 -0700
+++ ns-3.20/src/lte/test/lte-test-tdbet-ff-mac-scheduler.h	2014-06-17 10:33:13.739997150 -0700
@@ -27,7 +27,7 @@
 #include "ns3/test.h"
 
 
-namespace ns3 {
+using namespace ns3;
 
 
 /**
@@ -81,10 +81,4 @@
   LenaTestTdBetFfMacSchedulerSuite ();
 };
 
-
-
-
-} // namespace ns3
-
-
 #endif /* LENA_TEST_TDBET_FF_MAC_SCHEDULER_H */
diff -Naur ns-3.19/src/lte/test/lte-test-tdtbfq-ff-mac-scheduler.cc ns-3.20/src/lte/test/lte-test-tdtbfq-ff-mac-scheduler.cc
--- ns-3.19/src/lte/test/lte-test-tdtbfq-ff-mac-scheduler.cc	2014-06-17 10:34:00.385637071 -0700
+++ ns-3.20/src/lte/test/lte-test-tdtbfq-ff-mac-scheduler.cc	2014-06-17 10:33:13.741997135 -0700
@@ -60,7 +60,7 @@
 
 NS_LOG_COMPONENT_DEFINE ("LenaTestTdTbfqFfMacScheduler");
 
-namespace ns3 {
+using namespace ns3;
 
 LenaTestTdTbfqFfMacSchedulerSuite::LenaTestTdTbfqFfMacSchedulerSuite ()
   : TestSuite ("lte-tdtbfq-ff-mac-scheduler", SYSTEM)
@@ -693,10 +693,3 @@
   Simulator::Destroy ();
 
 }
-
-
-} // namespace ns3
-
-
-
-
diff -Naur ns-3.19/src/lte/test/lte-test-tdtbfq-ff-mac-scheduler.h ns-3.20/src/lte/test/lte-test-tdtbfq-ff-mac-scheduler.h
--- ns-3.19/src/lte/test/lte-test-tdtbfq-ff-mac-scheduler.h	2014-06-17 10:34:00.385637071 -0700
+++ ns-3.20/src/lte/test/lte-test-tdtbfq-ff-mac-scheduler.h	2014-06-17 10:33:13.741997135 -0700
@@ -27,7 +27,7 @@
 #include "ns3/test.h"
 
 
-namespace ns3 {
+using namespace ns3;
 
 
 /**
@@ -82,10 +82,4 @@
   LenaTestTdTbfqFfMacSchedulerSuite ();
 };
 
-
-
-
-} // namespace ns3
-
-
 #endif /* LENA_TEST_TDTBFQ_FF_MAC_SCHEDULER_H */
diff -Naur ns-3.19/src/lte/test/lte-test-ue-measurements.cc ns-3.20/src/lte/test/lte-test-ue-measurements.cc
--- ns-3.19/src/lte/test/lte-test-ue-measurements.cc	2014-06-17 10:34:00.388637048 -0700
+++ ns-3.20/src/lte/test/lte-test-ue-measurements.cc	2014-06-17 10:33:13.744997112 -0700
@@ -56,7 +56,7 @@
 
 NS_LOG_COMPONENT_DEFINE ("LteUeMeasurementsTest");
 
-namespace ns3 {
+using namespace ns3;
 
 
 // ===== LTE-UE-MEASUREMENTS TEST SUITE ==================================== //
@@ -1933,7 +1933,3 @@
     } // end of if (report.measResults.measId == correctMeasId)
 
 } // end of void LteUeMeasurementsHandoverTestCase::RecvMeasurementReportCallback
-
-
-} // namespace ns3
-
diff -Naur ns-3.19/src/lte/test/lte-test-ue-measurements.h ns-3.20/src/lte/test/lte-test-ue-measurements.h
--- ns-3.19/src/lte/test/lte-test-ue-measurements.h	2014-06-17 10:34:00.388637048 -0700
+++ ns-3.20/src/lte/test/lte-test-ue-measurements.h	2014-06-17 10:33:13.744997112 -0700
@@ -34,9 +34,12 @@
 
 namespace ns3 {
 
-
 class MobilityModel;
 
+}
+
+using namespace ns3;
+
 
 // ===== LTE-UE-MEASUREMENTS TEST SUITE ==================================== //
 
@@ -403,9 +406,4 @@
 
 }; // end of class LteUeMeasurementsHandoverTestCase
 
-
-
-} // namespace ns3
-
-
 #endif /* LTE_TEST_UE_MEASUREMENTS_H */
diff -Naur ns-3.19/src/lte/test/lte-test-ue-phy.cc ns-3.20/src/lte/test/lte-test-ue-phy.cc
--- ns-3.19/src/lte/test/lte-test-ue-phy.cc	2014-06-17 10:34:00.389637040 -0700
+++ ns-3.20/src/lte/test/lte-test-ue-phy.cc	2014-06-17 10:33:13.745997104 -0700
@@ -26,8 +26,7 @@
 namespace ns3 {
 
  
-NS_OBJECT_ENSURE_REGISTERED (LteTestUePhy)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (LteTestUePhy);
 
 LteTestUePhy::LteTestUePhy ()
 {
diff -Naur ns-3.19/src/lte/test/lte-test-uplink-sinr.cc ns-3.20/src/lte/test/lte-test-uplink-sinr.cc
--- ns-3.19/src/lte/test/lte-test-uplink-sinr.cc	2014-06-17 10:34:00.390637032 -0700
+++ ns-3.20/src/lte/test/lte-test-uplink-sinr.cc	2014-06-17 10:33:13.746997096 -0700
@@ -37,7 +37,7 @@
 
 NS_LOG_COMPONENT_DEFINE ("LteUplinkSinrTest");
 
-namespace ns3 {
+using namespace ns3;
 
 
 /**
@@ -479,5 +479,3 @@
   Simulator::Destroy ();
   
 }
-
-} //namespace
diff -Naur ns-3.19/src/lte/test/lte-test-uplink-sinr.h ns-3.20/src/lte/test/lte-test-uplink-sinr.h
--- ns-3.19/src/lte/test/lte-test-uplink-sinr.h	2014-06-17 10:34:00.390637032 -0700
+++ ns-3.20/src/lte/test/lte-test-uplink-sinr.h	2014-06-17 10:33:13.746997096 -0700
@@ -28,7 +28,7 @@
 #include "ns3/test.h"
 
 
-namespace ns3 {
+using namespace ns3;
 
 
 /**
@@ -74,6 +74,3 @@
 
 
 #endif /* LTE_TEST_UPLINK_SINR_H */
-
-} // namespace ns3
-
diff -Naur ns-3.19/src/lte/test/test-asn1-encoding.cc ns-3.20/src/lte/test/test-asn1-encoding.cc
--- ns-3.19/src/lte/test/test-asn1-encoding.cc	2014-06-17 10:34:00.397636978 -0700
+++ ns-3.20/src/lte/test/test-asn1-encoding.cc	2014-06-17 10:33:13.753997042 -0700
@@ -32,7 +32,7 @@
 
 NS_LOG_COMPONENT_DEFINE ("Asn1EncodingTest");
 
-namespace ns3 {
+using namespace ns3;
 
 class TestUtils
 {
@@ -1032,5 +1032,3 @@
 
 Asn1EncodingSuite asn1EncodingSuite;
 
-} // namespace ns3
-
diff -Naur ns-3.19/src/lte/test/test-epc-tft-classifier.cc ns-3.20/src/lte/test/test-epc-tft-classifier.cc
--- ns-3.19/src/lte/test/test-epc-tft-classifier.cc	2014-06-17 10:34:00.397636978 -0700
+++ ns-3.20/src/lte/test/test-epc-tft-classifier.cc	2014-06-17 10:33:13.753997042 -0700
@@ -35,7 +35,7 @@
 
 NS_LOG_COMPONENT_DEFINE ("TestEpcTftClassifier");
 
-namespace ns3 {
+using namespace ns3;
 
 class EpcTftClassifierTestCase : public TestCase
 {
@@ -329,6 +329,3 @@
   AddTestCase (new EpcTftClassifierTestCase (c4, EpcTft::DOWNLINK, Ipv4Address ("9.1.1.1"), Ipv4Address ("8.1.1.1"),  5897,       10,     0,    2), TestCase::QUICK);
 
 }
-
-
-} // namespace ns3
diff -Naur ns-3.19/src/lte/test/test-lte-antenna.cc ns-3.20/src/lte/test/test-lte-antenna.cc
--- ns-3.19/src/lte/test/test-lte-antenna.cc	2014-06-17 10:34:00.398636970 -0700
+++ ns-3.20/src/lte/test/test-lte-antenna.cc	2014-06-17 10:33:13.754997034 -0700
@@ -41,7 +41,7 @@
 
 NS_LOG_COMPONENT_DEFINE ("LteAntennaTest");
 
-namespace ns3 {
+using namespace ns3;
 
 
 
@@ -256,7 +256,3 @@
 }
 
 static LteAntennaTestSuite lteAntennaTestSuite;
-
-
-} // namespace ns3
-
diff -Naur ns-3.19/src/lte/test/test-lte-epc-e2e-data.cc ns-3.20/src/lte/test/test-lte-epc-e2e-data.cc
--- ns-3.19/src/lte/test/test-lte-epc-e2e-data.cc	2014-06-17 10:34:00.399636962 -0700
+++ ns-3.20/src/lte/test/test-lte-epc-e2e-data.cc	2014-06-17 10:33:13.755997027 -0700
@@ -44,11 +44,10 @@
 
 
 
-namespace ns3 {
+using namespace ns3;
 
 
-NS_LOG_COMPONENT_DEFINE ("LteEpcE2eData")
-  ;
+NS_LOG_COMPONENT_DEFINE ("LteEpcE2eData");
 
 
 
@@ -452,8 +451,3 @@
 
 
 }
-
-
-
-}  // namespace ns3
-
diff -Naur ns-3.19/src/lte/test/test-lte-handover-delay.cc ns-3.20/src/lte/test/test-lte-handover-delay.cc
--- ns-3.19/src/lte/test/test-lte-handover-delay.cc	2014-06-17 10:34:00.399636962 -0700
+++ ns-3.20/src/lte/test/test-lte-handover-delay.cc	2014-06-17 10:33:13.755997027 -0700
@@ -46,7 +46,7 @@
 
 NS_LOG_COMPONENT_DEFINE("LteHandoverDelayTest");
 
-namespace ns3 {
+using namespace ns3;
 
 
 /*
@@ -290,7 +290,3 @@
       }
   }
 } g_lteHandoverDelayTestSuite;
-
-
-
-} // end of namespace ns3
diff -Naur ns-3.19/src/lte/test/test-lte-handover-target.cc ns-3.20/src/lte/test/test-lte-handover-target.cc
--- ns-3.19/src/lte/test/test-lte-handover-target.cc	2014-06-17 10:34:00.399636962 -0700
+++ ns-3.20/src/lte/test/test-lte-handover-target.cc	2014-06-17 10:33:13.756997019 -0700
@@ -50,7 +50,7 @@
 
 NS_LOG_COMPONENT_DEFINE ("LteHandoverTargetTest");
 
-namespace ns3 {
+using namespace ns3;
 
 
 /**
@@ -429,6 +429,3 @@
 
 
 static LteHandoverTargetTestSuite g_lteHandoverTargetTestSuiteInstance;
-
-
-} // end of namespace ns3
diff -Naur ns-3.19/src/lte/test/test-lte-rrc.cc ns-3.20/src/lte/test/test-lte-rrc.cc
--- ns-3.19/src/lte/test/test-lte-rrc.cc	2014-06-17 10:34:00.400636955 -0700
+++ ns-3.20/src/lte/test/test-lte-rrc.cc	2014-06-17 10:33:13.757997011 -0700
@@ -27,7 +27,7 @@
 
 NS_LOG_COMPONENT_DEFINE ("LteRrcTest");
 
-namespace ns3 {
+using namespace ns3;
 
 class LteRrcConnectionEstablishmentTestCase : public TestCase
 {
@@ -378,7 +378,3 @@
 }
 
 static LteRrcTestSuite g_lteRrcTestSuiteInstance;
-
-
-
-} // namespace ns3
diff -Naur ns-3.19/src/lte/test/test-lte-x2-handover.cc ns-3.20/src/lte/test/test-lte-x2-handover.cc
--- ns-3.19/src/lte/test/test-lte-x2-handover.cc	2014-06-17 10:34:00.402636940 -0700
+++ ns-3.20/src/lte/test/test-lte-x2-handover.cc	2014-06-17 10:33:13.759996996 -0700
@@ -29,7 +29,7 @@
 
 NS_LOG_COMPONENT_DEFINE ("LteX2HandoverTest");
 
-namespace ns3 {
+using namespace ns3;
 
 struct HandoverEvent
 {
@@ -668,7 +668,3 @@
 }
 
 static LteX2HandoverTestSuite g_lteX2HandoverTestSuiteInstance;
-
-
-
-} // namespace ns3
diff -Naur ns-3.19/src/lte/test/test-lte-x2-handover-measures.cc ns-3.20/src/lte/test/test-lte-x2-handover-measures.cc
--- ns-3.19/src/lte/test/test-lte-x2-handover-measures.cc	2014-06-17 10:34:00.401636947 -0700
+++ ns-3.20/src/lte/test/test-lte-x2-handover-measures.cc	2014-06-17 10:33:13.758997004 -0700
@@ -29,7 +29,7 @@
 
 NS_LOG_COMPONENT_DEFINE ("LteX2HandoverMeasuresTest");
 
-namespace ns3 {
+using namespace ns3;
 
 
 struct CheckPointEvent
@@ -709,8 +709,3 @@
 } // end of LteX2HandoverMeasuresTestSuite ()
 
 static LteX2HandoverMeasuresTestSuite g_lteX2HandoverMeasuresTestSuiteInstance;
-
-
-
-} // namespace ns3
-
diff -Naur ns-3.19/src/lte/wscript ns-3.20/src/lte/wscript
--- ns-3.19/src/lte/wscript	2014-06-17 10:34:00.403636932 -0700
+++ ns-3.20/src/lte/wscript	2014-06-17 10:33:13.760996988 -0700
@@ -79,6 +79,7 @@
         'model/fdtbfq-ff-mac-scheduler.cc',
         'model/tdtbfq-ff-mac-scheduler.cc',
         'model/pss-ff-mac-scheduler.cc',
+        'model/cqa-ff-mac-scheduler.cc',
         'model/epc-gtpu-header.cc',
         'model/trace-fading-loss-model.cc',
         'model/epc-enb-application.cc',
@@ -126,6 +127,7 @@
         'test/lte-test-fdtbfq-ff-mac-scheduler.cc',
         'test/lte-test-tdtbfq-ff-mac-scheduler.cc',
         'test/lte-test-pss-ff-mac-scheduler.cc',
+        'test/lte-test-cqa-ff-mac-scheduler.cc',
         'test/lte-test-earfcn.cc',
         'test/lte-test-spectrum-value-helper.cc',
         'test/lte-test-pathloss-model.cc',
@@ -233,6 +235,7 @@
         'model/fdtbfq-ff-mac-scheduler.h',
         'model/tdtbfq-ff-mac-scheduler.h',
         'model/pss-ff-mac-scheduler.h',
+        'model/cqa-ff-mac-scheduler.h',
         'model/trace-fading-loss-model.h',
         'model/epc-gtpu-header.h',
         'model/epc-enb-application.h',
diff -Naur ns-3.19/src/mesh/bindings/modulegen__gcc_ILP32.py ns-3.20/src/mesh/bindings/modulegen__gcc_ILP32.py
--- ns-3.19/src/mesh/bindings/modulegen__gcc_ILP32.py	2014-06-17 10:34:00.412636862 -0700
+++ ns-3.20/src/mesh/bindings/modulegen__gcc_ILP32.py	2014-06-17 10:33:13.769996919 -0700
@@ -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'], 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_PRISM_HEADER', 'DLT_IEEE802_11_RADIO', 'DLT_IEEE802_15_4'], 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]
@@ -148,6 +148,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]
@@ -182,6 +184,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]
@@ -410,24 +414,24 @@
     module.add_class('MeshPointDevice', parent=root_module['ns3::NetDevice'])
     ## 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='vector')
-    module.add_container('ns3::WifiMcsList', 'unsigned char', container_type='vector')
-    module.add_container('std::vector< ns3::Ptr< ns3::NetDevice > >', 'ns3::Ptr< ns3::NetDevice >', container_type='vector')
-    typehandlers.add_type_alias('std::vector< unsigned char, std::allocator< unsigned char > >', 'ns3::WifiMcsList')
-    typehandlers.add_type_alias('std::vector< unsigned char, std::allocator< unsigned char > >*', 'ns3::WifiMcsList*')
-    typehandlers.add_type_alias('std::vector< unsigned char, std::allocator< unsigned char > >&', 'ns3::WifiMcsList&')
-    typehandlers.add_type_alias('uint8_t', 'ns3::WifiInformationElementId')
-    typehandlers.add_type_alias('uint8_t*', 'ns3::WifiInformationElementId*')
-    typehandlers.add_type_alias('uint8_t&', 'ns3::WifiInformationElementId&')
-    typehandlers.add_type_alias('__gnu_cxx::__normal_iterator< ns3::WifiMode const *, std::vector< ns3::WifiMode, std::allocator< ns3::WifiMode > > >', 'ns3::WifiModeListIterator')
-    typehandlers.add_type_alias('__gnu_cxx::__normal_iterator< ns3::WifiMode const *, std::vector< ns3::WifiMode, std::allocator< ns3::WifiMode > > >*', 'ns3::WifiModeListIterator*')
-    typehandlers.add_type_alias('__gnu_cxx::__normal_iterator< ns3::WifiMode const *, std::vector< ns3::WifiMode, std::allocator< ns3::WifiMode > > >&', 'ns3::WifiModeListIterator&')
-    typehandlers.add_type_alias('std::vector< ns3::WifiMode, std::allocator< ns3::WifiMode > >', 'ns3::WifiModeList')
-    typehandlers.add_type_alias('std::vector< ns3::WifiMode, std::allocator< ns3::WifiMode > >*', 'ns3::WifiModeList*')
-    typehandlers.add_type_alias('std::vector< ns3::WifiMode, std::allocator< ns3::WifiMode > >&', 'ns3::WifiModeList&')
-    typehandlers.add_type_alias('__gnu_cxx::__normal_iterator< unsigned char const *, std::vector< unsigned char, std::allocator< unsigned char > > >', 'ns3::WifiMcsListIterator')
-    typehandlers.add_type_alias('__gnu_cxx::__normal_iterator< unsigned char const *, std::vector< unsigned char, std::allocator< unsigned char > > >*', 'ns3::WifiMcsListIterator*')
-    typehandlers.add_type_alias('__gnu_cxx::__normal_iterator< unsigned char const *, std::vector< unsigned char, std::allocator< unsigned char > > >&', 'ns3::WifiMcsListIterator&')
+    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&')
     
     ## Register a nested module for the namespace FatalImpl
     
@@ -468,12 +472,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
     
@@ -560,12 +564,12 @@
     module.add_class('PlinkFrameStartFields', outer_class=root_module['ns3::dot11s::PeerLinkFrameStart'])
     ## 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='vector')
-    module.add_container('std::vector< ns3::dot11s::HwmpProtocol::FailedDestination >', 'ns3::dot11s::HwmpProtocol::FailedDestination', container_type='vector')
-    module.add_container('std::vector< ns3::Ptr< ns3::dot11s::IeBeaconTimingUnit > >', 'ns3::Ptr< ns3::dot11s::IeBeaconTimingUnit >', container_type='vector')
-    module.add_container('std::vector< ns3::Ptr< ns3::dot11s::DestinationAddressUnit > >', 'ns3::Ptr< ns3::dot11s::DestinationAddressUnit >', container_type='vector')
-    module.add_container('std::vector< ns3::Ptr< ns3::dot11s::PeerLink > >', 'ns3::Ptr< ns3::dot11s::PeerLink >', container_type='vector')
-    module.add_container('std::vector< ns3::Mac48Address >', 'ns3::Mac48Address', container_type='vector')
+    module.add_container('std::vector< std::pair< unsigned int, ns3::Mac48Address > >', 'std::pair< unsigned int, ns3::Mac48Address >', container_type=u'vector')
+    module.add_container('std::vector< ns3::dot11s::HwmpProtocol::FailedDestination >', 'ns3::dot11s::HwmpProtocol::FailedDestination', container_type=u'vector')
+    module.add_container('std::vector< ns3::Ptr< ns3::dot11s::IeBeaconTimingUnit > >', 'ns3::Ptr< ns3::dot11s::IeBeaconTimingUnit >', container_type=u'vector')
+    module.add_container('std::vector< ns3::Ptr< ns3::dot11s::DestinationAddressUnit > >', 'ns3::Ptr< ns3::dot11s::DestinationAddressUnit >', container_type=u'vector')
+    module.add_container('std::vector< ns3::Ptr< ns3::dot11s::PeerLink > >', 'ns3::Ptr< ns3::dot11s::PeerLink >', container_type=u'vector')
+    module.add_container('std::vector< ns3::Mac48Address >', 'ns3::Mac48Address', container_type=u'vector')
 
 def register_types_ns3_flame(module):
     root_module = module.get_root()
@@ -635,6 +639,7 @@
     register_Ns3StatusCode_methods(root_module, root_module['ns3::StatusCode'])
     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'])
@@ -1367,6 +1372,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', 
@@ -1379,6 +1388,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', 
@@ -3115,6 +3128,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('<')
@@ -3619,61 +3640,17 @@
 def register_Ns3Int64x64_t_methods(root_module, cls):
     cls.add_binary_comparison_operator('<=')
     cls.add_binary_comparison_operator('!=')
-    cls.add_inplace_numeric_operator('+=', 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 &', '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_inplace_numeric_operator('+=', 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_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_output_stream_operator()
     cls.add_binary_comparison_operator('==')
     cls.add_binary_comparison_operator('>=')
@@ -3681,6 +3658,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]
@@ -3721,6 +3700,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):
@@ -4616,12 +4597,14 @@
 def register_Ns3Time_methods(root_module, cls):
     cls.add_binary_comparison_operator('<=')
     cls.add_binary_comparison_operator('!=')
-    cls.add_inplace_numeric_operator('+=', 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('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_inplace_numeric_operator('+=', 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('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_inplace_numeric_operator('-=', param('ns3::Time const &', '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('>=')
@@ -4647,6 +4630,11 @@
     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', 
@@ -6220,6 +6208,11 @@
                    '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', 
@@ -8738,10 +8731,10 @@
                    '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')])
     return
 
 def register_Ns3RegularWifiMac_methods(root_module, cls):
@@ -9408,6 +9401,10 @@
     cls.add_method('SetWifiRemoteStationManager', 
                    'void', 
                    [param('ns3::Ptr< ns3::WifiRemoteStationManager >', 'remoteManager')])
+    ## dca-txop.h (module 'wifi'): void ns3::DcaTxop::SetTxMiddle(ns3::MacTxMiddle * txMiddle) [member function]
+    cls.add_method('SetTxMiddle', 
+                   'void', 
+                   [param('ns3::MacTxMiddle *', 'txMiddle')])
     ## dca-txop.h (module 'wifi'): void ns3::DcaTxop::SetTxOkCallback(ns3::Callback<void, ns3::WifiMacHeader const&, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> callback) [member function]
     cls.add_method('SetTxOkCallback', 
                    'void', 
diff -Naur ns-3.19/src/mesh/bindings/modulegen__gcc_LP64.py ns-3.20/src/mesh/bindings/modulegen__gcc_LP64.py
--- ns-3.19/src/mesh/bindings/modulegen__gcc_LP64.py	2014-06-17 10:34:00.418636816 -0700
+++ ns-3.20/src/mesh/bindings/modulegen__gcc_LP64.py	2014-06-17 10:33:13.775996872 -0700
@@ -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'], 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_PRISM_HEADER', 'DLT_IEEE802_11_RADIO', 'DLT_IEEE802_15_4'], 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]
@@ -148,6 +148,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]
@@ -182,6 +184,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]
@@ -410,24 +414,24 @@
     module.add_class('MeshPointDevice', parent=root_module['ns3::NetDevice'])
     ## 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='vector')
-    module.add_container('ns3::WifiMcsList', 'unsigned char', container_type='vector')
-    module.add_container('std::vector< ns3::Ptr< ns3::NetDevice > >', 'ns3::Ptr< ns3::NetDevice >', container_type='vector')
-    typehandlers.add_type_alias('std::vector< unsigned char, std::allocator< unsigned char > >', 'ns3::WifiMcsList')
-    typehandlers.add_type_alias('std::vector< unsigned char, std::allocator< unsigned char > >*', 'ns3::WifiMcsList*')
-    typehandlers.add_type_alias('std::vector< unsigned char, std::allocator< unsigned char > >&', 'ns3::WifiMcsList&')
-    typehandlers.add_type_alias('uint8_t', 'ns3::WifiInformationElementId')
-    typehandlers.add_type_alias('uint8_t*', 'ns3::WifiInformationElementId*')
-    typehandlers.add_type_alias('uint8_t&', 'ns3::WifiInformationElementId&')
-    typehandlers.add_type_alias('__gnu_cxx::__normal_iterator< ns3::WifiMode const *, std::vector< ns3::WifiMode, std::allocator< ns3::WifiMode > > >', 'ns3::WifiModeListIterator')
-    typehandlers.add_type_alias('__gnu_cxx::__normal_iterator< ns3::WifiMode const *, std::vector< ns3::WifiMode, std::allocator< ns3::WifiMode > > >*', 'ns3::WifiModeListIterator*')
-    typehandlers.add_type_alias('__gnu_cxx::__normal_iterator< ns3::WifiMode const *, std::vector< ns3::WifiMode, std::allocator< ns3::WifiMode > > >&', 'ns3::WifiModeListIterator&')
-    typehandlers.add_type_alias('std::vector< ns3::WifiMode, std::allocator< ns3::WifiMode > >', 'ns3::WifiModeList')
-    typehandlers.add_type_alias('std::vector< ns3::WifiMode, std::allocator< ns3::WifiMode > >*', 'ns3::WifiModeList*')
-    typehandlers.add_type_alias('std::vector< ns3::WifiMode, std::allocator< ns3::WifiMode > >&', 'ns3::WifiModeList&')
-    typehandlers.add_type_alias('__gnu_cxx::__normal_iterator< unsigned char const *, std::vector< unsigned char, std::allocator< unsigned char > > >', 'ns3::WifiMcsListIterator')
-    typehandlers.add_type_alias('__gnu_cxx::__normal_iterator< unsigned char const *, std::vector< unsigned char, std::allocator< unsigned char > > >*', 'ns3::WifiMcsListIterator*')
-    typehandlers.add_type_alias('__gnu_cxx::__normal_iterator< unsigned char const *, std::vector< unsigned char, std::allocator< unsigned char > > >&', 'ns3::WifiMcsListIterator&')
+    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&')
     
     ## Register a nested module for the namespace FatalImpl
     
@@ -468,12 +472,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
     
@@ -560,12 +564,12 @@
     module.add_class('PlinkFrameStartFields', outer_class=root_module['ns3::dot11s::PeerLinkFrameStart'])
     ## 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='vector')
-    module.add_container('std::vector< ns3::dot11s::HwmpProtocol::FailedDestination >', 'ns3::dot11s::HwmpProtocol::FailedDestination', container_type='vector')
-    module.add_container('std::vector< ns3::Ptr< ns3::dot11s::IeBeaconTimingUnit > >', 'ns3::Ptr< ns3::dot11s::IeBeaconTimingUnit >', container_type='vector')
-    module.add_container('std::vector< ns3::Ptr< ns3::dot11s::DestinationAddressUnit > >', 'ns3::Ptr< ns3::dot11s::DestinationAddressUnit >', container_type='vector')
-    module.add_container('std::vector< ns3::Ptr< ns3::dot11s::PeerLink > >', 'ns3::Ptr< ns3::dot11s::PeerLink >', container_type='vector')
-    module.add_container('std::vector< ns3::Mac48Address >', 'ns3::Mac48Address', container_type='vector')
+    module.add_container('std::vector< std::pair< unsigned int, ns3::Mac48Address > >', 'std::pair< unsigned int, ns3::Mac48Address >', container_type=u'vector')
+    module.add_container('std::vector< ns3::dot11s::HwmpProtocol::FailedDestination >', 'ns3::dot11s::HwmpProtocol::FailedDestination', container_type=u'vector')
+    module.add_container('std::vector< ns3::Ptr< ns3::dot11s::IeBeaconTimingUnit > >', 'ns3::Ptr< ns3::dot11s::IeBeaconTimingUnit >', container_type=u'vector')
+    module.add_container('std::vector< ns3::Ptr< ns3::dot11s::DestinationAddressUnit > >', 'ns3::Ptr< ns3::dot11s::DestinationAddressUnit >', container_type=u'vector')
+    module.add_container('std::vector< ns3::Ptr< ns3::dot11s::PeerLink > >', 'ns3::Ptr< ns3::dot11s::PeerLink >', container_type=u'vector')
+    module.add_container('std::vector< ns3::Mac48Address >', 'ns3::Mac48Address', container_type=u'vector')
 
 def register_types_ns3_flame(module):
     root_module = module.get_root()
@@ -635,6 +639,7 @@
     register_Ns3StatusCode_methods(root_module, root_module['ns3::StatusCode'])
     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'])
@@ -1367,6 +1372,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', 
@@ -1379,6 +1388,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', 
@@ -3115,6 +3128,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('<')
@@ -3619,61 +3640,17 @@
 def register_Ns3Int64x64_t_methods(root_module, cls):
     cls.add_binary_comparison_operator('<=')
     cls.add_binary_comparison_operator('!=')
-    cls.add_inplace_numeric_operator('+=', 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 &', '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_inplace_numeric_operator('+=', 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_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_output_stream_operator()
     cls.add_binary_comparison_operator('==')
     cls.add_binary_comparison_operator('>=')
@@ -3681,6 +3658,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]
@@ -3721,6 +3700,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):
@@ -4616,12 +4597,14 @@
 def register_Ns3Time_methods(root_module, cls):
     cls.add_binary_comparison_operator('<=')
     cls.add_binary_comparison_operator('!=')
-    cls.add_inplace_numeric_operator('+=', 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('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_inplace_numeric_operator('+=', 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('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_inplace_numeric_operator('-=', param('ns3::Time const &', '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('>=')
@@ -4647,6 +4630,11 @@
     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', 
@@ -6220,6 +6208,11 @@
                    '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', 
@@ -8738,10 +8731,10 @@
                    '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')])
     return
 
 def register_Ns3RegularWifiMac_methods(root_module, cls):
@@ -9408,6 +9401,10 @@
     cls.add_method('SetWifiRemoteStationManager', 
                    'void', 
                    [param('ns3::Ptr< ns3::WifiRemoteStationManager >', 'remoteManager')])
+    ## dca-txop.h (module 'wifi'): void ns3::DcaTxop::SetTxMiddle(ns3::MacTxMiddle * txMiddle) [member function]
+    cls.add_method('SetTxMiddle', 
+                   'void', 
+                   [param('ns3::MacTxMiddle *', 'txMiddle')])
     ## dca-txop.h (module 'wifi'): void ns3::DcaTxop::SetTxOkCallback(ns3::Callback<void, ns3::WifiMacHeader const&, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> callback) [member function]
     cls.add_method('SetTxOkCallback', 
                    'void', 
diff -Naur ns-3.19/src/mesh/examples/waf ns-3.20/src/mesh/examples/waf
--- ns-3.19/src/mesh/examples/waf	2014-06-17 10:34:00.421636793 -0700
+++ ns-3.20/src/mesh/examples/waf	1969-12-31 16:00:00.000000000 -0800
@@ -1 +0,0 @@
-exec "`dirname "$0"`"/../../waf "$@"
diff -Naur ns-3.19/src/mesh/helper/dot11s/dot11s-installer.cc ns-3.20/src/mesh/helper/dot11s/dot11s-installer.cc
--- ns-3.19/src/mesh/helper/dot11s/dot11s-installer.cc	2014-06-17 10:34:00.422636785 -0700
+++ ns-3.20/src/mesh/helper/dot11s/dot11s-installer.cc	2014-06-17 10:33:13.779996841 -0700
@@ -25,8 +25,7 @@
 
 namespace ns3 {
 using namespace dot11s;
-NS_OBJECT_ENSURE_REGISTERED (Dot11sStack)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (Dot11sStack);
   
 TypeId
 Dot11sStack::GetTypeId ()
diff -Naur ns-3.19/src/mesh/helper/flame/flame-installer.cc ns-3.20/src/mesh/helper/flame/flame-installer.cc
--- ns-3.19/src/mesh/helper/flame/flame-installer.cc	2014-06-17 10:34:00.423636777 -0700
+++ ns-3.20/src/mesh/helper/flame/flame-installer.cc	2014-06-17 10:33:13.779996841 -0700
@@ -26,8 +26,7 @@
 namespace ns3
 {
 using namespace flame;
-NS_OBJECT_ENSURE_REGISTERED (FlameStack)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (FlameStack);
   
 TypeId
 FlameStack::GetTypeId ()
diff -Naur ns-3.19/src/mesh/model/dot11s/airtime-metric.cc ns-3.20/src/mesh/model/dot11s/airtime-metric.cc
--- ns-3.19/src/mesh/model/dot11s/airtime-metric.cc	2014-06-17 10:34:00.425636762 -0700
+++ ns-3.20/src/mesh/model/dot11s/airtime-metric.cc	2014-06-17 10:33:13.781996826 -0700
@@ -25,8 +25,7 @@
 
 namespace ns3 {
 namespace dot11s {
-NS_OBJECT_ENSURE_REGISTERED (AirtimeLinkMetricCalculator)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (AirtimeLinkMetricCalculator);
   
 TypeId
 AirtimeLinkMetricCalculator::GetTypeId ()
diff -Naur ns-3.19/src/mesh/model/dot11s/hwmp-protocol.cc ns-3.20/src/mesh/model/dot11s/hwmp-protocol.cc
--- ns-3.19/src/mesh/model/dot11s/hwmp-protocol.cc	2014-06-17 10:34:00.428636739 -0700
+++ ns-3.20/src/mesh/model/dot11s/hwmp-protocol.cc	2014-06-17 10:33:13.784996803 -0700
@@ -41,8 +41,7 @@
 namespace ns3 {
 namespace dot11s {
 
-NS_OBJECT_ENSURE_REGISTERED (HwmpProtocol)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (HwmpProtocol);
   
 TypeId
 HwmpProtocol::GetTypeId ()
diff -Naur ns-3.19/src/mesh/model/dot11s/hwmp-rtable.cc ns-3.20/src/mesh/model/dot11s/hwmp-rtable.cc
--- ns-3.19/src/mesh/model/dot11s/hwmp-rtable.cc	2014-06-17 10:34:00.429636731 -0700
+++ ns-3.20/src/mesh/model/dot11s/hwmp-rtable.cc	2014-06-17 10:33:13.785996795 -0700
@@ -31,8 +31,7 @@
 
 NS_LOG_COMPONENT_DEFINE ("HwmpRtable");
 
-NS_OBJECT_ENSURE_REGISTERED (HwmpRtable)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (HwmpRtable);
 
 TypeId
 HwmpRtable::GetTypeId ()
diff -Naur ns-3.19/src/mesh/model/dot11s/hwmp-tag.cc ns-3.20/src/mesh/model/dot11s/hwmp-tag.cc
--- ns-3.19/src/mesh/model/dot11s/hwmp-tag.cc	2014-06-17 10:34:00.430636723 -0700
+++ ns-3.20/src/mesh/model/dot11s/hwmp-tag.cc	2014-06-17 10:33:13.786996787 -0700
@@ -23,8 +23,7 @@
 namespace ns3 {
 namespace dot11s {
 
-NS_OBJECT_ENSURE_REGISTERED (HwmpTag)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (HwmpTag);
   
 //Class HwmpTag:
 HwmpTag::HwmpTag () :
diff -Naur ns-3.19/src/mesh/model/dot11s/ie-dot11s-perr.cc ns-3.20/src/mesh/model/dot11s/ie-dot11s-perr.cc
--- ns-3.19/src/mesh/model/dot11s/ie-dot11s-perr.cc	2014-06-17 10:34:00.434636692 -0700
+++ ns-3.20/src/mesh/model/dot11s/ie-dot11s-perr.cc	2014-06-17 10:33:13.790996757 -0700
@@ -108,7 +108,12 @@
 bool
 IePerr::IsFull () const
 {
-  return (GetInformationFieldSize () + 2 /* ID + LENGTH*/+ 10 /* Size of Mac48Address + uint32_t (one unit)*/> 255);
+  // -fstrict-overflow sensitive, see bug 1868
+  return (GetInformationFieldSize ()
+          > 255
+          -   2 /* ID + LENGTH*/
+          -  10 /* Size of Mac48Address + uint32_t (one unit)*/
+          );
 }
 std::vector<HwmpProtocol::FailedDestination>
 IePerr::GetAddressUnitVector () const
diff -Naur ns-3.19/src/mesh/model/dot11s/ie-dot11s-preq.cc ns-3.20/src/mesh/model/dot11s/ie-dot11s-preq.cc
--- ns-3.19/src/mesh/model/dot11s/ie-dot11s-preq.cc	2014-06-17 10:34:00.436636677 -0700
+++ ns-3.20/src/mesh/model/dot11s/ie-dot11s-preq.cc	2014-06-17 10:33:13.792996741 -0700
@@ -423,7 +423,8 @@
     {
       return false;
     }
-  if ((GetInformationFieldSize () + 11) > 255)
+  // -fstrict-overflow sensitive, see bug 1868
+  if ( GetInformationFieldSize () > 255 - 11 )
     {
       return false;
     }
@@ -432,7 +433,8 @@
 bool
 IePreq::IsFull () const
 {
-  return ((GetInformationFieldSize () + 11) > 255);
+  // -fstrict-overflow sensitive, see bug 1868
+  return ( GetInformationFieldSize () > 255 - 11 );
 }
 std::ostream &
 operator << (std::ostream &os, const IePreq &a)
diff -Naur ns-3.19/src/mesh/model/dot11s/peer-link.cc ns-3.20/src/mesh/model/dot11s/peer-link.cc
--- ns-3.19/src/mesh/model/dot11s/peer-link.cc	2014-06-17 10:34:00.438636662 -0700
+++ ns-3.20/src/mesh/model/dot11s/peer-link.cc	2014-06-17 10:33:13.794996726 -0700
@@ -31,8 +31,7 @@
 namespace ns3 {
 namespace dot11s {
 
-NS_OBJECT_ENSURE_REGISTERED ( PeerLink)
-  ;
+NS_OBJECT_ENSURE_REGISTERED ( PeerLink);
 
 TypeId
 PeerLink::GetTypeId ()
diff -Naur ns-3.19/src/mesh/model/dot11s/peer-link-frame.cc ns-3.20/src/mesh/model/dot11s/peer-link-frame.cc
--- ns-3.19/src/mesh/model/dot11s/peer-link-frame.cc	2014-06-17 10:34:00.437636669 -0700
+++ ns-3.20/src/mesh/model/dot11s/peer-link-frame.cc	2014-06-17 10:33:13.793996733 -0700
@@ -26,8 +26,7 @@
 
 namespace ns3 {
 namespace dot11s {
-NS_OBJECT_ENSURE_REGISTERED (PeerLinkFrameStart)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (PeerLinkFrameStart);
 
 PeerLinkFrameStart::PeerLinkFrameStart () :
   m_subtype (255), m_capability (0), m_aid (0), m_rates (SupportedRates ()), m_meshId (),
diff -Naur ns-3.19/src/mesh/model/dot11s/peer-management-protocol.cc ns-3.20/src/mesh/model/dot11s/peer-management-protocol.cc
--- ns-3.19/src/mesh/model/dot11s/peer-management-protocol.cc	2014-06-17 10:34:00.440636646 -0700
+++ ns-3.20/src/mesh/model/dot11s/peer-management-protocol.cc	2014-06-17 10:33:13.796996710 -0700
@@ -39,8 +39,7 @@
 /***************************************************
  * PeerManager
  ***************************************************/
-NS_OBJECT_ENSURE_REGISTERED (PeerManagementProtocol)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (PeerManagementProtocol);
 
 TypeId
 PeerManagementProtocol::GetTypeId (void)
diff -Naur ns-3.19/src/mesh/model/flame/flame-header.cc ns-3.20/src/mesh/model/flame/flame-header.cc
--- ns-3.19/src/mesh/model/flame/flame-header.cc	2014-06-17 10:34:00.441636638 -0700
+++ ns-3.20/src/mesh/model/flame/flame-header.cc	2014-06-17 10:33:13.797996702 -0700
@@ -26,8 +26,7 @@
 namespace ns3 {
 namespace flame {
 
-NS_OBJECT_ENSURE_REGISTERED (FlameHeader)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (FlameHeader);
 
 FlameHeader::FlameHeader () :
   m_cost (0), m_seqno (0), m_origDst (Mac48Address ()), m_origSrc (Mac48Address ())
diff -Naur ns-3.19/src/mesh/model/flame/flame-protocol.cc ns-3.20/src/mesh/model/flame/flame-protocol.cc
--- ns-3.19/src/mesh/model/flame/flame-protocol.cc	2014-06-17 10:34:00.442636631 -0700
+++ ns-3.20/src/mesh/model/flame/flame-protocol.cc	2014-06-17 10:33:13.798996695 -0700
@@ -38,10 +38,8 @@
 //-----------------------------------------------------------------------------
 // FlameTag
 //-----------------------------------------------------------------------------
-NS_OBJECT_ENSURE_REGISTERED (FlameTag)
-  ;
-NS_OBJECT_ENSURE_REGISTERED (FlameProtocol)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (FlameTag);
+NS_OBJECT_ENSURE_REGISTERED (FlameProtocol);
 
 TypeId
 FlameTag::GetTypeId ()
diff -Naur ns-3.19/src/mesh/model/flame/flame-rtable.cc ns-3.20/src/mesh/model/flame/flame-rtable.cc
--- ns-3.19/src/mesh/model/flame/flame-rtable.cc	2014-06-17 10:34:00.443636623 -0700
+++ ns-3.20/src/mesh/model/flame/flame-rtable.cc	2014-06-17 10:33:13.799996687 -0700
@@ -28,8 +28,7 @@
 
 NS_LOG_COMPONENT_DEFINE ("FlameRtable");
 
-NS_OBJECT_ENSURE_REGISTERED (FlameRtable)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (FlameRtable);
 
 TypeId
 FlameRtable::GetTypeId ()
diff -Naur ns-3.19/src/mesh/model/mesh-l2-routing-protocol.cc ns-3.20/src/mesh/model/mesh-l2-routing-protocol.cc
--- ns-3.19/src/mesh/model/mesh-l2-routing-protocol.cc	2014-06-17 10:34:00.444636615 -0700
+++ ns-3.20/src/mesh/model/mesh-l2-routing-protocol.cc	2014-06-17 10:33:13.801996672 -0700
@@ -27,8 +27,7 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (MeshL2RoutingProtocol)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (MeshL2RoutingProtocol);
 
 TypeId
 MeshL2RoutingProtocol::GetTypeId (void)
diff -Naur ns-3.19/src/mesh/model/mesh-point-device.cc ns-3.20/src/mesh/model/mesh-point-device.cc
--- ns-3.19/src/mesh/model/mesh-point-device.cc	2014-06-17 10:34:00.445636607 -0700
+++ ns-3.20/src/mesh/model/mesh-point-device.cc	2014-06-17 10:33:13.802996664 -0700
@@ -31,8 +31,7 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (MeshPointDevice)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (MeshPointDevice);
 
 TypeId
 MeshPointDevice::GetTypeId ()
diff -Naur ns-3.19/src/mesh/model/mesh-wifi-interface-mac.cc ns-3.20/src/mesh/model/mesh-wifi-interface-mac.cc
--- ns-3.19/src/mesh/model/mesh-wifi-interface-mac.cc	2014-06-17 10:34:00.447636592 -0700
+++ ns-3.20/src/mesh/model/mesh-wifi-interface-mac.cc	2014-06-17 10:33:13.803996656 -0700
@@ -40,8 +40,7 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (MeshWifiInterfaceMac)
-  ;
+NS_OBJECT_ENSURE_REGISTERED (MeshWifiInterfaceMac);
 
 TypeId
 MeshWifiInterfaceMac::GetTypeId ()
diff -Naur ns-3.19/src/mesh/test/dot11s/dot11s-test-suite.cc ns-3.20/src/mesh/test/dot11s/dot11s-test-suite.cc
--- ns-3.19/src/mesh/test/dot11s/dot11s-test-suite.cc	2014-06-17 10:34:00.448636584 -0700
+++ ns-3.20/src/mesh/test/dot11s/dot11s-test-suite.cc	2014-06-17 10:33:13.804996648 -0700
@@ -26,8 +26,8 @@
 #include "ns3/peer-link-frame.h"
 #include "ns3/ie-dot11s-peer-management.h"
 
-namespace ns3 {
-namespace dot11s {
+using namespace ns3;
+using namespace dot11s;
 
 /// Built-in self test for FlameHeader
 struct MeshHeaderTest : public TestCase
@@ -285,5 +285,3 @@
 }
 
 static Dot11sTestSuite g_dot11sTestSuite;
-}
-}
diff -Naur ns-3.19/src/mesh/test/dot11s/hwmp-proactive-regression-test-0-1.pcap ns-3.20/src/mesh/test/dot11s/hwmp-proactive-regression-test-0-1.pcap
--- ns-3.19/src/mesh/test/dot11s/hwmp-proactive-regression-test-0-1.pcap	2014-06-17 10:34:00.448636584 -0700
+++ ns-3.20/src/mesh/test/dot11s/hwmp-proactive-regression-test-0-1.pcap	2014-06-17 10:33:13.805996641 -0700
@@ -1,55 +1,55 @@
-ÔÃ²¡          ÿÿ  i       |>  R   R   Ð€<                   J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          ›?        Ô€               ‹@        Ô€               1A  P   P   Ð€<                 J     Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          ö©  ?   ?   Ð€<                    E           ˆ                      Øª  ?   ?   Ðˆ<                    E           ˆ                       ¬  ?   ?   Ðˆ<                    E           ˆ                      Ÿ­  E   E   Ð€  ÿÿÿÿÿÿ          0   D%            ˆ  –   ÿÿÿÿÿÿ            Ûý  A   A   €€  ÿÿÿÿÿÿ            ký      è    Œ$0H`l = è4mesh        ýý  R   R   Ð€<                   J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          Âþ        Ô€               hÿ  P   P   Ð€<                @ J    Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          xÿ        Ô€               a  R   R   Ð€<                P  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          q        Ô€               ¿  P   P   Ð€<                 J     Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬ 9 7                 Ô€               JO A   A   €€  ÿÿÿÿÿÿ            JO     è    Œ$0H`l ý è4mesh        Ã) ?   ?   Ð€<                `   E           ˆ                      ®+ E   E   Ð€  ÿÿÿÿÿÿ          p   D%            ˆ  ™   ÿÿÿÿÿÿ            Ð+ ?   ?   Ð€<                    E           ˆ                      y,       Ô€               - ?   ?   Ð€<                €   E         ˆ  –                   é- ?   ?   Ðˆ<                €   E         ˆ  –                   u. E   E   Ð€  ÿÿÿÿÿÿ          0   D%            ˆ  /  ÿÿÿÿÿÿ            Ÿ F   F   €€  ÿÿÿÿÿÿ           ‹ž     è    Œ$0H`l
- ßèOè4mesh        jð A   A   €€  ÿÿÿÿÿÿ           jð     è    Œ$0H`l Ÿè4mesh       ãý  F   F   €€  ÿÿÿÿÿÿ            «?     è    Œ$0H`l
- €èðè4mesh       JO A   A   €€  ÿÿÿÿÿÿ            Š‘     è    Œ$0H`l @è4mesh       Ÿ F   F   €€  ÿÿÿÿÿÿ          0 Ëà     è    Œ$0H`l
- !è‘è4mesh       jð A   A   €€  ÿÿÿÿÿÿ          0 ª2     è    Œ$0H`l áè4mesh       ãý  F   F   €€  ÿÿÿÿÿÿ          @ ë�     è    Œ$0H`l
- Âè3è4mesh       JO A   A   €€  ÿÿÿÿÿÿ          @ ÊÓ     è    Œ$0H`l ‚è4mesh       ve ?   ?   Ð€<                �   E           ˆ                     vf E   E   Ð€  ÿÿÿÿÿÿ              D%            ˆ  ™   ÿÿÿÿÿÿ           ˜f ?   ?   Ð€<                @   E           ˆ                     @g       Ô€              êg ?   ?   Ð€<                °   E         ˆ  –                  vh E   E   Ð€  ÿÿÿÿÿÿ          P   D%            ˆ  /  ÿÿÿÿÿÿ           Cå ?   ?   Ð€<                À   E           ˆ                     ç E   E   Ð€  ÿÿÿÿÿÿ          Ð   D%            ˆ  –   ÿÿÿÿÿÿ           >ç ?   ?   Ð€<                `   E           ˆ                     çç       Ô€              uè ?   ?   Ð€<                à   E         ˆ  –                   é E   E   Ð€  ÿÿÿÿÿÿ          p   D%            ˆ  ,  ÿÿÿÿÿÿ           4ê ?   ?   Ðˆ<                à   E         ˆ  –                  Š§ L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿð          ªª           
+ÔÃ²¡          ÿÿ  i       |>  R   R   Ð€<                   J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          ›?        Ô€               ‹@        Ô€               1A  P   P   Ð€<                 J     Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          ö©  ?   ?   Ð€<                    E           ˆ                      Øª  ?   ?   Ðˆ<                    E           ˆ                       ¬  ?   ?   Ðˆ<                    E           ˆ                      Ÿ­  E   E   Ð€  ÿÿÿÿÿÿ          0   D%            ˆ  –   ÿÿÿÿÿÿ            Ûý  A   A   €€  ÿÿÿÿÿÿ          @ ký      è    Œ$0H`l = è4mesh        ýý  R   R   Ð€<                   J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          Âþ        Ô€               hÿ  P   P   Ð€<                P J    Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          xÿ        Ô€               a  R   R   Ð€<                `  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          q        Ô€               ¿  P   P   Ð€<                 J     Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬ 9 7                 Ô€               JO A   A   €€  ÿÿÿÿÿÿ            JO     è    Œ$0H`l ý è4mesh        Ã) ?   ?   Ð€<                p   E           ˆ                      ®+ E   E   Ð€  ÿÿÿÿÿÿ          €   D%            ˆ  ™   ÿÿÿÿÿÿ            Ð+ ?   ?   Ð€<                0   E           ˆ                      y,       Ô€               - ?   ?   Ð€<                �   E         ˆ  –                   é- ?   ?   Ðˆ<                �   E         ˆ  –                   u. E   E   Ð€  ÿÿÿÿÿÿ          @   D%            ˆ  /  ÿÿÿÿÿÿ            Ÿ F   F   €€  ÿÿÿÿÿÿ            ‹ž     è    Œ$0H`l
+ ßèOè4mesh        jð A   A   €€  ÿÿÿÿÿÿ          P jð     è    Œ$0H`l Ÿè4mesh       ãý  F   F   €€  ÿÿÿÿÿÿ          ° «?     è    Œ$0H`l
+ €èðè4mesh       JO A   A   €€  ÿÿÿÿÿÿ          ` Š‘     è    Œ$0H`l @è4mesh       Ÿ F   F   €€  ÿÿÿÿÿÿ          À Ëà     è    Œ$0H`l
+ !è‘è4mesh       jð A   A   €€  ÿÿÿÿÿÿ          p ª2     è    Œ$0H`l áè4mesh       ãý  F   F   €€  ÿÿÿÿÿÿ          Ð ë�     è    Œ$0H`l
+ Âè3è4mesh       JO A   A   €€  ÿÿÿÿÿÿ          € ÊÓ     è    Œ$0H`l ‚è4mesh       ve ?   ?   Ð€<                à   E           ˆ                     vf E   E   Ð€  ÿÿÿÿÿÿ          ð   D%            ˆ  ™   ÿÿÿÿÿÿ           ˜f ?   ?   Ð€<                �   E           ˆ                     @g       Ô€              êg ?   ?   Ð€<                   E         ˆ  –                  vh E   E   Ð€  ÿÿÿÿÿÿ              D%            ˆ  /  ÿÿÿÿÿÿ           Cå ?   ?   Ð€<                  E           ˆ                     ç E   E   Ð€  ÿÿÿÿÿÿ             D%            ˆ  –   ÿÿÿÿÿÿ           >ç ?   ?   Ð€<                °   E           ˆ                     çç       Ô€              uè ?   ?   Ð€<                0  E         ˆ  –                   é E   E   Ð€  ÿÿÿÿÿÿ          À   D%            ˆ  ,  ÿÿÿÿÿÿ           4ê ?   ?   Ðˆ<                0  E         ˆ  –                  Š§ L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ@         ªª           
 ÿÿÿÿÿÿ
-       µ§ L   L   ƒ<                €            ªª           
+       µ§ L   L   ƒ<                Ð            ªª           
      
-       q¨       Ô€              œ¨ L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ�          ªª           
+       q¨       Ô€              œ¨ L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿà          ªª           
 ÿÿÿÿÿÿ
-       ì© L   L   ƒ<                           ªª           
+       ì© L   L   ƒ<                P          ªª           
      
-       ·°       Ô€              æ± °   °   ƒ<                          ªª    E  €    @  
+       ·°       Ô€              æ± °   °   ƒ<                `          ªª    E  €    @  
 
-À 	 l                                                                                                             ö±       Ô€              >Í L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ            ªª           
+À 	 l                                                                                                             ö±       Ô€              >Í L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿð           ªª           
 ÿÿÿÿÿÿ
-       jÎ L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ          ªª           
+       jÎ L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿp         ªª           
 ÿÿÿÿÿÿ
-       ÑÒ       Ô€              |Ó L   L   ƒ<                0          ªª           
+       ÑÒ       Ô€              |Ó L   L   ƒ<                €          ªª           
      
-       ŒÓ       Ô€              ãÓ °   °   ƒ<                °            ªª    E  €    @  
+       ŒÓ       Ô€              ãÓ °   °   ƒ<                            ªª    E  €    @  
 
- 	À l                                                                                                             #Õ       Ô€              RÖ °   °   ƒ<                @          ªª    E  €    @  
+ 	À l                                                                                                             #Õ       Ô€              RÖ °   °   ƒ<                �          ªª    E  €    @  
 
- 	À l                                                                                                             Ÿ F   F   €€  ÿÿÿÿÿÿ          P #'     è    Œ$0H`l
- c&èÔè4mesh       jð A   A   €€  ÿÿÿÿÿÿ          P êt'     è    Œ$0H`l #'è4mesh               Ô€              F  °   °   ƒ<                P          ªª    E  €   @  
+ 	À l                                                                                                             Ÿ F   F   €€  ÿÿÿÿÿÿ           #'     è    Œ$0H`l
+ c&èÔè4mesh       jð A   A   €€  ÿÿÿÿÿÿ          êt'     è    Œ$0H`l #'è4mesh               Ô€              F  °   °   ƒ<                °          ªª    E  €   @  
 
-À 	 l                                                                                                             V        Ô€              ­  °   °   ƒ<                À            ªª    E  €   @  
+À 	 l                                                                                                             V        Ô€              ­  °   °   ƒ<                            ªª    E  €   @  
 
- 	À l                                                                                                             í        Ô€                °   °   ƒ<                `          ªª    E  €   @  
+ 	À l                                                                                                             í        Ô€                °   °   ƒ<                À          ªª    E  €   @  
 
- 	À l                                                                                                             ãý  F   F   €€  ÿÿÿÿÿÿ          ` +Ä.     è    Œ$0H`l
- .èu'è4mesh       JO A   A   €€  ÿÿÿÿÿÿ          ` 
-/     è    Œ$0H`l Ä.è4mesh       ç¤       Ô€              ¦ °   °   ƒ<                p          ªª    E  €   @  
+ 	À l                                                                                                             ãý  F   F   €€  ÿÿÿÿÿÿ          Ð+Ä.     è    Œ$0H`l
+ .èu'è4mesh       JO A   A   €€  ÿÿÿÿÿÿ          0
+/     è    Œ$0H`l Ä.è4mesh       ç¤       Ô€              ¦ °   °   ƒ<                à          ªª    E  €   @  
 
-À 	 l                                                                                                             &¦       Ô€              }¦ °   °   ƒ<                Ð            ªª    E  €   @  
+À 	 l                                                                                                             &¦       Ô€              }¦ °   °   ƒ<                @           ªª    E  €   @  
 
- 	À l                                                                                                             ½§       Ô€              "© °   °   ƒ<                €          ªª    E  €   @  
+ 	À l                                                                                                             ½§       Ô€              "© °   °   ƒ<                ð          ªª    E  €   @  
 
- 	À l                                                                                                             Ÿ F   F   €€  ÿÿÿÿÿÿ          p Ke6     è    Œ$0H`l
- ¥5è/è4mesh       jð A   A   €€  ÿÿÿÿÿÿ          p *·6     è    Œ$0H`l e6è4mesh       w        Ô€              ¦  °   °   ƒ<                �          ªª    E  €   @  
+ 	À l                                                                                                             Ÿ F   F   €€  ÿÿÿÿÿÿ           Ke6     è    Œ$0H`l
+ ¥5è/è4mesh       jð A   A   €€  ÿÿÿÿÿÿ          P*·6     è    Œ$0H`l e6è4mesh       w        Ô€              ¦  °   °   ƒ<                          ªª    E  €   @  
 
-À 	 l                                                                                                             ¶        Ô€                °   °   ƒ<                à            ªª    E  €   @  
+À 	 l                                                                                                             ¶        Ô€                °   °   ƒ<                `           ªª    E  €   @  
 
- 	À l                                                                                                             M        Ô€                 °   °   ƒ<                           ªª    E  €   @  
+ 	À l                                                                                                             M        Ô€                 °   °   ƒ<                           ªª    E  €   @  
 
- 	À l                                                                                                             ãý  F   F   €€  ÿÿÿÿÿÿ          € k>     è    Œ$0H`l
- F=è·6è4mesh       JO A   A   €€  ÿÿÿÿÿÿ          € JX>     è    Œ$0H`l >è4mesh       ö  ?   ?   Ð€<                °  E           ˆ                     ö! E   E   Ð€  ÿÿÿÿÿÿ          À  D%            ˆ  –   ÿÿÿÿÿÿ           " ?   ?   Ð€<                ð   E           ˆ                     ¤"       Ô€              # ?   ?   Ð€<                Ð  E         ˆ  –                  ¢# E   E   Ð€  ÿÿÿÿÿÿ             D%            ˆ  þ   ÿÿÿÿÿÿ           §  ?   ?   Ð€<                à  E           ˆ                     m¡ ?   ?   Ðˆ<                à  E           ˆ                     m¢ E   E   Ð€  ÿÿÿÿÿÿ          ð  D%            ˆ  h   ÿÿÿÿÿÿ           �¢ ?   ?   Ð€<                  E           ˆ                     £       Ô€              Ž£ ?   ?   Ð€<                   E         ˆ  –                  ¤ E   E   Ð€  ÿÿÿÿÿÿ             D%            ˆ  Ð   ÿÿÿÿÿÿ           ç¤       Ô€              ¦ °   °   ƒ<                          ªª    E  €   @  
+ 	À l                                                                                                             ãý  F   F   €€  ÿÿÿÿÿÿ          0k>     è    Œ$0H`l
+ F=è·6è4mesh       JO A   A   €€  ÿÿÿÿÿÿ          pJX>     è    Œ$0H`l >è4mesh       ö  ?   ?   Ð€<                @  E           ˆ                     ö! E   E   Ð€  ÿÿÿÿÿÿ          P  D%            ˆ  –   ÿÿÿÿÿÿ           " ?   ?   Ð€<                €  E           ˆ                     ¤"       Ô€              # ?   ?   Ð€<                `  E         ˆ  –                  ¢# E   E   Ð€  ÿÿÿÿÿÿ          �  D%            ˆ  þ   ÿÿÿÿÿÿ           §  ?   ?   Ð€<                p  E           ˆ                     m¡ ?   ?   Ðˆ<                p  E           ˆ                     m¢ E   E   Ð€  ÿÿÿÿÿÿ          €  D%            ˆ  h   ÿÿÿÿÿÿ           �¢ ?   ?   Ð€<                   E           ˆ                     £       Ô€              Ž£ ?   ?   Ð€<                �  E         ˆ  –                  ¤ E   E   Ð€  ÿÿÿÿÿÿ          °  D%            ˆ  Ð   ÿÿÿÿÿÿ           ç¤       Ô€              ¦ °   °   ƒ<                           ªª    E  €   @  
 
-À 	 l                                                                                                             &¦       Ô€              }¦ °   °   ƒ<                0           ªª    E  €   @  
+À 	 l                                                                                                             &¦       Ô€              }¦ °   °   ƒ<                À           ªª    E  €   @  
 
- 	À l                                                                                                             m§       Ô€              ”¨ °   °   ƒ<                           ªª    E  €   @  
+ 	À l                                                                                                             m§       Ô€              ”¨ °   °   ƒ<                °          ªª    E  €   @  
 
- 	À l                                                                                                             Ÿ F   F   €€  ÿÿÿÿÿÿ          � ‹§E     è    Œ$0H`l
- èDèX>è4mesh       jð A   A   €€  ÿÿÿÿÿÿ          � jùE     è    Œ$0H`l ¨Eè4mesh    
\ No newline at end of file
+ 	À l                                                                                                             Ÿ F   F   €€  ÿÿÿÿÿÿ          À‹§E     è    Œ$0H`l
+ èDèX>è4mesh       jð A   A   €€  ÿÿÿÿÿÿ          ÐjùE     è    Œ$0H`l ¨Eè4mesh    
\ No newline at end of file
diff -Naur ns-3.19/src/mesh/test/dot11s/hwmp-proactive-regression-test-1-1.pcap ns-3.20/src/mesh/test/dot11s/hwmp-proactive-regression-test-1-1.pcap
--- ns-3.19/src/mesh/test/dot11s/hwmp-proactive-regression-test-1-1.pcap	2014-06-17 10:34:00.449636577 -0700
+++ ns-3.20/src/mesh/test/dot11s/hwmp-proactive-regression-test-1-1.pcap	2014-06-17 10:33:13.806996633 -0700
@@ -1,94 +1,94 @@
-ÔÃ²¡          ÿÿ  i       Ò=  <   <   €€  ÿÿÿÿÿÿ            j=      è    Œ$0H`l 4mesh        ô=  R   R   Ð€<                   J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          ¹>        Ô€               _?  P   P   Ð€<                  J     Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬  9 7          o?        Ô€               N@  R   R   Ð€<                  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          ^@        Ô€               ¬@  P   P   Ð€<                 J     Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          mA        Ô€               “B        Ô€               9C  P   P   Ð€<                  J    Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          D  R   R   Ð€<                0  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          YE        Ô€               h©  E   E   Ð€  ÿÿÿÿÿÿ          @   D%              ˆ      ÿÿÿÿÿÿ            Š©  ?   ?   Ð€<                    E           ˆ                      lª  ?   ?   Ðˆ<                    E           ˆ                      í«        Ô€               3¬  ?   ?   Ðˆ<                    E           ˆ                      Ü¬        Ô€               +­  E   E   Ð€  ÿÿÿÿÿÿ          0   D%            ˆ  –   ÿÿÿÿÿÿ            4¯        Ô€               ký  A   A   €€  ÿÿÿÿÿÿ            ký      è    Œ$0H`l = è4mesh        †þ  R   R   Ð€<                   J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          –þ        Ô€               äþ  P   P   Ð€<                @ J    Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          ¤ÿ        Ô€               Øÿ  R   R   Ð€<                P  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          �        Ô€               C P   P   Ð€<                 J     Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          S       Ô€               »O A   A   €€  ÿÿÿÿÿÿ            JO     è    Œ$0H`l ý è4mesh        5) E   E   Ð€  ÿÿÿÿÿÿ          P   D%              ˆ      ÿÿÿÿÿÿ            W) ?   ?   Ð€<                `   E           ˆ                       *       Ô€               ë*       Ô€               :+ E   E   Ð€  ÿÿÿÿÿÿ          p   D%            ˆ  ™   ÿÿÿÿÿÿ            <, ?   ?   Ð€<                    E           ˆ                      L,       Ô€               ›, ?   ?   Ð€<                €   E         ˆ  –                   D-       Ô€               }- ?   ?   Ðˆ<                €   E         ˆ  –                   &.       Ô€               é. E   E   Ð€  ÿÿÿÿÿÿ          0   D%            ˆ  /  ÿÿÿÿÿÿ            ß F   F   €€  ÿÿÿÿÿÿ           ŠÞ     è    Œ$0H`l
- ý è] è4mesh        ‹ž F   F   €€  ÿÿÿÿÿÿ           ‹ž     è    Œ$0H`l
- ßèOè4mesh        Ûð A   A   €€  ÿÿÿÿÿÿ           jð     è    Œ$0H`l Ÿè4mesh       â=  F   F   €€  ÿÿÿÿÿÿ            ª     è    Œ$0H`l
- Ÿèè4mesh       ký  F   F   €€  ÿÿÿÿÿÿ            «?     è    Œ$0H`l
- €èðè4mesh       »O A   A   €€  ÿÿÿÿÿÿ            Š‘     è    Œ$0H`l @è4mesh       ß F   F   €€  ÿÿÿÿÿÿ          0 Ê      è    Œ$0H`l
- @è¯è4mesh       ‹ž F   F   €€  ÿÿÿÿÿÿ          0 Ëà     è    Œ$0H`l
- !è‘è4mesh       Ûð A   A   €€  ÿÿÿÿÿÿ          0 ª2     è    Œ$0H`l áè4mesh       â=  F   F   €€  ÿÿÿÿÿÿ          @ êÁ     è    Œ$0H`l
- áèPè4mesh       ký  F   F   €€  ÿÿÿÿÿÿ          @ ë�     è    Œ$0H`l
- Âè3è4mesh       »O A   A   €€  ÿÿÿÿÿÿ          @ ÊÓ     è    Œ$0H`l ‚è4mesh       èd E   E   Ð€  ÿÿÿÿÿÿ          `   D%              ˆ      ÿÿÿÿÿÿ           
-e ?   ?   Ð€<                �   E           ˆ                     ²e       Ô€              f E   E   Ð€  ÿÿÿÿÿÿ              D%            ˆ  ™   ÿÿÿÿÿÿ           g ?   ?   Ð€<                @   E           ˆ                     g       Ô€              ~g ?   ?   Ð€<                °   E         ˆ  –                  &h       Ô€              êh E   E   Ð€  ÿÿÿÿÿÿ          P   D%            ˆ  /  ÿÿÿÿÿÿ           j       Ô€              µä E   E   Ð€  ÿÿÿÿÿÿ          p   D%              ˆ      ÿÿÿÿÿÿ           ×ä ?   ?   Ð€<                À   E           ˆ                     €å       Ô€              Yæ       Ô€              ¨æ E   E   Ð€  ÿÿÿÿÿÿ          Ð   D%            ˆ  –   ÿÿÿÿÿÿ           ªç ?   ?   Ð€<                `   E           ˆ                     ºç       Ô€              	è ?   ?   Ð€<                à   E         ˆ  –                  ué E   E   Ð€  ÿÿÿÿÿÿ          p   D%            ˆ  ,  ÿÿÿÿÿÿ           Èé ?   ?   Ðˆ<                à   E         ˆ  –                  pê       Ô€              Þ¦ L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ€          ªª           
+ÔÃ²¡          ÿÿ  i       Ò=  <   <   €€  ÿÿÿÿÿÿ            j=      è    Œ$0H`l 4mesh        ô=  R   R   Ð€<                   J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          ¹>        Ô€               _?  P   P   Ð€<                 J     Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬  9 7          o?        Ô€               N@  R   R   Ð€<                   J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          ^@        Ô€               ¬@  P   P   Ð€<                 J     Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          mA        Ô€               “B        Ô€               9C  P   P   Ð€<                0 J    Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          D  R   R   Ð€<                @  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          YE        Ô€               h©  E   E   Ð€  ÿÿÿÿÿÿ          P   D%              ˆ      ÿÿÿÿÿÿ            Š©  ?   ?   Ð€<                    E           ˆ                      lª  ?   ?   Ðˆ<                    E           ˆ                      í«        Ô€               3¬  ?   ?   Ðˆ<                    E           ˆ                      Ü¬        Ô€               +­  E   E   Ð€  ÿÿÿÿÿÿ          0   D%            ˆ  –   ÿÿÿÿÿÿ            4¯        Ô€               ký  A   A   €€  ÿÿÿÿÿÿ          @ ký      è    Œ$0H`l = è4mesh        †þ  R   R   Ð€<                   J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          –þ        Ô€               äþ  P   P   Ð€<                P J    Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          ¤ÿ        Ô€               Øÿ  R   R   Ð€<                `  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          �        Ô€               C P   P   Ð€<                 J     Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          S       Ô€               »O A   A   €€  ÿÿÿÿÿÿ            JO     è    Œ$0H`l ý è4mesh        5) E   E   Ð€  ÿÿÿÿÿÿ          `   D%              ˆ      ÿÿÿÿÿÿ            W) ?   ?   Ð€<                p   E           ˆ                       *       Ô€               ë*       Ô€               :+ E   E   Ð€  ÿÿÿÿÿÿ          €   D%            ˆ  ™   ÿÿÿÿÿÿ            <, ?   ?   Ð€<                0   E           ˆ                      L,       Ô€               ›, ?   ?   Ð€<                �   E         ˆ  –                   D-       Ô€               }- ?   ?   Ðˆ<                �   E         ˆ  –                   &.       Ô€               é. E   E   Ð€  ÿÿÿÿÿÿ          @   D%            ˆ  /  ÿÿÿÿÿÿ            ß F   F   €€  ÿÿÿÿÿÿ          p ŠÞ     è    Œ$0H`l
+ ý è] è4mesh        ‹ž F   F   €€  ÿÿÿÿÿÿ            ‹ž     è    Œ$0H`l
+ ßèOè4mesh        Ûð A   A   €€  ÿÿÿÿÿÿ          P jð     è    Œ$0H`l Ÿè4mesh       â=  F   F   €€  ÿÿÿÿÿÿ          € ª     è    Œ$0H`l
+ Ÿèè4mesh       ký  F   F   €€  ÿÿÿÿÿÿ          ° «?     è    Œ$0H`l
+ €èðè4mesh       »O A   A   €€  ÿÿÿÿÿÿ          ` Š‘     è    Œ$0H`l @è4mesh       ß F   F   €€  ÿÿÿÿÿÿ          � Ê      è    Œ$0H`l
+ @è¯è4mesh       ‹ž F   F   €€  ÿÿÿÿÿÿ          À Ëà     è    Œ$0H`l
+ !è‘è4mesh       Ûð A   A   €€  ÿÿÿÿÿÿ          p ª2     è    Œ$0H`l áè4mesh       â=  F   F   €€  ÿÿÿÿÿÿ            êÁ     è    Œ$0H`l
+ áèPè4mesh       ký  F   F   €€  ÿÿÿÿÿÿ          Ð ë�     è    Œ$0H`l
+ Âè3è4mesh       »O A   A   €€  ÿÿÿÿÿÿ          € ÊÓ     è    Œ$0H`l ‚è4mesh       èd E   E   Ð€  ÿÿÿÿÿÿ          °   D%              ˆ      ÿÿÿÿÿÿ           
+e ?   ?   Ð€<                à   E           ˆ                     ²e       Ô€              f E   E   Ð€  ÿÿÿÿÿÿ          ð   D%            ˆ  ™   ÿÿÿÿÿÿ           g ?   ?   Ð€<                �   E           ˆ                     g       Ô€              ~g ?   ?   Ð€<                   E         ˆ  –                  &h       Ô€              êh E   E   Ð€  ÿÿÿÿÿÿ              D%            ˆ  /  ÿÿÿÿÿÿ           j       Ô€              µä E   E   Ð€  ÿÿÿÿÿÿ          À   D%              ˆ      ÿÿÿÿÿÿ           ×ä ?   ?   Ð€<                  E           ˆ                     €å       Ô€              Yæ       Ô€              ¨æ E   E   Ð€  ÿÿÿÿÿÿ             D%            ˆ  –   ÿÿÿÿÿÿ           ªç ?   ?   Ð€<                °   E           ˆ                     ºç       Ô€              	è ?   ?   Ð€<                0  E         ˆ  –                  ué E   E   Ð€  ÿÿÿÿÿÿ          À   D%            ˆ  ,  ÿÿÿÿÿÿ           Èé ?   ?   Ðˆ<                0  E         ˆ  –                  pê       Ô€              Þ¦ L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿÐ          ªª           
 ÿÿÿÿÿÿ
-       	§ L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿð          ªª           
+       	§ L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ@         ªª           
 ÿÿÿÿÿÿ
-       5¨ L   L   ƒ<                €            ªª           
+       5¨ L   L   ƒ<                Ð            ªª           
      
-       E¨       Ô€              © L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ�          ªª           
+       E¨       Ô€              © L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿà          ªª           
 ÿÿÿÿÿÿ
-       l© L   L   ƒ<                           ªª           
+       l© L   L   ƒ<                P          ªª           
      
-       (ª       Ô€              « L   L   ƒ<                �           ªª           
+       (ª       Ô€              « L   L   ƒ<                à           ªª           
      
-       L¯       Ô€              {° °   °   ƒ<                            ªª    E  €    @  
+       L¯       Ô€              {° °   °   ƒ<                ð           ªª    E  €    @  
 
-À 	 l                                                                                                             ‹°       Ô€              â° °   °   ƒ<                          ªª    E  €    @  
+À 	 l                                                                                                             ‹°       Ô€              â° °   °   ƒ<                `          ªª    E  €    @  
 
-À 	 l                                                                                                             "²       Ô€              ¾Í L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ            ªª           
+À 	 l                                                                                                             "²       Ô€              ¾Í L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿð           ªª           
 ÿÿÿÿÿÿ
-       éÍ L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ          ªª           
+       éÍ L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿp         ªª           
 ÿÿÿÿÿÿ
-       Ï L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ°          ªª           
+       Ï L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ          ªª           
 ÿÿÿÿÿÿ
-       ˜Ñ       Ô€              ”Ò L   L   ƒ<                À           ªª           
+       ˜Ñ       Ô€              ”Ò L   L   ƒ<                          ªª           
      
-       ¤Ò       Ô€              ûÒ L   L   ƒ<                0          ªª           
+       ¤Ò       Ô€              ûÒ L   L   ƒ<                €          ªª           
      
-       ¸Ó       Ô€              çÔ °   °   ƒ<                °            ªª    E  €    @  
+       ¸Ó       Ô€              çÔ °   °   ƒ<                            ªª    E  €    @  
 
- 	À l                                                                                                             ÷Ô       Ô€              NÕ °   °   ƒ<                @          ªª    E  €    @  
+ 	À l                                                                                                             ÷Ô       Ô€              NÕ °   °   ƒ<                �          ªª    E  €    @  
 
- 	À l                                                                                                             �Ö       Ô€              ë× °   °   ƒ<                Ð           ªª    E  €    @  
+ 	À l                                                                                                             �Ö       Ô€              ë× °   °   ƒ<                           ªª    E  €    @  
 
- 	À l                                                                                                             ß F   F   €€  ÿÿÿÿÿÿ          P 
+ 	À l                                                                                                             ß F   F   €€  ÿÿÿÿÿÿ          0
 c&     è    Œ$0H`l
- ‚èòè4mesh       ‹ž F   F   €€  ÿÿÿÿÿÿ          P #'     è    Œ$0H`l
- c&èÔè4mesh       Ûð A   A   €€  ÿÿÿÿÿÿ          P êt'     è    Œ$0H`l #'è4mesh       «        Ô€              Ú  °   °   ƒ<                à           ªª    E  €   @  
+ ‚èòè4mesh       ‹ž F   F   €€  ÿÿÿÿÿÿ           #'     è    Œ$0H`l
+ c&èÔè4mesh       Ûð A   A   €€  ÿÿÿÿÿÿ          êt'     è    Œ$0H`l #'è4mesh       «        Ô€              Ú  °   °   ƒ<                @          ªª    E  €   @  
 
-À 	 l                                                                                                             ê        Ô€              A  °   °   ƒ<                P          ªª    E  €   @  
+À 	 l                                                                                                             ê        Ô€              A  °   °   ƒ<                °          ªª    E  €   @  
 
-À 	 l                                                                                                             ‚        Ô€              ±  °   °   ƒ<                À            ªª    E  €   @  
+À 	 l                                                                                                             ‚        Ô€              ±  °   °   ƒ<                            ªª    E  €   @  
 
- 	À l                                                                                                             Á        Ô€              {  °   °   ƒ<                `          ªª    E  €   @  
+ 	À l                                                                                                             Á        Ô€              {  °   °   ƒ<                À          ªª    E  €   @  
 
- 	À l                                                                                                             ¼        Ô€              ô	  °   °   ƒ<                ð           ªª    E  €   @  
+ 	À l                                                                                                             ¼        Ô€              ô	  °   °   ƒ<                P          ªª    E  €   @  
 
- 	À l                                                                                                             â=  F   F   €€  ÿÿÿÿÿÿ          ` *.     è    Œ$0H`l
- #'è“&è4mesh       ký  F   F   €€  ÿÿÿÿÿÿ          ` +Ä.     è    Œ$0H`l
- .èu'è4mesh       »O A   A   €€  ÿÿÿÿÿÿ          ` 
-/     è    Œ$0H`l Ä.è4mesh       {£       Ô€              ª¤ °   °   ƒ<                           ªª    E  €   @  
+ 	À l                                                                                                             â=  F   F   €€  ÿÿÿÿÿÿ          `*.     è    Œ$0H`l
+ #'è“&è4mesh       ký  F   F   €€  ÿÿÿÿÿÿ          Ð+Ä.     è    Œ$0H`l
+ .èu'è4mesh       »O A   A   €€  ÿÿÿÿÿÿ          0
+/     è    Œ$0H`l Ä.è4mesh       {£       Ô€              ª¤ °   °   ƒ<                p          ªª    E  €   @  
 
-À 	 l                                                                                                             º¤       Ô€              ¥ °   °   ƒ<                p          ªª    E  €   @  
+À 	 l                                                                                                             º¤       Ô€              ¥ °   °   ƒ<                à          ªª    E  €   @  
 
-À 	 l                                                                                                             R¦       Ô€              �§ °   °   ƒ<                Ð            ªª    E  €   @  
+À 	 l                                                                                                             R¦       Ô€              �§ °   °   ƒ<                @           ªª    E  €   @  
 
- 	À l                                                                                                             ‘§       Ô€              ¨ °   °   ƒ<                €          ªª    E  €   @  
+ 	À l                                                                                                             ‘§       Ô€              ¨ °   °   ƒ<                ð          ªª    E  €   @  
 
- 	À l                                                                                                             _©       Ô€              ©ª °   °   ƒ<                          ªª    E  €   @  
+ 	À l                                                                                                             _©       Ô€              ©ª °   °   ƒ<                €          ªª    E  €   @  
 
- 	À l                                                                                                             ß F   F   €€  ÿÿÿÿÿÿ          p J¥5     è    Œ$0H`l
- Ä.è4.è4mesh       ‹ž F   F   €€  ÿÿÿÿÿÿ          p Ke6     è    Œ$0H`l
- ¥5è/è4mesh       Ûð A   A   €€  ÿÿÿÿÿÿ          p *·6     è    Œ$0H`l e6è4mesh               Ô€              :  °   °   ƒ<                           ªª    E  €   @  
+ 	À l                                                                                                             ß F   F   €€  ÿÿÿÿÿÿ          �J¥5     è    Œ$0H`l
+ Ä.è4.è4mesh       ‹ž F   F   €€  ÿÿÿÿÿÿ           Ke6     è    Œ$0H`l
+ ¥5è/è4mesh       Ûð A   A   €€  ÿÿÿÿÿÿ          P*·6     è    Œ$0H`l e6è4mesh               Ô€              :  °   °   ƒ<                           ªª    E  €   @  
 
-À 	 l                                                                                                             J        Ô€              ¡  °   °   ƒ<                �          ªª    E  €   @  
+À 	 l                                                                                                             J        Ô€              ¡  °   °   ƒ<                          ªª    E  €   @  
 
-À 	 l                                                                                                             â        Ô€                °   °   ƒ<                à            ªª    E  €   @  
+À 	 l                                                                                                             â        Ô€                °   °   ƒ<                `           ªª    E  €   @  
 
- 	À l                                                                                                             !        Ô€              œ  °   °   ƒ<                           ªª    E  €   @  
+ 	À l                                                                                                             !        Ô€              œ  °   °   ƒ<                           ªª    E  €   @  
 
- 	À l                                                                                                             Ý        Ô€              9	  °   °   ƒ<                0          ªª    E  €   @  
+ 	À l                                                                                                             Ý        Ô€              9	  °   °   ƒ<                °          ªª    E  €   @  
 
- 	À l                                                                                                             â=  F   F   €€  ÿÿÿÿÿÿ          € jF=     è    Œ$0H`l
- e6èÕ5è4mesh       ký  F   F   €€  ÿÿÿÿÿÿ          € k>     è    Œ$0H`l
- F=è·6è4mesh       »O A   A   €€  ÿÿÿÿÿÿ          € JX>     è    Œ$0H`l >è4mesh       h  E   E   Ð€  ÿÿÿÿÿÿ          @  D%              ˆ      ÿÿÿÿÿÿ           Š  ?   ?   Ð€<                °  E           ˆ                     2!       Ô€              �! E   E   Ð€  ÿÿÿÿÿÿ          À  D%            ˆ  –   ÿÿÿÿÿÿ           h" ?   ?   Ð€<                ð   E           ˆ                     x"       Ô€              Æ" ?   ?   Ð€<                Ð  E         ˆ  –                  S#       Ô€              Ï&       Ô€              5  E   E   Ð€  ÿÿÿÿÿÿ          P  D%              ˆ      ÿÿÿÿÿÿ           W  ?   ?   Ð€<                à  E           ˆ                     ¡ ?   ?   Ðˆ<                à  E           ˆ                     ª¡       Ô€              ù¡ E   E   Ð€  ÿÿÿÿÿÿ          ð  D%            ˆ  h   ÿÿÿÿÿÿ           ß¢ ?   ?   Ð€<                  E           ˆ                     ï¢       Ô€              >£ ?   ?   Ð€<                   E         ˆ  –                  Ë£       Ô€              Ž¤ E   E   Ð€  ÿÿÿÿÿÿ             D%            ˆ  Ð   ÿÿÿÿÿÿ           ˜¥       Ô€              {£       Ô€              ª¤ °   °   ƒ<                `          ªª    E  €   @  
+ 	À l                                                                                                             â=  F   F   €€  ÿÿÿÿÿÿ          ÀjF=     è    Œ$0H`l
+ e6èÕ5è4mesh       ký  F   F   €€  ÿÿÿÿÿÿ          0k>     è    Œ$0H`l
+ F=è·6è4mesh       »O A   A   €€  ÿÿÿÿÿÿ          pJX>     è    Œ$0H`l >è4mesh       h  E   E   Ð€  ÿÿÿÿÿÿ          Ð  D%              ˆ      ÿÿÿÿÿÿ           Š  ?   ?   Ð€<                @  E           ˆ                     2!       Ô€              �! E   E   Ð€  ÿÿÿÿÿÿ          P  D%            ˆ  –   ÿÿÿÿÿÿ           h" ?   ?   Ð€<                €  E           ˆ                     x"       Ô€              Æ" ?   ?   Ð€<                `  E         ˆ  –                  S#       Ô€              Ï&       Ô€              5  E   E   Ð€  ÿÿÿÿÿÿ          à  D%              ˆ      ÿÿÿÿÿÿ           W  ?   ?   Ð€<                p  E           ˆ                     ¡ ?   ?   Ðˆ<                p  E           ˆ                     ª¡       Ô€              ù¡ E   E   Ð€  ÿÿÿÿÿÿ          €  D%            ˆ  h   ÿÿÿÿÿÿ           ß¢ ?   ?   Ð€<                   E           ˆ                     ï¢       Ô€              >£ ?   ?   Ð€<                �  E         ˆ  –                  Ë£       Ô€              Ž¤ E   E   Ð€  ÿÿÿÿÿÿ          °  D%            ˆ  Ð   ÿÿÿÿÿÿ           ˜¥       Ô€              {£       Ô€              ª¤ °   °   ƒ<                ð          ªª    E  €   @  
 
-À 	 l                                                                                                             º¤       Ô€              ¥ °   °   ƒ<                          ªª    E  €   @  
+À 	 l                                                                                                             º¤       Ô€              ¥ °   °   ƒ<                           ªª    E  €   @  
 
-À 	 l                                                                                                             R¦       Ô€              1§ °   °   ƒ<                0           ªª    E  €   @  
+À 	 l                                                                                                             R¦       Ô€              1§ °   °   ƒ<                À           ªª    E  €   @  
 
- 	À l                                                                                                             A§       Ô€              à§ °   °   ƒ<                           ªª    E  €   @  
+ 	À l                                                                                                             A§       Ô€              à§ °   °   ƒ<                °          ªª    E  €   @  
 
- 	À l                                                                                                             Ñ¨       Ô€               ª °   °   ƒ<                p          ªª    E  €   @  
+ 	À l                                                                                                             Ñ¨       Ô€               ª °   °   ƒ<                           ªª    E  €   @  
 
- 	À l                                                                                                             ß F   F   €€  ÿÿÿÿÿÿ          � ŠçD     è    Œ$0H`l
- >èv=è4mesh       ‹ž F   F   €€  ÿÿÿÿÿÿ          � ‹§E     è    Œ$0H`l
- èDèX>è4mesh       Ûð A   A   €€  ÿÿÿÿÿÿ          � jùE     è    Œ$0H`l ¨Eè4mesh    
\ No newline at end of file
+ 	À l                                                                                                             ß F   F   €€  ÿÿÿÿÿÿ          ŠçD     è    Œ$0H`l
+ >èv=è4mesh       ‹ž F   F   €€  ÿÿÿÿÿÿ          À‹§E     è    Œ$0H`l
+ èDèX>è4mesh       Ûð A   A   €€  ÿÿÿÿÿÿ          ÐjùE     è    Œ$0H`l ¨Eè4mesh    
\ No newline at end of file
diff -Naur ns-3.19/src/mesh/test/dot11s/hwmp-proactive-regression-test-2-1.pcap ns-3.20/src/mesh/test/dot11s/hwmp-proactive-regression-test-2-1.pcap
--- ns-3.19/src/mesh/test/dot11s/hwmp-proactive-regression-test-2-1.pcap	2014-06-17 10:34:00.450636569 -0700
+++ ns-3.20/src/mesh/test/dot11s/hwmp-proactive-regression-test-2-1.pcap	2014-06-17 10:33:13.807996625 -0700
@@ -1,116 +1,116 @@
-ÔÃ²¡          ÿÿ  i       ¸  R   R   Ð€<                   J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          ×        Ô€               Ø        Ô€               ~  P   P   Ð€<                 J     Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          j=  <   <   €€  ÿÿÿÿÿÿ            j=      è    Œ$0H`l 4mesh        |>  R   R   Ð€<                   J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          Œ>        Ô€               Ú>  P   P   Ð€<                  J     Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬  9 7          ›?        Ô€               Æ?  R   R   Ð€<                  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          ‹@        Ô€               1A  P   P   Ð€<                 J     Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          AA        Ô€               VB  R   R   Ðˆ<                   J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          fB        Ô€               ´B  P   P   Ð€<                  J    Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          uC        Ô€               —C  R   R   Ð€<                0  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          \D        Ô€               E  P   P   Ð€<                0 J    Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          -E        Ô€               Š]  F   F   €€  ÿÿÿÿÿÿ            ]      è    Œ$0H`l
-  è= è4mesh        ó¨  E   E   Ð€  ÿÿÿÿÿÿ          @   D%              ˆ      ÿÿÿÿÿÿ            ±«  ?   ?   Ðˆ<                @   E           ˆ                      Á«        Ô€                ¬  ?   ?   Ðˆ<                    E           ˆ                      °¬        Ô€               Ÿ­  E   E   Ð€  ÿÿÿÿÿÿ          0   D%            ˆ  –   ÿÿÿÿÿÿ            j®        Ô€               ø®  ?   ?   Ð€<                `   E         ˆ  –                   ¯        Ô€               Ûý  A   A   €€  ÿÿÿÿÿÿ            ký      è    Œ$0H`l = è4mesh        Âþ        Ô€               hÿ  P   P   Ð€<                @ J    Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          a  R   R   Ð€<                P  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7                 Ô€               Á( E   E   Ð€  ÿÿÿÿÿÿ          P   D%              ˆ      ÿÿÿÿÿÿ            Ã) ?   ?   Ð€<                `   E           ˆ                      Ó)       Ô€               ®* ?   ?   Ðˆ<                p   E           ˆ                      ¾*       Ô€               ®+ E   E   Ð€  ÿÿÿÿÿÿ          €   D%            ˆ  š   ÿÿÿÿÿÿ            y,       Ô€               - ?   ?   Ð€<                �   E         ˆ  –                   -       Ô€               é- ?   ?   Ðˆ<                €   E         ˆ  –                   ù-       Ô€               ŠÞ F   F   €€  ÿÿÿÿÿÿ           ŠÞ     è    Œ$0H`l
- ý è] è4mesh        ª F   F   €€  ÿÿÿÿÿÿ           1     è    Œ$0H`l
- ´èßè4mesh        Ÿ F   F   €€  ÿÿÿÿÿÿ           ‹ž     è    Œ$0H`l
- ßèOè4mesh       j=  F   F   €€  ÿÿÿÿÿÿ            ª     è    Œ$0H`l
- Ÿèè4mesh       Šm  F   F   €€  ÿÿÿÿÿÿ            Q¯     è    Œ$0H`l
- Uè€è4mesh       ãý  F   F   €€  ÿÿÿÿÿÿ            «?     è    Œ$0H`l
- €èðè4mesh       ŠÞ F   F   €€  ÿÿÿÿÿÿ          0 Ê      è    Œ$0H`l
- @è¯è4mesh       ª F   F   €€  ÿÿÿÿÿÿ          0 qP     è    Œ$0H`l
- öè!è4mesh       Ÿ F   F   €€  ÿÿÿÿÿÿ          0 Ëà     è    Œ$0H`l
- !è‘è4mesh       j=  F   F   €€  ÿÿÿÿÿÿ          @ êÁ     è    Œ$0H`l
- áèPè4mesh       Šm  F   F   €€  ÿÿÿÿÿÿ          @ ‘ñ     è    Œ$0H`l
- —èÂè4mesh       ãý  F   F   €€  ÿÿÿÿÿÿ          @ ë�     è    Œ$0H`l
- Âè3è4mesh       sd E   E   Ð€  ÿÿÿÿÿÿ          `   D%              ˆ      ÿÿÿÿÿÿ           ve ?   ?   Ð€<                �   E           ˆ                     †e       Ô€              vf E   E   Ð€  ÿÿÿÿÿÿ              D%            ˆ  ™   ÿÿÿÿÿÿ           g ?   ?   Ðˆ<                    E           ˆ                     /g       Ô€              êg ?   ?   Ð€<                °   E         ˆ  –                  úg       Ô€              êh E   E   Ð€  ÿÿÿÿÿÿ          °   D%            ˆ  ¢   ÿÿÿÿÿÿ           ´i       Ô€              Bj ?   ?   Ð€<                À   E         ˆ  –                  Rj       Ô€              Aä E   E   Ð€  ÿÿÿÿÿÿ          p   D%              ˆ      ÿÿÿÿÿÿ           Cå ?   ?   Ð€<                À   E           ˆ                     Så       Ô€              æ ?   ?   Ðˆ<                Ð   E           ˆ                     ,æ       Ô€              çç       Ô€              Né ?   ?   Ðˆ<                ð   E         ˆ  –                  ^é       Ô€              4ê ?   ?   Ðˆ<                à   E         ˆ  –                  Dê       Ô€              3¦ L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ          ªª           
+ÔÃ²¡          ÿÿ  i       ¸  R   R   Ð€<                   J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          ×        Ô€               Ø        Ô€               ~  P   P   Ð€<                 J     Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          j=  <   <   €€  ÿÿÿÿÿÿ            j=      è    Œ$0H`l 4mesh        |>  R   R   Ð€<                   J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          Œ>        Ô€               Ú>  P   P   Ð€<                 J     Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬  9 7          ›?        Ô€               Æ?  R   R   Ð€<                   J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          ‹@        Ô€               1A  P   P   Ð€<                 J     Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          AA        Ô€               VB  R   R   Ðˆ<                   J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          fB        Ô€               ´B  P   P   Ð€<                0 J    Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          uC        Ô€               —C  R   R   Ð€<                @  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          \D        Ô€               E  P   P   Ð€<                0 J    Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          -E        Ô€               Š]  F   F   €€  ÿÿÿÿÿÿ          @ ]      è    Œ$0H`l
+  è= è4mesh        ó¨  E   E   Ð€  ÿÿÿÿÿÿ          P   D%              ˆ      ÿÿÿÿÿÿ            ±«  ?   ?   Ðˆ<                P   E           ˆ                      Á«        Ô€                ¬  ?   ?   Ðˆ<                    E           ˆ                      °¬        Ô€               Ÿ­  E   E   Ð€  ÿÿÿÿÿÿ          0   D%            ˆ  –   ÿÿÿÿÿÿ            j®        Ô€               ø®  ?   ?   Ð€<                p   E         ˆ  –                   ¯        Ô€               Ûý  A   A   €€  ÿÿÿÿÿÿ          @ ký      è    Œ$0H`l = è4mesh        Âþ        Ô€               hÿ  P   P   Ð€<                P J    Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          a  R   R   Ð€<                `  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7                 Ô€               Á( E   E   Ð€  ÿÿÿÿÿÿ          `   D%              ˆ      ÿÿÿÿÿÿ            Ã) ?   ?   Ð€<                p   E           ˆ                      Ó)       Ô€               ®* ?   ?   Ðˆ<                €   E           ˆ                      ¾*       Ô€               ®+ E   E   Ð€  ÿÿÿÿÿÿ          �   D%            ˆ  š   ÿÿÿÿÿÿ            y,       Ô€               - ?   ?   Ð€<                    E         ˆ  –                   -       Ô€               é- ?   ?   Ðˆ<                �   E         ˆ  –                   ù-       Ô€               ŠÞ F   F   €€  ÿÿÿÿÿÿ          p ŠÞ     è    Œ$0H`l
+ ý è] è4mesh        ª F   F   €€  ÿÿÿÿÿÿ          ° 1     è    Œ$0H`l
+ ´èßè4mesh        Ÿ F   F   €€  ÿÿÿÿÿÿ            ‹ž     è    Œ$0H`l
+ ßèOè4mesh       j=  F   F   €€  ÿÿÿÿÿÿ          € ª     è    Œ$0H`l
+ Ÿèè4mesh       Šm  F   F   €€  ÿÿÿÿÿÿ          À Q¯     è    Œ$0H`l
+ Uè€è4mesh       ãý  F   F   €€  ÿÿÿÿÿÿ          ° «?     è    Œ$0H`l
+ €èðè4mesh       ŠÞ F   F   €€  ÿÿÿÿÿÿ          � Ê      è    Œ$0H`l
+ @è¯è4mesh       ª F   F   €€  ÿÿÿÿÿÿ          Ð qP     è    Œ$0H`l
+ öè!è4mesh       Ÿ F   F   €€  ÿÿÿÿÿÿ          À Ëà     è    Œ$0H`l
+ !è‘è4mesh       j=  F   F   €€  ÿÿÿÿÿÿ            êÁ     è    Œ$0H`l
+ áèPè4mesh       Šm  F   F   €€  ÿÿÿÿÿÿ          à ‘ñ     è    Œ$0H`l
+ —èÂè4mesh       ãý  F   F   €€  ÿÿÿÿÿÿ          Ð ë�     è    Œ$0H`l
+ Âè3è4mesh       sd E   E   Ð€  ÿÿÿÿÿÿ          °   D%              ˆ      ÿÿÿÿÿÿ           ve ?   ?   Ð€<                à   E           ˆ                     †e       Ô€              vf E   E   Ð€  ÿÿÿÿÿÿ          ð   D%            ˆ  ™   ÿÿÿÿÿÿ           g ?   ?   Ðˆ<                ð   E           ˆ                     /g       Ô€              êg ?   ?   Ð€<                   E         ˆ  –                  úg       Ô€              êh E   E   Ð€  ÿÿÿÿÿÿ             D%            ˆ  ¢   ÿÿÿÿÿÿ           ´i       Ô€              Bj ?   ?   Ð€<                  E         ˆ  –                  Rj       Ô€              Aä E   E   Ð€  ÿÿÿÿÿÿ          À   D%              ˆ      ÿÿÿÿÿÿ           Cå ?   ?   Ð€<                  E           ˆ                     Så       Ô€              æ ?   ?   Ðˆ<                   E           ˆ                     ,æ       Ô€              çç       Ô€              Né ?   ?   Ðˆ<                @  E         ˆ  –                  ^é       Ô€              4ê ?   ?   Ðˆ<                0  E         ˆ  –                  Dê       Ô€              3¦ L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿP         ªª           
 ÿÿÿÿÿÿ
-       ^¦ L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ€          ªª           
+       ^¦ L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿÐ          ªª           
 ÿÿÿÿÿÿ
-       Š§ L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿð          ªª           
+       Š§ L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ@         ªª           
 ÿÿÿÿÿÿ
-       q¨       Ô€              ì© L   L   ƒ<                           ªª           
+       q¨       Ô€              ì© L   L   ƒ<                P          ªª           
      
-       ü©       Ô€              ›ª L   L   ƒ<                �           ªª           
+       ü©       Ô€              ›ª L   L   ƒ<                à           ªª           
      
-       X«       Ô€              ¬ L   L   ƒ<                          ªª           
+       X«       Ô€              ¬ L   L   ƒ<                `          ªª           
      
-       ª­       Ô€              ¯ °   °   ƒ<                           ªª    E  €    @  
+       ª­       Ô€              ¯ °   °   ƒ<                p          ªª    E  €    @  
 
-À 	 l                                                                                                             ¯       Ô€              v¯ °   °   ƒ<                            ªª    E  €    @  
+À 	 l                                                                                                             ¯       Ô€              v¯ °   °   ƒ<                ð           ªª    E  €    @  
 
-À 	 l                                                                                                             ·°       Ô€              æ± °   °   ƒ<                          ªª    E  €    @  
+À 	 l                                                                                                             ·°       Ô€              æ± °   °   ƒ<                `          ªª    E  €    @  
 
-À 	 l                                                                                                             jÎ L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ          ªª           
+À 	 l                                                                                                             jÎ L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿp         ªª           
 ÿÿÿÿÿÿ
-       •Î L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ°          ªª           
+       •Î L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ          ªª           
 ÿÿÿÿÿÿ
-       ÀÏ L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ0         ªª           
+       ÀÏ L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ€         ªª           
 ÿÿÿÿÿÿ
-       ¨Ð       Ô€              \Ñ L   L   ƒ<                @          ªª           
+       ¨Ð       Ô€              \Ñ L   L   ƒ<                �          ªª           
      
-       lÑ       Ô€              Ò L   L   ƒ<                À           ªª           
+       lÑ       Ô€              Ò L   L   ƒ<                          ªª           
      
-       ÑÒ       Ô€              |Ó L   L   ƒ<                0          ªª           
+       ÑÒ       Ô€              |Ó L   L   ƒ<                €          ªª           
      
-       #Õ       Ô€              RÖ °   °   ƒ<                @          ªª    E  €    @  
+       #Õ       Ô€              RÖ °   °   ƒ<                �          ªª    E  €    @  
 
- 	À l                                                                                                             bÖ       Ô€              æÖ °   °   ƒ<                Ð           ªª    E  €    @  
+ 	À l                                                                                                             bÖ       Ô€              æÖ °   °   ƒ<                           ªª    E  €    @  
 
- 	À l                                                                                                             'Ø       Ô€              VÙ °   °   ƒ<                P          ªª    E  €    @  
+ 	À l                                                                                                             'Ø       Ô€              VÙ °   °   ƒ<                           ªª    E  €    @  
 
- 	À l                                                                                                             ŠÞ F   F   €€  ÿÿÿÿÿÿ          P 
+ 	À l                                                                                                             ŠÞ F   F   €€  ÿÿÿÿÿÿ          0
 c&     è    Œ$0H`l
- ‚èòè4mesh       ª F   F   €€  ÿÿÿÿÿÿ          P ±’&     è    Œ$0H`l
- 8&èc&è4mesh       Ÿ F   F   €€  ÿÿÿÿÿÿ          P #'     è    Œ$0H`l
- c&èÔè4mesh       @        Ô€              o  °   °   ƒ<                `          ªª    E  €   @  
+ ‚èòè4mesh       ª F   F   €€  ÿÿÿÿÿÿ          °±’&     è    Œ$0H`l
+ 8&èc&è4mesh       Ÿ F   F   €€  ÿÿÿÿÿÿ           #'     è    Œ$0H`l
+ c&èÔè4mesh       @        Ô€              o  °   °   ƒ<                À          ªª    E  €   @  
 
-À 	 l                                                                                                                     Ô€              Ö  °   °   ƒ<                à           ªª    E  €   @  
+À 	 l                                                                                                                     Ô€              Ö  °   °   ƒ<                @          ªª    E  €   @  
 
-À 	 l                                                                                                                     Ô€              F  °   °   ƒ<                P          ªª    E  €   @  
+À 	 l                                                                                                                     Ô€              F  °   °   ƒ<                °          ªª    E  €   @  
 
-À 	 l                                                                                                             í        Ô€                °   °   ƒ<                `          ªª    E  €   @  
+À 	 l                                                                                                             í        Ô€                °   °   ƒ<                À          ªª    E  €   @  
 
- 	À l                                                                                                             �        Ô€              ï  °   °   ƒ<                ð           ªª    E  €   @  
+ 	À l                                                                                                             �        Ô€              ï  °   °   ƒ<                P          ªª    E  €   @  
 
  	À l                                                                                                             0
-        Ô€              _  °   °   ƒ<                p          ªª    E  €   @  
+        Ô€              _  °   °   ƒ<                Ð          ªª    E  €   @  
 
- 	À l                                                                                                             j=  F   F   €€  ÿÿÿÿÿÿ          ` *.     è    Œ$0H`l
- #'è“&è4mesh       Šm  F   F   €€  ÿÿÿÿÿÿ          ` Ñ3.     è    Œ$0H`l
- Ù-è.è4mesh       ãý  F   F   €€  ÿÿÿÿÿÿ          ` +Ä.     è    Œ$0H`l
- .èu'è4mesh       `¢       Ô€              ?£ °   °   ƒ<                €          ªª    E  €   @  
+ 	À l                                                                                                             j=  F   F   €€  ÿÿÿÿÿÿ          `*.     è    Œ$0H`l
+ #'è“&è4mesh       Šm  F   F   €€  ÿÿÿÿÿÿ          àÑ3.     è    Œ$0H`l
+ Ù-è.è4mesh       ãý  F   F   €€  ÿÿÿÿÿÿ          Ð+Ä.     è    Œ$0H`l
+ .èu'è4mesh       `¢       Ô€              ?£ °   °   ƒ<                ð          ªª    E  €   @  
 
-À 	 l                                                                                                             O£       Ô€              ¦£ °   °   ƒ<                           ªª    E  €   @  
+À 	 l                                                                                                             O£       Ô€              ¦£ °   °   ƒ<                p          ªª    E  €   @  
 
-À 	 l                                                                                                             ç¤       Ô€              ¦ °   °   ƒ<                p          ªª    E  €   @  
+À 	 l                                                                                                             ç¤       Ô€              ¦ °   °   ƒ<                à          ªª    E  €   @  
 
-À 	 l                                                                                                             ½§       Ô€              "© °   °   ƒ<                €          ªª    E  €   @  
+À 	 l                                                                                                             ½§       Ô€              "© °   °   ƒ<                ð          ªª    E  €   @  
 
- 	À l                                                                                                             2©       Ô€              ¤© °   °   ƒ<                          ªª    E  €   @  
+ 	À l                                                                                                             2©       Ô€              ¤© °   °   ƒ<                €          ªª    E  €   @  
 
- 	À l                                                                                                             åª       Ô€              ¬ °   °   ƒ<                �          ªª    E  €   @  
+ 	À l                                                                                                             åª       Ô€              ¬ °   °   ƒ<                           ªª    E  €   @  
 
- 	À l                                                                                                             ŠÞ F   F   €€  ÿÿÿÿÿÿ          p J¥5     è    Œ$0H`l
- Ä.è4.è4mesh       ª F   F   €€  ÿÿÿÿÿÿ          p ñÔ5     è    Œ$0H`l
- z5è¥5è4mesh       Ÿ F   F   €€  ÿÿÿÿÿÿ          p Ke6     è    Œ$0H`l
- ¥5è/è4mesh       ð         Ô€              Ï  °   °   ƒ<                           ªª    E  €   @  
+ 	À l                                                                                                             ŠÞ F   F   €€  ÿÿÿÿÿÿ          �J¥5     è    Œ$0H`l
+ Ä.è4.è4mesh       ª F   F   €€  ÿÿÿÿÿÿ          ñÔ5     è    Œ$0H`l
+ z5è¥5è4mesh       Ÿ F   F   €€  ÿÿÿÿÿÿ           Ke6     è    Œ$0H`l
+ ¥5è/è4mesh       ð         Ô€              Ï  °   °   ƒ<                           ªª    E  €   @  
 
-À 	 l                                                                                                             ß        Ô€              6  °   °   ƒ<                           ªª    E  €   @  
+À 	 l                                                                                                             ß        Ô€              6  °   °   ƒ<                           ªª    E  €   @  
 
-À 	 l                                                                                                             w        Ô€              ¦  °   °   ƒ<                �          ªª    E  €   @  
+À 	 l                                                                                                             w        Ô€              ¦  °   °   ƒ<                          ªª    E  €   @  
 
-À 	 l                                                                                                             M        Ô€                 °   °   ƒ<                           ªª    E  €   @  
+À 	 l                                                                                                             M        Ô€                 °   °   ƒ<                           ªª    E  €   @  
 
- 	À l                                                                                                             °        Ô€              4  °   °   ƒ<                0          ªª    E  €   @  
+ 	À l                                                                                                             °        Ô€              4  °   °   ƒ<                °          ªª    E  €   @  
 
  	À l                                                                                                             u	        Ô€              ¤
-  °   °   ƒ<                °          ªª    E  €   @  
+  °   °   ƒ<                0          ªª    E  €   @  
 
- 	À l                                                                                                             j=  F   F   €€  ÿÿÿÿÿÿ          € jF=     è    Œ$0H`l
- e6èÕ5è4mesh       Šm  F   F   €€  ÿÿÿÿÿÿ          € v=     è    Œ$0H`l
- =èF=è4mesh       ãý  F   F   €€  ÿÿÿÿÿÿ          € k>     è    Œ$0H`l
- F=è·6è4mesh       ó E   E   Ð€  ÿÿÿÿÿÿ          @  D%              ˆ      ÿÿÿÿÿÿ           ö  ?   ?   Ð€<                °  E           ˆ                     !       Ô€              ¤"       Ô€              # ?   ?   Ð€<                Ð  E         ˆ  –                  &#       Ô€              ê# ?   ?   Ðˆ<                À  E           ˆ                     ú#       Ô€              V% E   E   Ð€  ÿÿÿÿÿÿ          Ð  D%            ˆ  p   ÿÿÿÿÿÿ           &       Ô€              ’& ?   ?   Ð€<                à  E         ˆ  –                  ¢&       Ô€              ÁŸ E   E   Ð€  ÿÿÿÿÿÿ          P  D%              ˆ      ÿÿÿÿÿÿ           m¡ ?   ?   Ðˆ<                à  E           ˆ                     }¡       Ô€              m¢ E   E   Ð€  ÿÿÿÿÿÿ          ð  D%            ˆ  h   ÿÿÿÿÿÿ           £       Ô€              Ž£ ?   ?   Ð€<                   E         ˆ  –                  ž£       Ô€              v¤ ?   ?   Ðˆ<                ð  E           ˆ                     †¤       Ô€              \¥ ?   ?   Ð€<                  E         ˆ  –                  l¥       Ô€              ¢       Ô€              ?£ °   °   ƒ<                           ªª    E  €   @  
+ 	À l                                                                                                             j=  F   F   €€  ÿÿÿÿÿÿ          ÀjF=     è    Œ$0H`l
+ e6èÕ5è4mesh       Šm  F   F   €€  ÿÿÿÿÿÿ          @v=     è    Œ$0H`l
+ =èF=è4mesh       ãý  F   F   €€  ÿÿÿÿÿÿ          0k>     è    Œ$0H`l
+ F=è·6è4mesh       ó E   E   Ð€  ÿÿÿÿÿÿ          Ð  D%              ˆ      ÿÿÿÿÿÿ           ö  ?   ?   Ð€<                @  E           ˆ                     !       Ô€              ¤"       Ô€              # ?   ?   Ð€<                `  E         ˆ  –                  &#       Ô€              ê# ?   ?   Ðˆ<                P  E           ˆ                     ú#       Ô€              V% E   E   Ð€  ÿÿÿÿÿÿ          `  D%            ˆ  p   ÿÿÿÿÿÿ           &       Ô€              ’& ?   ?   Ð€<                p  E         ˆ  –                  ¢&       Ô€              ÁŸ E   E   Ð€  ÿÿÿÿÿÿ          à  D%              ˆ      ÿÿÿÿÿÿ           m¡ ?   ?   Ðˆ<                p  E           ˆ                     }¡       Ô€              m¢ E   E   Ð€  ÿÿÿÿÿÿ          €  D%            ˆ  h   ÿÿÿÿÿÿ           £       Ô€              Ž£ ?   ?   Ð€<                �  E         ˆ  –                  ž£       Ô€              v¤ ?   ?   Ðˆ<                €  E           ˆ                     †¤       Ô€              \¥ ?   ?   Ð€<                   E         ˆ  –                  l¥       Ô€              ¢       Ô€              ?£ °   °   ƒ<                °          ªª    E  €   @  
 
-À 	 l                                                                                                             O£       Ô€              ¦£ °   °   ƒ<                `          ªª    E  €   @  
+À 	 l                                                                                                             O£       Ô€              ¦£ °   °   ƒ<                ð          ªª    E  €   @  
 
-À 	 l                                                                                                             ç¤       Ô€              ¦ °   °   ƒ<                          ªª    E  €   @  
+À 	 l                                                                                                             ç¤       Ô€              ¦ °   °   ƒ<                           ªª    E  €   @  
 
-À 	 l                                                                                                             m§       Ô€              ”¨ °   °   ƒ<                           ªª    E  €   @  
+À 	 l                                                                                                             m§       Ô€              ”¨ °   °   ƒ<                °          ªª    E  €   @  
 
- 	À l                                                                                                             ¤¨       Ô€              û¨ °   °   ƒ<                p          ªª    E  €   @  
+ 	À l                                                                                                             ¤¨       Ô€              û¨ °   °   ƒ<                           ªª    E  €   @  
 
- 	À l                                                                                                             <ª       Ô€              k« °   °   ƒ<                0          ªª    E  €   @  
+ 	À l                                                                                                             <ª       Ô€              k« °   °   ƒ<                À          ªª    E  €   @  
 
- 	À l                                                                                                             ŠÞ F   F   €€  ÿÿÿÿÿÿ          � ŠçD     è    Œ$0H`l
- >èv=è4mesh       ª F   F   €€  ÿÿÿÿÿÿ          � 1E     è    Œ$0H`l
- ½DèèDè4mesh       Ÿ F   F   €€  ÿÿÿÿÿÿ          � ‹§E     è    Œ$0H`l
+ 	À l                                                                                                             ŠÞ F   F   €€  ÿÿÿÿÿÿ          ŠçD     è    Œ$0H`l
+ >èv=è4mesh       ª F   F   €€  ÿÿÿÿÿÿ          Ð1E     è    Œ$0H`l
+ ½DèèDè4mesh       Ÿ F   F   €€  ÿÿÿÿÿÿ          À‹§E     è    Œ$0H`l
  èDèX>è4mesh    
\ No newline at end of file
diff -Naur ns-3.19/src/mesh/test/dot11s/hwmp-proactive-regression-test-3-1.pcap ns-3.20/src/mesh/test/dot11s/hwmp-proactive-regression-test-3-1.pcap
--- ns-3.19/src/mesh/test/dot11s/hwmp-proactive-regression-test-3-1.pcap	2014-06-17 10:34:00.451636561 -0700
+++ ns-3.20/src/mesh/test/dot11s/hwmp-proactive-regression-test-3-1.pcap	2014-06-17 10:33:13.807996625 -0700
@@ -1,98 +1,98 @@
-ÔÃ²¡          ÿÿ  i         <   <   €€  ÿÿÿÿÿÿ            ¦      è    Œ$0H`l 4mesh        0  R   R   Ð€<                   J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          õ        Ô€               ›  P   P   Ð€<                  J     Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬  9 7          «        Ô€               œ  R   R   Ð€<                  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          ¬        Ô€               ú  P   P   Ð€<                 J     Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          »        Ô€               Ò=  <   <   €€  ÿÿÿÿÿÿ            j=      è    Œ$0H`l 4mesh        ô=  R   R   Ð€<                   J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          ¹>        Ô€               _?  P   P   Ð€<                  J     Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬  9 7          Æ?  R   R   Ðˆ<                   J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          mA        Ô€               ÎA  R   R   Ðˆ<                   J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          “B        Ô€               9C  P   P   Ð€<                  J    Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          IC        Ô€               D  R   R   Ð€<                0  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          /D        Ô€               ˜D  P   P   Ð€<                0 J    Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          YE        Ô€               ]  F   F   €€  ÿÿÿÿÿÿ            ]      è    Œ$0H`l
-  è= è4mesh        h©  E   E   Ð€  ÿÿÿÿÿÿ          @   D%              ˆ      ÿÿÿÿÿÿ            Š©  ?   ?   Ð€<                @   E           ˆ                      lª  ?   ?   Ðˆ<                @   E           ˆ                      E«  ?   ?   Ðˆ<                @   E           ˆ                      í«        Ô€               Ü¬        Ô€               +­  E   E   Ð€  ÿÿÿÿÿÿ          P   D%            ˆ  ˜   ÿÿÿÿÿÿ            .®  ?   ?   Ð€<                    E           ˆ                      >®        Ô€               Œ®  ?   ?   Ð€<                `   E         ˆ  –                   4¯        Ô€               ø¯  E   E   Ð€  ÿÿÿÿÿÿ          0   D%            ˆ  .  ÿÿÿÿÿÿ            5) E   E   Ð€  ÿÿÿÿÿÿ          P   D%              ˆ      ÿÿÿÿÿÿ            W) ?   ?   Ð€<                p   E           ˆ                       *       Ô€               B* ?   ?   Ðˆ<                p   E           ˆ                      ë*       Ô€               :+ E   E   Ð€  ÿÿÿÿÿÿ          €   D%            ˆ  š   ÿÿÿÿÿÿ            <, ?   ?   Ð€<                @   E           ˆ                      L,       Ô€               ›, ?   ?   Ð€<                �   E         ˆ  –                   D-       Ô€               . E   E   Ð€  ÿÿÿÿÿÿ          P   D%            ˆ  0  ÿÿÿÿÿÿ            6´ A   A   €€  ÿÿÿÿÿÿ           Æ³     è    Œ$0H`l ] è4mesh        ß F   F   €€  ÿÿÿÿÿÿ           ŠÞ     è    Œ$0H`l
- ý è] è4mesh        1 F   F   €€  ÿÿÿÿÿÿ           1     è    Œ$0H`l
- ´èßè4mesh         A   A   €€  ÿÿÿÿÿÿ            æT     è    Œ$0H`l è4mesh       â=  F   F   €€  ÿÿÿÿÿÿ            ª     è    Œ$0H`l
- Ÿèè4mesh       m  F   F   €€  ÿÿÿÿÿÿ            Q¯     è    Œ$0H`l
- Uè€è4mesh       6´ A   A   €€  ÿÿÿÿÿÿ          0 ö     è    Œ$0H`l ¯è4mesh       ß F   F   €€  ÿÿÿÿÿÿ          0 Ê      è    Œ$0H`l
- @è¯è4mesh       1 F   F   €€  ÿÿÿÿÿÿ          0 qP     è    Œ$0H`l
- öè!è4mesh         A   A   €€  ÿÿÿÿÿÿ          @ &—     è    Œ$0H`l Pè4mesh       â=  F   F   €€  ÿÿÿÿÿÿ          @ êÁ     è    Œ$0H`l
- áèPè4mesh       m  F   F   €€  ÿÿÿÿÿÿ          @ ‘ñ     è    Œ$0H`l
- —èÂè4mesh       èd E   E   Ð€  ÿÿÿÿÿÿ          `   D%              ˆ      ÿÿÿÿÿÿ           
-e ?   ?   Ð€<                    E           ˆ                     ²e       Ô€              ³f ?   ?   Ðˆ<                    E           ˆ                     \g       Ô€              &h       Ô€              uh E   E   Ð€  ÿÿÿÿÿÿ          °   D%            ˆ  ¢   ÿÿÿÿÿÿ           xi ?   ?   Ð€<                `   E           ˆ                     ˆi       Ô€              Öi ?   ?   Ð€<                À   E         ˆ  –                  j       Ô€              Bk E   E   Ð€  ÿÿÿÿÿÿ          p   D%            ˆ  8  ÿÿÿÿÿÿ           µä E   E   Ð€  ÿÿÿÿÿÿ          p   D%              ˆ      ÿÿÿÿÿÿ           ×ä ?   ?   Ð€<                Ð   E           ˆ                     €å       Ô€              °å ?   ?   Ðˆ<                Ð   E           ˆ                     Yæ       Ô€              ¨æ E   E   Ð€  ÿÿÿÿÿÿ          à   D%            ˆ    ÿÿÿÿÿÿ           ªç ?   ?   Ð€<                €   E           ˆ                     ºç       Ô€              	è ?   ?   Ð€<                ð   E         ˆ  –                  âè ?   ?   Ðˆ<                ð   E         ˆ  –                  ‹é       Ô€              Nê E   E   Ð€  ÿÿÿÿÿÿ          �   D%            ˆ  ¢  ÿÿÿÿÿÿ           ˆ¥ L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ            ªª           
+ÔÃ²¡          ÿÿ  i         <   <   €€  ÿÿÿÿÿÿ            ¦      è    Œ$0H`l 4mesh        0  R   R   Ð€<                   J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          õ        Ô€               ›  P   P   Ð€<                 J     Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬  9 7          «        Ô€               œ  R   R   Ð€<                   J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          ¬        Ô€               ú  P   P   Ð€<                 J     Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          »        Ô€               Ò=  <   <   €€  ÿÿÿÿÿÿ            j=      è    Œ$0H`l 4mesh        ô=  R   R   Ð€<                   J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          ¹>        Ô€               _?  P   P   Ð€<                 J     Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬  9 7          Æ?  R   R   Ðˆ<                   J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          mA        Ô€               ÎA  R   R   Ðˆ<                   J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          “B        Ô€               9C  P   P   Ð€<                0 J    Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          IC        Ô€               D  R   R   Ð€<                @  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          /D        Ô€               ˜D  P   P   Ð€<                0 J    Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          YE        Ô€               ]  F   F   €€  ÿÿÿÿÿÿ          @ ]      è    Œ$0H`l
+  è= è4mesh        h©  E   E   Ð€  ÿÿÿÿÿÿ          P   D%              ˆ      ÿÿÿÿÿÿ            Š©  ?   ?   Ð€<                P   E           ˆ                      lª  ?   ?   Ðˆ<                P   E           ˆ                      E«  ?   ?   Ðˆ<                P   E           ˆ                      í«        Ô€               Ü¬        Ô€               +­  E   E   Ð€  ÿÿÿÿÿÿ          `   D%            ˆ  ˜   ÿÿÿÿÿÿ            .®  ?   ?   Ð€<                0   E           ˆ                      >®        Ô€               Œ®  ?   ?   Ð€<                p   E         ˆ  –                   4¯        Ô€               ø¯  E   E   Ð€  ÿÿÿÿÿÿ          @   D%            ˆ  .  ÿÿÿÿÿÿ            5) E   E   Ð€  ÿÿÿÿÿÿ          `   D%              ˆ      ÿÿÿÿÿÿ            W) ?   ?   Ð€<                €   E           ˆ                       *       Ô€               B* ?   ?   Ðˆ<                €   E           ˆ                      ë*       Ô€               :+ E   E   Ð€  ÿÿÿÿÿÿ          �   D%            ˆ  š   ÿÿÿÿÿÿ            <, ?   ?   Ð€<                P   E           ˆ                      L,       Ô€               ›, ?   ?   Ð€<                    E         ˆ  –                   D-       Ô€               . E   E   Ð€  ÿÿÿÿÿÿ          `   D%            ˆ  0  ÿÿÿÿÿÿ            6´ A   A   €€  ÿÿÿÿÿÿ          p Æ³     è    Œ$0H`l ] è4mesh        ß F   F   €€  ÿÿÿÿÿÿ          p ŠÞ     è    Œ$0H`l
+ ý è] è4mesh        1 F   F   €€  ÿÿÿÿÿÿ          ° 1     è    Œ$0H`l
+ ´èßè4mesh         A   A   €€  ÿÿÿÿÿÿ          € æT     è    Œ$0H`l è4mesh       â=  F   F   €€  ÿÿÿÿÿÿ          € ª     è    Œ$0H`l
+ Ÿèè4mesh       m  F   F   €€  ÿÿÿÿÿÿ          À Q¯     è    Œ$0H`l
+ Uè€è4mesh       6´ A   A   €€  ÿÿÿÿÿÿ          � ö     è    Œ$0H`l ¯è4mesh       ß F   F   €€  ÿÿÿÿÿÿ          � Ê      è    Œ$0H`l
+ @è¯è4mesh       1 F   F   €€  ÿÿÿÿÿÿ          Ð qP     è    Œ$0H`l
+ öè!è4mesh         A   A   €€  ÿÿÿÿÿÿ            &—     è    Œ$0H`l Pè4mesh       â=  F   F   €€  ÿÿÿÿÿÿ            êÁ     è    Œ$0H`l
+ áèPè4mesh       m  F   F   €€  ÿÿÿÿÿÿ          à ‘ñ     è    Œ$0H`l
+ —èÂè4mesh       èd E   E   Ð€  ÿÿÿÿÿÿ          °   D%              ˆ      ÿÿÿÿÿÿ           
+e ?   ?   Ð€<                ð   E           ˆ                     ²e       Ô€              ³f ?   ?   Ðˆ<                ð   E           ˆ                     \g       Ô€              &h       Ô€              uh E   E   Ð€  ÿÿÿÿÿÿ             D%            ˆ  ¢   ÿÿÿÿÿÿ           xi ?   ?   Ð€<                °   E           ˆ                     ˆi       Ô€              Öi ?   ?   Ð€<                  E         ˆ  –                  j       Ô€              Bk E   E   Ð€  ÿÿÿÿÿÿ          À   D%            ˆ  8  ÿÿÿÿÿÿ           µä E   E   Ð€  ÿÿÿÿÿÿ          À   D%              ˆ      ÿÿÿÿÿÿ           ×ä ?   ?   Ð€<                   E           ˆ                     €å       Ô€              °å ?   ?   Ðˆ<                   E           ˆ                     Yæ       Ô€              ¨æ E   E   Ð€  ÿÿÿÿÿÿ          0  D%            ˆ    ÿÿÿÿÿÿ           ªç ?   ?   Ð€<                Ð   E           ˆ                     ºç       Ô€              	è ?   ?   Ð€<                @  E         ˆ  –                  âè ?   ?   Ðˆ<                @  E         ˆ  –                  ‹é       Ô€              Nê E   E   Ð€  ÿÿÿÿÿÿ          à   D%            ˆ  ¢  ÿÿÿÿÿÿ           ˆ¥ L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿð           ªª           
 ÿÿÿÿÿÿ
-       ³¥ L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ          ªª           
+       ³¥ L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿP         ªª           
 ÿÿÿÿÿÿ
-       Þ¦ L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ€          ªª           
+       Þ¦ L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿÐ          ªª           
 ÿÿÿÿÿÿ
-       (ª       Ô€              « L   L   ƒ<                �           ªª           
+       (ª       Ô€              « L   L   ƒ<                à           ªª           
      
-       +«       Ô€              ‚« L   L   ƒ<                          ªª           
+       +«       Ô€              ‚« L   L   ƒ<                `          ªª           
      
-       ?¬       Ô€              n­ °   °   ƒ<                °            ªª    E  €    @  
+       ?¬       Ô€              n­ °   °   ƒ<                            ªª    E  €    @  
 
-À 	 l                                                                                                             ~­       Ô€              ® °   °   ƒ<                           ªª    E  €    @  
+À 	 l                                                                                                             ~­       Ô€              ® °   °   ƒ<                p          ªª    E  €    @  
 
-À 	 l                                                                                                             L¯       Ô€              {° °   °   ƒ<                            ªª    E  €    @  
+À 	 l                                                                                                             L¯       Ô€              {° °   °   ƒ<                ð           ªª    E  €    @  
 
-À 	 l                                                                                                             6´ A   A   €€  ÿÿÿÿÿÿ          P F8&     è    Œ$0H`l òè4mesh       Ï L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ°          ªª           
+À 	 l                                                                                                             6´ A   A   €€  ÿÿÿÿÿÿ          F8&     è    Œ$0H`l òè4mesh       Ï L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ          ªª           
 ÿÿÿÿÿÿ
-       @Ï L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ0         ªª           
+       @Ï L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ€         ªª           
 ÿÿÿÿÿÿ
-       lÐ L   L   ƒ<                À            ªª           
+       lÐ L   L   ƒ<                            ªª           
      
-       |Ð       Ô€              ÜÐ L   L   ƒ<                @          ªª           
+       |Ð       Ô€              ÜÐ L   L   ƒ<                �          ªª           
      
-       ˜Ñ       Ô€              ”Ò L   L   ƒ<                À           ªª           
+       ˜Ñ       Ô€              ”Ò L   L   ƒ<                          ªª           
      
-       RÓ L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿÐ          ªª           
+       RÓ L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ0         ªª           
 ÿÿÿÿÿÿ
-       �Ö       Ô€              ë× °   °   ƒ<                Ð           ªª    E  €    @  
+       �Ö       Ô€              ë× °   °   ƒ<                           ªª    E  €    @  
 
- 	À l                                                                                                             û×       Ô€              RØ °   °   ƒ<                P          ªª    E  €    @  
+ 	À l                                                                                                             û×       Ô€              RØ °   °   ƒ<                           ªª    E  €    @  
 
- 	À l                                                                                                             ’Ù       Ô€              ß F   F   €€  ÿÿÿÿÿÿ          P 
+ 	À l                                                                                                             ’Ù       Ô€              ß F   F   €€  ÿÿÿÿÿÿ          0
 c&     è    Œ$0H`l
- ‚èòè4mesh       1 F   F   €€  ÿÿÿÿÿÿ          P ±’&     è    Œ$0H`l
- 8&èc&è4mesh         °   °   ƒ<                à            ªª    E  €   @  
+ ‚èòè4mesh       1 F   F   €€  ÿÿÿÿÿÿ          °±’&     è    Œ$0H`l
+ 8&èc&è4mesh         °   °   ƒ<                @           ªª    E  €   @  
 
-À 	 l                                                                                                                     Ô€              k  °   °   ƒ<                `          ªª    E  €   @  
+À 	 l                                                                                                                     Ô€              k  °   °   ƒ<                À          ªª    E  €   @  
 
-À 	 l                                                                                                             «        Ô€              Ú  °   °   ƒ<                à           ªª    E  €   @  
+À 	 l                                                                                                             «        Ô€              Ú  °   °   ƒ<                @          ªª    E  €   @  
 
-À 	 l                                                                                                             ¼        Ô€              ô	  °   °   ƒ<                ð           ªª    E  €   @  
+À 	 l                                                                                                             ¼        Ô€              ô	  °   °   ƒ<                P          ªª    E  €   @  
 
  	À l                                                                                                             
         Ô€              [
-  °   °   ƒ<                p          ªª    E  €   @  
+  °   °   ƒ<                Ð          ªª    E  €   @  
 
- 	À l                                                                                                             ›        Ô€                A   A   €€  ÿÿÿÿÿÿ          ` fÙ-     è    Œ$0H`l “&è4mesh       â=  F   F   €€  ÿÿÿÿÿÿ          ` *.     è    Œ$0H`l
- #'è“&è4mesh       m  F   F   €€  ÿÿÿÿÿÿ          ` Ñ3.     è    Œ$0H`l
- Ù-è.è4mesh       $¢ °   °   ƒ<                ð            ªª    E  €   @  
+ 	À l                                                                                                             ›        Ô€                A   A   €€  ÿÿÿÿÿÿ          PfÙ-     è    Œ$0H`l “&è4mesh       â=  F   F   €€  ÿÿÿÿÿÿ          `*.     è    Œ$0H`l
+ #'è“&è4mesh       m  F   F   €€  ÿÿÿÿÿÿ          àÑ3.     è    Œ$0H`l
+ Ù-è.è4mesh       $¢ °   °   ƒ<                `           ªª    E  €   @  
 
-À 	 l                                                                                                             4¢       Ô€              ‹¢ °   °   ƒ<                €          ªª    E  €   @  
+À 	 l                                                                                                             4¢       Ô€              ‹¢ °   °   ƒ<                ð          ªª    E  €   @  
 
-À 	 l                                                                                                             {£       Ô€              ª¤ °   °   ƒ<                           ªª    E  €   @  
+À 	 l                                                                                                             {£       Ô€              ª¤ °   °   ƒ<                p          ªª    E  €   @  
 
-À 	 l                                                                                                             _©       Ô€              ©ª °   °   ƒ<                          ªª    E  €   @  
+À 	 l                                                                                                             _©       Ô€              ©ª °   °   ƒ<                €          ªª    E  €   @  
 
- 	À l                                                                                                             ¹ª       Ô€              « °   °   ƒ<                �          ªª    E  €   @  
+ 	À l                                                                                                             ¹ª       Ô€              « °   °   ƒ<                           ªª    E  €   @  
 
- 	À l                                                                                                             P¬       Ô€              6´ A   A   €€  ÿÿÿÿÿÿ          p †z5     è    Œ$0H`l 4.è4mesh       ß F   F   €€  ÿÿÿÿÿÿ          p J¥5     è    Œ$0H`l
- Ä.è4.è4mesh       1 F   F   €€  ÿÿÿÿÿÿ          p ñÔ5     è    Œ$0H`l
- z5è¥5è4mesh       ´   °   °   ƒ<                            ªª    E  €   @  
+ 	À l                                                                                                             P¬       Ô€              6´ A   A   €€  ÿÿÿÿÿÿ          p†z5     è    Œ$0H`l 4.è4mesh       ß F   F   €€  ÿÿÿÿÿÿ          �J¥5     è    Œ$0H`l
+ Ä.è4.è4mesh       1 F   F   €€  ÿÿÿÿÿÿ          ñÔ5     è    Œ$0H`l
+ z5è¥5è4mesh       ´   °   °   ƒ<                €           ªª    E  €   @  
 
-À 	 l                                                                                                             Ä         Ô€                °   °   ƒ<                           ªª    E  €   @  
+À 	 l                                                                                                             Ä         Ô€                °   °   ƒ<                           ªª    E  €   @  
 
-À 	 l                                                                                                                     Ô€              :  °   °   ƒ<                           ªª    E  €   @  
+À 	 l                                                                                                                     Ô€              :  °   °   ƒ<                           ªª    E  €   @  
 
-À 	 l                                                                                                             Ý        Ô€              9	  °   °   ƒ<                0          ªª    E  €   @  
+À 	 l                                                                                                             Ý        Ô€              9	  °   °   ƒ<                °          ªª    E  €   @  
 
- 	À l                                                                                                             I	        Ô€               	  °   °   ƒ<                °          ªª    E  €   @  
+ 	À l                                                                                                             I	        Ô€               	  °   °   ƒ<                0          ªª    E  €   @  
 
  	À l                                                                                                             à
-        Ô€                A   A   €€  ÿÿÿÿÿÿ          € ¦=     è    Œ$0H`l Õ5è4mesh       â=  F   F   €€  ÿÿÿÿÿÿ          € jF=     è    Œ$0H`l
- e6èÕ5è4mesh       m  F   F   €€  ÿÿÿÿÿÿ          € v=     è    Œ$0H`l
- =èF=è4mesh       h  E   E   Ð€  ÿÿÿÿÿÿ          @  D%              ˆ      ÿÿÿÿÿÿ           Š  ?   ?   Ð€<                À  E           ˆ                     2!       Ô€              �! ?   ?   Ðˆ<                À  E           ˆ                     S#       Ô€              ~# ?   ?   Ðˆ<                À  E           ˆ                     &$       Ô€              á$ E   E   Ð€  ÿÿÿÿÿÿ          Ð  D%            ˆ  p   ÿÿÿÿÿÿ           È% ?   ?   Ð€<                  E           ˆ                     Ø%       Ô€              && ?   ?   Ð€<                à  E         ˆ  –                  Ï&       Ô€              ’' E   E   Ð€  ÿÿÿÿÿÿ             D%            ˆ  Ø   ÿÿÿÿÿÿ           5  E   E   Ð€  ÿÿÿÿÿÿ          P  D%              ˆ      ÿÿÿÿÿÿ           W  ?   ?   Ð€<                ð  E           ˆ                     ª¡       Ô€              ù¡ E   E   Ð€  ÿÿÿÿÿÿ             D%            ˆ  ±   ÿÿÿÿÿÿ           ß¢ ?   ?   Ð€<                0  E           ˆ                     ï¢       Ô€              ß£ E   E   Ð€  ÿÿÿÿÿÿ          @  D%            ˆ    ÿÿÿÿÿÿ           
-¤ ?   ?   Ðˆ<                ð  E           ˆ                     ³¤       Ô€              ð¤ ?   ?   Ð€<                  E         ˆ  –                  ˜¥       Ô€              Ô¡ °   °   ƒ<                P           ªª    E  €   @  
+        Ô€                A   A   €€  ÿÿÿÿÿÿ          �¦=     è    Œ$0H`l Õ5è4mesh       â=  F   F   €€  ÿÿÿÿÿÿ          ÀjF=     è    Œ$0H`l
+ e6èÕ5è4mesh       m  F   F   €€  ÿÿÿÿÿÿ          @v=     è    Œ$0H`l
+ =èF=è4mesh       h  E   E   Ð€  ÿÿÿÿÿÿ          Ð  D%              ˆ      ÿÿÿÿÿÿ           Š  ?   ?   Ð€<                P  E           ˆ                     2!       Ô€              �! ?   ?   Ðˆ<                P  E           ˆ                     S#       Ô€              ~# ?   ?   Ðˆ<                P  E           ˆ                     &$       Ô€              á$ E   E   Ð€  ÿÿÿÿÿÿ          `  D%            ˆ  p   ÿÿÿÿÿÿ           È% ?   ?   Ð€<                   E           ˆ                     Ø%       Ô€              && ?   ?   Ð€<                p  E         ˆ  –                  Ï&       Ô€              ’' E   E   Ð€  ÿÿÿÿÿÿ          °  D%            ˆ  Ø   ÿÿÿÿÿÿ           5  E   E   Ð€  ÿÿÿÿÿÿ          à  D%              ˆ      ÿÿÿÿÿÿ           W  ?   ?   Ð€<                €  E           ˆ                     ª¡       Ô€              ù¡ E   E   Ð€  ÿÿÿÿÿÿ          �  D%            ˆ  ±   ÿÿÿÿÿÿ           ß¢ ?   ?   Ð€<                À  E           ˆ                     ï¢       Ô€              ß£ E   E   Ð€  ÿÿÿÿÿÿ          Ð  D%            ˆ    ÿÿÿÿÿÿ           
+¤ ?   ?   Ðˆ<                €  E           ˆ                     ³¤       Ô€              ð¤ ?   ?   Ð€<                   E         ˆ  –                  ˜¥       Ô€              Ô¡ °   °   ƒ<                à           ªª    E  €   @  
 
-À 	 l                                                                                                             ä¡       Ô€              ;¢ °   °   ƒ<                           ªª    E  €   @  
+À 	 l                                                                                                             ä¡       Ô€              ;¢ °   °   ƒ<                °          ªª    E  €   @  
 
-À 	 l                                                                                                             {£       Ô€              ª¤ °   °   ƒ<                `          ªª    E  €   @  
+À 	 l                                                                                                             {£       Ô€              ª¤ °   °   ƒ<                ð          ªª    E  €   @  
 
-À 	 l                                                                                                             Ñ¨       Ô€               ª °   °   ƒ<                p          ªª    E  €   @  
+À 	 l                                                                                                             Ñ¨       Ô€               ª °   °   ƒ<                           ªª    E  €   @  
 
- 	À l                                                                                                             ª       Ô€              gª °   °   ƒ<                0          ªª    E  €   @  
+ 	À l                                                                                                             ª       Ô€              gª °   °   ƒ<                À          ªª    E  €   @  
 
- 	À l                                                                                                             §«       Ô€              6´ A   A   €€  ÿÿÿÿÿÿ          � Æ¼D     è    Œ$0H`l v=è4mesh       ß F   F   €€  ÿÿÿÿÿÿ          � ŠçD     è    Œ$0H`l
- >èv=è4mesh       1 F   F   €€  ÿÿÿÿÿÿ          � 1E     è    Œ$0H`l
+ 	À l                                                                                                             §«       Ô€              6´ A   A   €€  ÿÿÿÿÿÿ          ðÆ¼D     è    Œ$0H`l v=è4mesh       ß F   F   €€  ÿÿÿÿÿÿ          ŠçD     è    Œ$0H`l
+ >èv=è4mesh       1 F   F   €€  ÿÿÿÿÿÿ          Ð1E     è    Œ$0H`l
  ½DèèDè4mesh    
\ No newline at end of file
diff -Naur ns-3.19/src/mesh/test/dot11s/hwmp-proactive-regression-test-4-1.pcap ns-3.20/src/mesh/test/dot11s/hwmp-proactive-regression-test-4-1.pcap
--- ns-3.19/src/mesh/test/dot11s/hwmp-proactive-regression-test-4-1.pcap	2014-06-17 10:34:00.451636561 -0700
+++ ns-3.20/src/mesh/test/dot11s/hwmp-proactive-regression-test-4-1.pcap	2014-06-17 10:33:13.808996618 -0700
@@ -1,58 +1,58 @@
-ÔÃ²¡          ÿÿ  i       ¦  <   <   €€  ÿÿÿÿÿÿ            ¦      è    Œ$0H`l 4mesh        ¸  R   R   Ð€<                   J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          È        Ô€                 P   P   Ð€<                  J     Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬  9 7          ×        Ô€                 R   R   Ð€<                  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          Ø        Ô€               ~  P   P   Ð€<                 J     Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          Ž        Ô€               |>  R   R   Ð€<                   J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          O@  R   R   Ðˆ<                   J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          VB  R   R   Ðˆ<                   J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          uC        Ô€               \D        Ô€               E  P   P   Ð€<                0 J    Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          Š]  F   F   €€  ÿÿÿÿÿÿ            ]      è    Œ$0H`l
-  è= è4mesh        ö©  ?   ?   Ð€<                @   E           ˆ                      Øª  ?   ?   Ðˆ<                @   E           ˆ                      ±«  ?   ?   Ðˆ<                @   E           ˆ                      Ÿ­  E   E   Ð€  ÿÿÿÿÿÿ          P   D%            ˆ  ˜   ÿÿÿÿÿÿ            Á­  ?   ?   Ð€<                    E           ˆ                      j®        Ô€               ø®  ?   ?   Ð€<                `   E         ˆ  –                   „¯  E   E   Ð€  ÿÿÿÿÿÿ          0   D%            ˆ  .  ÿÿÿÿÿÿ            Ã) ?   ?   Ð€<                p   E           ˆ                      ®* ?   ?   Ðˆ<                p   E           ˆ                      ®+ E   E   Ð€  ÿÿÿÿÿÿ          €   D%            ˆ  š   ÿÿÿÿÿÿ            Ð+ ?   ?   Ð€<                @   E           ˆ                      y,       Ô€               - ?   ?   Ð€<                �   E         ˆ  –                   “- E   E   Ð€  ÿÿÿÿÿÿ          P   D%            ˆ  0  ÿÿÿÿÿÿ            Æ³ A   A   €€  ÿÿÿÿÿÿ           Æ³     è    Œ$0H`l ] è4mesh        ª F   F   €€  ÿÿÿÿÿÿ           1     è    Œ$0H`l
- ´èßè4mesh       ¦  A   A   €€  ÿÿÿÿÿÿ            æT     è    Œ$0H`l è4mesh       Šm  F   F   €€  ÿÿÿÿÿÿ            Q¯     è    Œ$0H`l
- Uè€è4mesh       Æ³ A   A   €€  ÿÿÿÿÿÿ          0 ö     è    Œ$0H`l ¯è4mesh       ª F   F   €€  ÿÿÿÿÿÿ          0 qP     è    Œ$0H`l
- öè!è4mesh       ¦  A   A   €€  ÿÿÿÿÿÿ          @ &—     è    Œ$0H`l Pè4mesh       Šm  F   F   €€  ÿÿÿÿÿÿ          @ ‘ñ     è    Œ$0H`l
- —èÂè4mesh       ve ?   ?   Ð€<                    E           ˆ                     g ?   ?   Ðˆ<                    E           ˆ                     êh E   E   Ð€  ÿÿÿÿÿÿ          °   D%            ˆ  ¢   ÿÿÿÿÿÿ           i ?   ?   Ð€<                `   E           ˆ                     ´i       Ô€              Bj ?   ?   Ð€<                À   E         ˆ  –                  Îj E   E   Ð€  ÿÿÿÿÿÿ          p   D%            ˆ  8  ÿÿÿÿÿÿ           Cå ?   ?   Ð€<                Ð   E           ˆ                     æ ?   ?   Ðˆ<                Ð   E           ˆ                     ç E   E   Ð€  ÿÿÿÿÿÿ          à   D%            ˆ    ÿÿÿÿÿÿ           >ç ?   ?   Ð€<                €   E           ˆ                     çç       Ô€              uè ?   ?   Ð€<                ð   E         ˆ  –                  Né ?   ?   Ðˆ<                ð   E         ˆ  –                  Úé E   E   Ð€  ÿÿÿÿÿÿ          �   D%            ˆ  ¢  ÿÿÿÿÿÿ           ¥ L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ            ªª           
+ÔÃ²¡          ÿÿ  i       ¦  <   <   €€  ÿÿÿÿÿÿ            ¦      è    Œ$0H`l 4mesh        ¸  R   R   Ð€<                   J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          È        Ô€                 P   P   Ð€<                 J     Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬  9 7          ×        Ô€                 R   R   Ð€<                   J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          Ø        Ô€               ~  P   P   Ð€<                 J     Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          Ž        Ô€               |>  R   R   Ð€<                   J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          O@  R   R   Ðˆ<                   J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          VB  R   R   Ðˆ<                   J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          uC        Ô€               \D        Ô€               E  P   P   Ð€<                0 J    Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          Š]  F   F   €€  ÿÿÿÿÿÿ          @ ]      è    Œ$0H`l
+  è= è4mesh        ö©  ?   ?   Ð€<                P   E           ˆ                      Øª  ?   ?   Ðˆ<                P   E           ˆ                      ±«  ?   ?   Ðˆ<                P   E           ˆ                      Ÿ­  E   E   Ð€  ÿÿÿÿÿÿ          `   D%            ˆ  ˜   ÿÿÿÿÿÿ            Á­  ?   ?   Ð€<                0   E           ˆ                      j®        Ô€               ø®  ?   ?   Ð€<                p   E         ˆ  –                   „¯  E   E   Ð€  ÿÿÿÿÿÿ          @   D%            ˆ  .  ÿÿÿÿÿÿ            Ã) ?   ?   Ð€<                €   E           ˆ                      ®* ?   ?   Ðˆ<                €   E           ˆ                      ®+ E   E   Ð€  ÿÿÿÿÿÿ          �   D%            ˆ  š   ÿÿÿÿÿÿ            Ð+ ?   ?   Ð€<                P   E           ˆ                      y,       Ô€               - ?   ?   Ð€<                    E         ˆ  –                   “- E   E   Ð€  ÿÿÿÿÿÿ          `   D%            ˆ  0  ÿÿÿÿÿÿ            Æ³ A   A   €€  ÿÿÿÿÿÿ          p Æ³     è    Œ$0H`l ] è4mesh        ª F   F   €€  ÿÿÿÿÿÿ          ° 1     è    Œ$0H`l
+ ´èßè4mesh       ¦  A   A   €€  ÿÿÿÿÿÿ          € æT     è    Œ$0H`l è4mesh       Šm  F   F   €€  ÿÿÿÿÿÿ          À Q¯     è    Œ$0H`l
+ Uè€è4mesh       Æ³ A   A   €€  ÿÿÿÿÿÿ          � ö     è    Œ$0H`l ¯è4mesh       ª F   F   €€  ÿÿÿÿÿÿ          Ð qP     è    Œ$0H`l
+ öè!è4mesh       ¦  A   A   €€  ÿÿÿÿÿÿ            &—     è    Œ$0H`l Pè4mesh       Šm  F   F   €€  ÿÿÿÿÿÿ          à ‘ñ     è    Œ$0H`l
+ —èÂè4mesh       ve ?   ?   Ð€<                ð   E           ˆ                     g ?   ?   Ðˆ<                ð   E           ˆ                     êh E   E   Ð€  ÿÿÿÿÿÿ             D%            ˆ  ¢   ÿÿÿÿÿÿ           i ?   ?   Ð€<                °   E           ˆ                     ´i       Ô€              Bj ?   ?   Ð€<                  E         ˆ  –                  Îj E   E   Ð€  ÿÿÿÿÿÿ          À   D%            ˆ  8  ÿÿÿÿÿÿ           Cå ?   ?   Ð€<                   E           ˆ                     æ ?   ?   Ðˆ<                   E           ˆ                     ç E   E   Ð€  ÿÿÿÿÿÿ          0  D%            ˆ    ÿÿÿÿÿÿ           >ç ?   ?   Ð€<                Ð   E           ˆ                     çç       Ô€              uè ?   ?   Ð€<                @  E         ˆ  –                  Né ?   ?   Ðˆ<                @  E         ˆ  –                  Úé E   E   Ð€  ÿÿÿÿÿÿ          à   D%            ˆ  ¢  ÿÿÿÿÿÿ           ¥ L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿð           ªª           
 ÿÿÿÿÿÿ
-       3¦ L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ          ªª           
+       3¦ L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿP         ªª           
 ÿÿÿÿÿÿ
-       X«       Ô€              ¬ L   L   ƒ<                          ªª           
+       X«       Ô€              ¬ L   L   ƒ<                `          ªª           
      
-       ¬       Ô€              j¬ °   °   ƒ<                °            ªª    E  €    @  
+       ¬       Ô€              j¬ °   °   ƒ<                            ªª    E  €    @  
 
-À 	 l                                                                                                             ª­       Ô€              ¯ °   °   ƒ<                           ªª    E  €    @  
+À 	 l                                                                                                             ª­       Ô€              ¯ °   °   ƒ<                p          ªª    E  €    @  
 
-À 	 l                                                                                                             Æ³ A   A   €€  ÿÿÿÿÿÿ          P F8&     è    Œ$0H`l òè4mesh       ÀÏ L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ0         ªª           
+À 	 l                                                                                                             Æ³ A   A   €€  ÿÿÿÿÿÿ          F8&     è    Œ$0H`l òè4mesh       ÀÏ L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ€         ªª           
 ÿÿÿÿÿÿ
-       ëÏ L   L   ƒ<                À            ªª           
+       ëÏ L   L   ƒ<                            ªª           
      
-       ¨Ð       Ô€              \Ñ L   L   ƒ<                @          ªª           
+       ¨Ð       Ô€              \Ñ L   L   ƒ<                �          ªª           
      
-       ÒÒ L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿÐ          ªª           
+       ÒÒ L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ0         ªª           
 ÿÿÿÿÿÿ
-       'Ø       Ô€              VÙ °   °   ƒ<                P          ªª    E  €    @  
+       'Ø       Ô€              VÙ °   °   ƒ<                           ªª    E  €    @  
 
- 	À l                                                                                                             fÙ       Ô€              ª F   F   €€  ÿÿÿÿÿÿ          P ±’&     è    Œ$0H`l
- 8&èc&è4mesh           °   °   ƒ<                à            ªª    E  €   @  
+ 	À l                                                                                                             fÙ       Ô€              ª F   F   €€  ÿÿÿÿÿÿ          °±’&     è    Œ$0H`l
+ 8&èc&è4mesh           °   °   ƒ<                @           ªª    E  €   @  
 
-À 	 l                                                                                                             @        Ô€              o  °   °   ƒ<                `          ªª    E  €   @  
+À 	 l                                                                                                             @        Ô€              o  °   °   ƒ<                À          ªª    E  €   @  
 
 À 	 l                                                                                                             0
-        Ô€              _  °   °   ƒ<                p          ªª    E  €   @  
+        Ô€              _  °   °   ƒ<                Ð          ªª    E  €   @  
 
- 	À l                                                                                                             o        Ô€              ¦  A   A   €€  ÿÿÿÿÿÿ          ` fÙ-     è    Œ$0H`l “&è4mesh       Šm  F   F   €€  ÿÿÿÿÿÿ          ` Ñ3.     è    Œ$0H`l
- Ù-è.è4mesh        ¡ °   °   ƒ<                ð            ªª    E  €   @  
+ 	À l                                                                                                             o        Ô€              ¦  A   A   €€  ÿÿÿÿÿÿ          PfÙ-     è    Œ$0H`l “&è4mesh       Šm  F   F   €€  ÿÿÿÿÿÿ          àÑ3.     è    Œ$0H`l
+ Ù-è.è4mesh        ¡ °   °   ƒ<                `           ªª    E  €   @  
 
-À 	 l                                                                                                             `¢       Ô€              ?£ °   °   ƒ<                €          ªª    E  €   @  
+À 	 l                                                                                                             `¢       Ô€              ?£ °   °   ƒ<                ð          ªª    E  €   @  
 
-À 	 l                                                                                                             åª       Ô€              ¬ °   °   ƒ<                �          ªª    E  €   @  
+À 	 l                                                                                                             åª       Ô€              ¬ °   °   ƒ<                           ªª    E  €   @  
 
- 	À l                                                                                                             $¬       Ô€              Æ³ A   A   €€  ÿÿÿÿÿÿ          p †z5     è    Œ$0H`l 4.è4mesh       ª F   F   €€  ÿÿÿÿÿÿ          p ñÔ5     è    Œ$0H`l
- z5è¥5è4mesh           °   °   ƒ<                            ªª    E  €   @  
+ 	À l                                                                                                             $¬       Ô€              Æ³ A   A   €€  ÿÿÿÿÿÿ          p†z5     è    Œ$0H`l 4.è4mesh       ª F   F   €€  ÿÿÿÿÿÿ          ñÔ5     è    Œ$0H`l
+ z5è¥5è4mesh           °   °   ƒ<                €           ªª    E  €   @  
 
-À 	 l                                                                                                             ð         Ô€              Ï  °   °   ƒ<                           ªª    E  €   @  
+À 	 l                                                                                                             ð         Ô€              Ï  °   °   ƒ<                           ªª    E  €   @  
 
 À 	 l                                                                                                             u	        Ô€              ¤
-  °   °   ƒ<                °          ªª    E  €   @  
+  °   °   ƒ<                0          ªª    E  €   @  
 
  	À l                                                                                                             ´
-        Ô€              ¦  A   A   €€  ÿÿÿÿÿÿ          € ¦=     è    Œ$0H`l Õ5è4mesh       Šm  F   F   €€  ÿÿÿÿÿÿ          € v=     è    Œ$0H`l
- =èF=è4mesh       Ú  ?   ?   Ð€<                À  E           ˆ                     Ò! ?   ?   Ðˆ<                À  E           ˆ                     ê# ?   ?   Ðˆ<                À  E           ˆ                     V% E   E   Ð€  ÿÿÿÿÿÿ          Ð  D%            ˆ  p   ÿÿÿÿÿÿ           x% ?   ?   Ð€<                  E           ˆ                     &       Ô€              ’& ?   ?   Ð€<                à  E         ˆ  –                  ' E   E   Ð€  ÿÿÿÿÿÿ             D%            ˆ  Ø   ÿÿÿÿÿÿ           Ã  ?   ?   Ð€<                ð  E           ˆ                     m¢ E   E   Ð€  ÿÿÿÿÿÿ             D%            ˆ  ±   ÿÿÿÿÿÿ           �¢ ?   ?   Ð€<                0  E           ˆ                     £       Ô€              k£ E   E   Ð€  ÿÿÿÿÿÿ          @  D%            ˆ    ÿÿÿÿÿÿ           v¤ ?   ?   Ðˆ<                ð  E           ˆ                     \¥ ?   ?   Ð€<                  E         ˆ  –                   ¡ °   °   ƒ<                P           ªª    E  €   @  
+        Ô€              ¦  A   A   €€  ÿÿÿÿÿÿ          �¦=     è    Œ$0H`l Õ5è4mesh       Šm  F   F   €€  ÿÿÿÿÿÿ          @v=     è    Œ$0H`l
+ =èF=è4mesh       Ú  ?   ?   Ð€<                P  E           ˆ                     Ò! ?   ?   Ðˆ<                P  E           ˆ                     ê# ?   ?   Ðˆ<                P  E           ˆ                     V% E   E   Ð€  ÿÿÿÿÿÿ          `  D%            ˆ  p   ÿÿÿÿÿÿ           x% ?   ?   Ð€<                   E           ˆ                     &       Ô€              ’& ?   ?   Ð€<                p  E         ˆ  –                  ' E   E   Ð€  ÿÿÿÿÿÿ          °  D%            ˆ  Ø   ÿÿÿÿÿÿ           Ã  ?   ?   Ð€<                €  E           ˆ                     m¢ E   E   Ð€  ÿÿÿÿÿÿ          �  D%            ˆ  ±   ÿÿÿÿÿÿ           �¢ ?   ?   Ð€<                À  E           ˆ                     £       Ô€              k£ E   E   Ð€  ÿÿÿÿÿÿ          Ð  D%            ˆ    ÿÿÿÿÿÿ           v¤ ?   ?   Ðˆ<                €  E           ˆ                     \¥ ?   ?   Ð€<                   E         ˆ  –                   ¡ °   °   ƒ<                à           ªª    E  €   @  
 
-À 	 l                                                                                                             ¢       Ô€              ?£ °   °   ƒ<                           ªª    E  €   @  
+À 	 l                                                                                                             ¢       Ô€              ?£ °   °   ƒ<                °          ªª    E  €   @  
 
-À 	 l                                                                                                             <ª       Ô€              k« °   °   ƒ<                0          ªª    E  €   @  
+À 	 l                                                                                                             <ª       Ô€              k« °   °   ƒ<                À          ªª    E  €   @  
 
- 	À l                                                                                                             {«       Ô€              Æ³ A   A   €€  ÿÿÿÿÿÿ          � Æ¼D     è    Œ$0H`l v=è4mesh       ª F   F   €€  ÿÿÿÿÿÿ          � 1E     è    Œ$0H`l
+ 	À l                                                                                                             {«       Ô€              Æ³ A   A   €€  ÿÿÿÿÿÿ          ðÆ¼D     è    Œ$0H`l v=è4mesh       ª F   F   €€  ÿÿÿÿÿÿ          Ð1E     è    Œ$0H`l
  ½DèèDè4mesh    
\ No newline at end of file
diff -Naur ns-3.19/src/mesh/test/dot11s/hwmp-reactive-regression-test-0-1.pcap ns-3.20/src/mesh/test/dot11s/hwmp-reactive-regression-test-0-1.pcap
--- ns-3.19/src/mesh/test/dot11s/hwmp-reactive-regression-test-0-1.pcap	2014-06-17 10:34:00.453636546 -0700
+++ ns-3.20/src/mesh/test/dot11s/hwmp-reactive-regression-test-0-1.pcap	2014-06-17 10:33:13.810996602 -0700
@@ -1,132 +1,132 @@
-ÔÃ²¡          ÿÿ  i       }>  R   R   Ð€<                   J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          {?  R   R   Ðˆ<                   J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          ”@  R   R   Ðˆ<                   J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          ’A  R   R   Ðˆ<                   J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          ´B  R   R   Ðˆ<                   J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          ©C  R   R   Ðˆ<                   J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          °D  R   R   Ðˆ<                   J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          [Þ  R   R   Ð€<                  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          tß  R   R   Ðˆ<                  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          Ÿà  R   R   Ðˆ<                  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          ¸á  R   R   Ðˆ<                  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          ãâ  R   R   Ðˆ<                  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          óã  R   R   Ðˆ<                  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          å  R   R   Ðˆ<                  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          çå  2   2   Ð€<                  J 4mesh 7            Üý  A   A   €€  ÿÿÿÿÿÿ            ký      è    Œ$0H`l = è4mesh        þý  R   R   Ð€<                   J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          ÿ  R   R   Ðˆ<                   J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          '  R   R   Ðˆ<                   J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          R R   R   Ðˆ<                   J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          k R   R   Ðˆ<                   J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          Ÿ R   R   Ðˆ<                   J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          ” R   R   Ðˆ<                   J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          JO A   A   €€  ÿÿÿÿÿÿ            JO     è    Œ$0H`l ý è4mesh        eP R   R   Ð€<                0  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          uP       Ô€               ÃP P   P   Ð€<                 J     Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬  9 7          „Q       Ô€               Ü� R   R   Ð€<                   J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          ìž R   R   Ðˆ<                   J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          áŸ R   R   Ðˆ<                   J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          ñ  R   R   Ðˆ<                   J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          ¢ R   R   Ðˆ<                   J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          P£ R   R   Ðˆ<                   J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          W¤ R   R   Ðˆ<                   J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          î¥       Ô€               ¤ñ 2   2   Ð€<                @ J 4mesh 7           ´ñ       Ô€               ò 2   2   Ð€<                0 J 4mesh 7           Ýò 2   2   Ðˆ<                0 J 4mesh 7           vó       Ô€               �Ó R   R   Ð€<                P  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          ÆÕ R   R   Ðˆ<                P  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          Ø R   R   Ðˆ<                P  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          Ù R   R   Ðˆ<                P  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          !Ú R   R   Ðˆ<                P  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          üf A   A   €€  ÿÿÿÿÿÿ           ‹f     è    Œ$0H`lÒè4mesh        g R   R   Ð€<                @  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          %h R   R   Ðˆ<                @  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          i R   R   Ðˆ<                @  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          <j R   R   Ðˆ<                @  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          1k R   R   Ðˆ<                @  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          8l R   R   Ðˆ<                @  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          Hm R   R   Ðˆ<                @  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          {s R   R   Ð€<                `  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          ¯t R   R   Ðˆ<                `  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          Èu R   R   Ðˆ<                `  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          áv R   R   Ðˆ<                `  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          x R   R   Ðˆ<                `  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          áy R   R   Ðˆ<                `  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7           {       Ô€               jÐ A   A   €€  ÿÿÿÿÿÿ           jÐ     è    Œ$0H`lfè4mesh        …Ñ R   R   Ð€<                p  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          •Ñ       Ô€               ãÑ P   P   Ð€<                P J    Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬  9 7          ¤Ò       Ô€               ü	 R   R   Ð€<                `  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          	 R   R   Ðˆ<                `  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          7		 R   R   Ðˆ<                `  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          Y
-	 R   R   Ðˆ<                `  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          i	 R   R   Ðˆ<                `  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          p	 R   R   Ðˆ<                `  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          €	 R   R   Ðˆ<                `  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7           	 2   2   Ð€<                € J 4mesh 7           	       Ô€               Är	 2   2   Ð€<                � J 4mesh 7           Ôr	       Ô€               "s	 2   2   Ð€<                p J 4mesh 7           »s	       Ô€              …2  R   R   Ð€<                   J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7         ¤3        Ô€              ‹4        Ô€              15  P   P   Ð€<                ° J    Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬ 9 7         Ü¥  A   A   €€  ÿÿÿÿÿÿ            «ç     è    Œ$0H`ltè4mesh       þ¥  R   R   Ð€<                €  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7         Ã¦        Ô€              i§  P   P   Ð€<                À J    Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬ 9 7         y§        Ô€              P¨  R   R   Ð€<                Ð  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7         `¨        Ô€              À¨  P   P   Ð€<                � J    Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬ 9 7         �©        Ô€              JW A   A   €€  ÿÿÿÿÿÿ            Š™     è    Œ$0H`lèè4mesh       G F   F   €€  ÿÿÿÿÿÿ          0 Ëˆ     è    Œ$0H`l
-è™è4mesh       jø A   A   €€  ÿÿÿÿÿÿ          0 ª:     è    Œ$0H`l‰è4mesh       ¶  L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿà      
+ÔÃ²¡          ÿÿ  i       }>  R   R   Ð€<                   J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          {?  R   R   Ðˆ<                   J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          ”@  R   R   Ðˆ<                   J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          ’A  R   R   Ðˆ<                   J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          ´B  R   R   Ðˆ<                   J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          ©C  R   R   Ðˆ<                   J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          °D  R   R   Ðˆ<                   J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          [Þ  R   R   Ð€<                  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          tß  R   R   Ðˆ<                  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          Ÿà  R   R   Ðˆ<                  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          ¸á  R   R   Ðˆ<                  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          ãâ  R   R   Ðˆ<                  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          óã  R   R   Ðˆ<                  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          å  R   R   Ðˆ<                  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          çå  2   2   Ð€<                  J 4mesh 7            Üý  A   A   €€  ÿÿÿÿÿÿ          0 ký      è    Œ$0H`l = è4mesh        þý  R   R   Ð€<                   J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          ÿ  R   R   Ðˆ<                   J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          '  R   R   Ðˆ<                   J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          R R   R   Ðˆ<                   J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          k R   R   Ðˆ<                   J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          Ÿ R   R   Ðˆ<                   J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          ” R   R   Ðˆ<                   J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          JO A   A   €€  ÿÿÿÿÿÿ           JO     è    Œ$0H`l ý è4mesh        eP R   R   Ð€<                @  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          uP       Ô€               ÃP P   P   Ð€<                  J     Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬  9 7          „Q       Ô€               Ü� R   R   Ð€<                0  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          ìž R   R   Ðˆ<                0  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          áŸ R   R   Ðˆ<                0  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          ñ  R   R   Ðˆ<                0  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          ¢ R   R   Ðˆ<                0  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          P£ R   R   Ðˆ<                0  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          W¤ R   R   Ðˆ<                0  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          î¥       Ô€               ¤ñ 2   2   Ð€<                P J 4mesh 7           ´ñ       Ô€               ò 2   2   Ð€<                @ J 4mesh 7           Ýò 2   2   Ðˆ<                @ J 4mesh 7           vó       Ô€               �Ó R   R   Ð€<                `  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          ÆÕ R   R   Ðˆ<                `  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          Ø R   R   Ðˆ<                `  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          Ù R   R   Ðˆ<                `  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          !Ú R   R   Ðˆ<                `  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          üf A   A   €€  ÿÿÿÿÿÿ          p ‹f     è    Œ$0H`lÒè4mesh        g R   R   Ð€<                P  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          %h R   R   Ðˆ<                P  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          i R   R   Ðˆ<                P  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          <j R   R   Ðˆ<                P  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          1k R   R   Ðˆ<                P  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          8l R   R   Ðˆ<                P  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          Hm R   R   Ðˆ<                P  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          {s R   R   Ð€<                €  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          ¯t R   R   Ðˆ<                €  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          Èu R   R   Ðˆ<                €  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          áv R   R   Ðˆ<                €  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          x R   R   Ðˆ<                €  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          áy R   R   Ðˆ<                €  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7           {       Ô€               jÐ A   A   €€  ÿÿÿÿÿÿ          ` jÐ     è    Œ$0H`lfè4mesh        …Ñ R   R   Ð€<                �  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          •Ñ       Ô€               ãÑ P   P   Ð€<                p J    Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬  9 7          ¤Ò       Ô€               ü	 R   R   Ð€<                €  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          	 R   R   Ðˆ<                €  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          7		 R   R   Ðˆ<                €  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          Y
+	 R   R   Ðˆ<                €  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          i	 R   R   Ðˆ<                €  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          p	 R   R   Ðˆ<                €  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          €	 R   R   Ðˆ<                €  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7           	 2   2   Ð€<                  J 4mesh 7           	       Ô€               Är	 2   2   Ð€<                ° J 4mesh 7           Ôr	       Ô€               "s	 2   2   Ð€<                � J 4mesh 7           »s	       Ô€              …2  R   R   Ð€<                À  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7         ¤3        Ô€              ‹4        Ô€              15  P   P   Ð€<                Ð J    Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬ 9 7         Ü¥  A   A   €€  ÿÿÿÿÿÿ          à «ç     è    Œ$0H`ltè4mesh       þ¥  R   R   Ð€<                   J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7         Ã¦        Ô€              i§  P   P   Ð€<                ð J    Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬ 9 7         y§        Ô€              P¨  R   R   Ð€<                  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7         `¨        Ô€              À¨  P   P   Ð€<                ° J    Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬ 9 7         �©        Ô€              JW A   A   €€  ÿÿÿÿÿÿ          À Š™     è    Œ$0H`lèè4mesh       G F   F   €€  ÿÿÿÿÿÿ          Ëˆ     è    Œ$0H`l
+è™è4mesh       jø A   A   €€  ÿÿÿÿÿÿ          Ð ª:     è    Œ$0H`l‰è4mesh       ¶  L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ      
     ªª           
 
 ÿÿÿÿÿÿ
-       á  L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ       
+       á  L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿà      
     ªª           
 
 ÿÿÿÿÿÿ
-       °  E   E   Ð€  ÿÿÿÿÿÿ          °   D%              ˆ           
-           è  E   E   Ð€  ÿÿÿÿÿÿ          ð   D%            ˆ  –        
-           ]        Ô€              ë  ?   ?   Ð€<                   E         ˆ  Ž       
+       °  E   E   Ð€  ÿÿÿÿÿÿ          ð   D%              ˆ           
+           è  E   E   Ð€  ÿÿÿÿÿÿ          0  D%            ˆ  –        
+           ]        Ô€              ë  ?   ?   Ð€<                @  E         ˆ  Ž       
           û        Ô€              R  L   L   ƒ<                
-À            ªª           
+            ªª           
      
 
                 Ô€              º   L   L   ƒ<                
-          ªª           
+P          ªª           
      
 
-       ½'        Ô€              €(  `   `   ƒ<                      
+       ½'        Ô€              €(  `   `   ƒ<                `     
      ªª    E  0    @  
 
-À 	                              �(        Ô€              84  L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿÐ           ªª           
+À 	                              �(        Ô€              84  L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ          ªª           
 ÿÿÿÿÿÿ
-       d5  L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ0         ªª           
+       d5  L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿp         ªª           
 ÿÿÿÿÿÿ
-       ;        Ô€              Â;  L   L   ƒ<                @     
+       ;        Ô€              Â;  L   L   ƒ<                €     
      ªª           
 
      
        Ò;        Ô€              )<  `   `   ƒ<                
-à            ªª    E  0    @  
+            ªª    E  0    @  
 
  	À                              þ<        Ô€              	>  `   `   ƒ<                
-P          ªª    E  0    @  
+�          ªª    E  0    @  
 
- 	À                              ä¥  F   F   €€  ÿÿÿÿÿÿ          @ ë)     è    Œ$0H`l
-¶è™è4mesh       ÏU ,   ,   Ð€<                `  F                WW 2   2   Ð€<                pJ 4mesh 7          gW       Ô€              ¬W A   A   €€  ÿÿÿÿÿÿ          @ ÊÛ     è    Œ$0H`l*è4mesh       >X 2   2   Ð€<                ð J 4mesh 7          ×X       Ô€              ¶6 E   E   Ð€  ÿÿÿÿÿÿ             D%              ˆ           
-           ¢¤ E   E   Ð€  ÿÿÿÿÿÿ          €  D%         
-   ˆ  g                  ]E       Ô€              ÛE 2   2   Ð€<                �J 4mesh 7          ãG       Ô€              aH 2   2   Ð€<                 J 4mesh 7          jI       Ô€              jØ <   <   €€  ÿÿÿÿÿÿ          P ê\'     è    Œ$0H`l 4mesh       SÚ R   R   Ðˆ<                ° J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7         cÚ       Ô€              ±Ú P   P   Ð€<                J    Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬  9 7         rÛ       Ô€              ¯Û R   R   Ð€<                  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7         tÜ       Ô€              Þ P   P   Ðˆ<                ÀJ    Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬ 9 7         -Þ       Ô€              ¨&	 6   6   Ðˆ<                Ð  F              
-          ¸&	       Ô€              ¶– E   E   Ð€  ÿÿÿÿÿÿ          0  D%              ˆ           
-           î— E   E   Ð€  ÿÿÿÿÿÿ          à  D%            ˆ  ¼        
-           …2  R   R   Ð€<                ð J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7         ¤3        Ô€              l4        Ô€              ß5  P   P   Ðˆ<                 J    Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬ 9 7         äÍ  F   F   €€  ÿÿÿÿÿÿ          ` +”.     è    Œ$0H`l
-]'èø-è4mesh       J7 A   A   €€  ÿÿÿÿÿÿ          ` 
-þ.     è    Œ$0H`l”.è4mesh       o F   F   €€  ÿÿÿÿÿÿ          p K56     è    Œ$0H`l
-þ.è™5è4mesh       jØ A   A   €€  ÿÿÿÿÿÿ          p *Ÿ6     è    Œ$0H`l56è4mesh       vÔ	 E   E   Ð€  ÿÿÿÿÿÿ          @  D%              ˆ           
-           ®Õ	 E   E   Ð€  ÿÿÿÿÿÿ            D%            ˆ  ¼        
-           �Ù	       Ô€              Ú	 ?   ?   Ð€<                   E         ò  ^       
-          -Ú	       Ô€               Ü	       Ô€              .Ý	 ?   ?   Ð€<                0  E         ˆ  ^       
-          >Ý	       Ô€              Và	       Ô€              á	 `   `   ƒ<                @     
+ 	À                              ä¥  F   F   €€  ÿÿÿÿÿÿ           ë)     è    Œ$0H`l
+¶è™è4mesh       ÏU ,   ,   Ð€<                °  F                WW 2   2   Ð€<                ÀJ 4mesh 7          gW       Ô€              ¬W A   A   €€  ÿÿÿÿÿÿ          0ÊÛ     è    Œ$0H`l*è4mesh       >X 2   2   Ð€<                @J 4mesh 7          ×X       Ô€              ¶6 E   E   Ð€  ÿÿÿÿÿÿ          P  D%              ˆ           
+           ¢¤ E   E   Ð€  ÿÿÿÿÿÿ          Ð  D%         
+   ˆ  g                  ]E       Ô€              ÛE 2   2   Ð€<                àJ 4mesh 7          ãG       Ô€              aH 2   2   Ð€<                 J 4mesh 7          jI       Ô€              jØ <   <   €€  ÿÿÿÿÿÿ          `ê\'     è    Œ$0H`l 4mesh       SÚ R   R   Ðˆ<                 J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7         cÚ       Ô€              ±Ú P   P   Ð€<                pJ    Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬  9 7         rÛ       Ô€              ¯Û R   R   Ð€<                € J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7         tÜ       Ô€              Þ P   P   Ðˆ<                 J    Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬ 9 7         -Þ       Ô€              ¨&	 6   6   Ðˆ<                0  F              
+          ¸&	       Ô€              ¶– E   E   Ð€  ÿÿÿÿÿÿ          �  D%              ˆ           
+           î— E   E   Ð€  ÿÿÿÿÿÿ          @  D%            ˆ  ¼        
+           …2  R   R   Ð€<                P J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7         ¤3        Ô€              l4        Ô€              ß5  P   P   Ðˆ<                `J    Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬ 9 7         äÍ  F   F   €€  ÿÿÿÿÿÿ          p+”.     è    Œ$0H`l
+]'èø-è4mesh       J7 A   A   €€  ÿÿÿÿÿÿ           
+þ.     è    Œ$0H`l”.è4mesh       o F   F   €€  ÿÿÿÿÿÿ          €K56     è    Œ$0H`l
+þ.è™5è4mesh       jØ A   A   €€  ÿÿÿÿÿÿ          °*Ÿ6     è    Œ$0H`l56è4mesh       vÔ	 E   E   Ð€  ÿÿÿÿÿÿ          À  D%              ˆ           
+           ®Õ	 E   E   Ð€  ÿÿÿÿÿÿ          �  D%            ˆ  ¼        
+           �Ù	       Ô€              Ú	 ?   ?   Ð€<                   E         ò  ^       
+          -Ú	       Ô€               Ü	       Ô€              .Ý	 ?   ?   Ð€<                °  E         ˆ  ^       
+          >Ý	       Ô€              Và	       Ô€              á	 `   `   ƒ<                À     
      ªª    E  0   @  
 
 À 	                              )á	       Ô€              €á	 `   `   ƒ<                
-P           ªª    E  0   @  
+Ð           ªª    E  0   @  
 
  	À                              Uâ	       Ô€              *ã	 `   `   ƒ<                
-P          ªª    E  0   @  
+Ð          ªª    E  0   @  
 
  	À                              µå	       Ô€              “æ	 `   `   ‹<                
-P          ªª    E  0   @  
+Ð          ªª    E  0   @  
 
- 	À                              Úè	 `   `   ƒ<                `     
+ 	À                              Úè	 `   `   ƒ<                à     
      ªª    E  0   @  
 
 À 	                              êè	       Ô€              Aé	 `   `   ƒ<                
-`           ªª    E  0   @  
+à           ªª    E  0   @  
 
  	À                              ê	       Ô€              <ë	 `   `   ƒ<                
-p          ªª    E  0   @  
+ð          ªª    E  0   @  
 
  	À                              aí	 `   `   ‹<                
-p          ªª    E  0   @  
+ð          ªª    E  0   @  
 
  	À                              }ï	 `   `   ‹<                
-p          ªª    E  0   @  
+ð          ªª    E  0   @  
 
- 	À                              7õ	       Ô€              úõ	 `   `   ƒ<                €     
+ 	À                              7õ	       Ô€              úõ	 `   `   ƒ<                      
      ªª    E  0   @  
 
 À 	                              
 ö	       Ô€              aö	 `   `   ƒ<                
-p           ªª    E  0   @  
+ð           ªª    E  0   @  
 
  	À                              Zø	 `   `   ‹<                
-p           ªª    E  0   @  
+ð           ªª    E  0   @  
 
  	À                              /ù	       Ô€              òù	 `   `   ƒ<                
-�          ªª    E  0   @  
+          ªª    E  0   @  
 
  	À                              �û	 `   `   ‹<                
-�          ªª    E  0   @  
+          ªª    E  0   @  
 
  	À                              „þ	 `   `   ‹<                
-�          ªª    E  0   @  
+          ªª    E  0   @  
 
- 	À                              §        Ô€              j  `   `   ƒ<                      
+ 	À                              §        Ô€              j  `   `   ƒ<                      
      ªª    E  0   @  
 
 À 	                              z        Ô€              Ñ  `   `   ƒ<                
-€           ªª    E  0   @  
+            ªª    E  0   @  
 
  	À                              ¦        Ô€              �  `   `   ƒ<                
-°          ªª    E  0   @  
+0          ªª    E  0   @  
 
- 	À                              äÍ  F   F   €€  ÿÿÿÿÿÿ          € kÖ=     è    Œ$0H`l
-Ÿ6è:=è4mesh       J7 A   A   €€  ÿÿÿÿÿÿ          € J@>     è    Œ$0H`lÖ=è4mesh       ó¤       Ô€              ¶¥ `   `   ƒ<                À     
+ 	À                              äÍ  F   F   €€  ÿÿÿÿÿÿ          @kÖ=     è    Œ$0H`l
+Ÿ6è:=è4mesh       J7 A   A   €€  ÿÿÿÿÿÿ          J@>     è    Œ$0H`lÖ=è4mesh       ó¤       Ô€              ¶¥ `   `   ƒ<                P     
      ªª    E  0   @  
 
 À 	                              Æ¥       Ô€              ¦ `   `   ƒ<                
-�           ªª    E  0   @  
+            ªª    E  0   @  
 
  	À                              ò¦       Ô€              3¨ `   `   ƒ<                
-Ð          ªª    E  0   @  
+`          ªª    E  0   @  
 
- 	À                              æ¨       Ô€              \© ,   ,   Ð€<                à  F      
-          l©       Ô€              o F   F   €€  ÿÿÿÿÿÿ          � ‹wE     è    Œ$0H`l
-@>èÜDè4mesh       jØ A   A   €€  ÿÿÿÿÿÿ          � jáE     è    Œ$0H`lxEè4mesh       äÍ  F   F   €€  ÿÿÿÿÿÿ            «M     è    Œ$0H`l
-áEè}Lè4mesh       J7 A   A   €€  ÿÿÿÿÿÿ            Š‚M     è    Œ$0H`lMè4mesh       o F   F   €€  ÿÿÿÿÿÿ          ° Ë¹T     è    Œ$0H`l
-‚MèTè4mesh       jØ A   A   €€  ÿÿÿÿÿÿ          ° ª#U     è    Œ$0H`lºTè4mesh       äÍ  F   F   €€  ÿÿÿÿÿÿ          À ëZ\     è    Œ$0H`l
-$Uè¿[è4mesh       J7 A   A   €€  ÿÿÿÿÿÿ          À ÊÄ\     è    Œ$0H`l[\è4mesh       o F   F   €€  ÿÿÿÿÿÿ          Ð üc     è    Œ$0H`l
-Å\è`cè4mesh       jØ A   A   €€  ÿÿÿÿÿÿ          Ð êed     è    Œ$0H`lücè4mesh       äÍ  F   F   €€  ÿÿÿÿÿÿ          à +�k     è    Œ$0H`l
-fdèkè4mesh       J7 A   A   €€  ÿÿÿÿÿÿ          à 
-l     è    Œ$0H`l�kè4mesh       o F   F   €€  ÿÿÿÿÿÿ          ð K>s     è    Œ$0H`l
-lè¢rè4mesh       jØ A   A   €€  ÿÿÿÿÿÿ          ð *¨s     è    Œ$0H`l>sè4mesh       äÍ  F   F   €€  ÿÿÿÿÿÿ           kßz     è    Œ$0H`l
-lèCzè4mesh       ×5 2   2   Ð€<                ðJ 4mesh 7          ç5       Ô€              56 2   2   Ð€<                 J 4mesh 7          Î6       Ô€              J7 A   A   €€  ÿÿÿÿÿÿ           JI{     è    Œ$0H`lßzè4mesh       =8 R   R   Ð€<                  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7 	        M8       Ô€              ›8 2   2   Ð€<                °J 4mesh 7 	         d9 2   2   Ðˆ<                °J 4mesh 7 	         ý9       Ô€              < 2   2   Ðˆ<                J 4mesh 7	          #<       Ô€              Oø ,   ,   Ð€<                   F                ün A   A   €€  ÿÿÿÿÿÿ          ‹€‚     è    Œ$0H`lä�è4mesh       o R   R   Ð€<                À J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7         ão       Ô€              ‰p P   P   Ð€<                0J   	 Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬ 9 7
-         ™p       Ô€              ‹q R   R   Ð€<                @ J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7 
-        ›q       Ô€              éq P   P   Ð€<                ÐJ    Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬ 9 7 
-        ªr       Ô€              jÄ A   A   €€  ÿÿÿÿÿÿ          jÖ‚     è    Œ$0H`l€‚è4mesh    	   äÍ  F   F   €€  ÿÿÿÿÿÿ           «!Š     è    Œ$0H`l
-†‰è	Ö‚è4mesh    	   J# A   A   €€  ÿÿÿÿÿÿ           ŠwŠ     è    Œ$0H`l"Šè4mesh    	   o F   F   €€  ÿÿÿÿÿÿ          0ËÂ‘     è    Œ$0H`l
-'‘è	wŠè4mesh    	   jÄ A   A   €€  ÿÿÿÿÿÿ          0ª’     è    Œ$0H`lÃ‘è4mesh    
\ No newline at end of file
+ 	À                              æ¨       Ô€              \© ,   ,   Ð€<                p  F      
+          l©       Ô€              o F   F   €€  ÿÿÿÿÿÿ          €‹wE     è    Œ$0H`l
+@>èÜDè4mesh       jØ A   A   €€  ÿÿÿÿÿÿ          0jáE     è    Œ$0H`lxEè4mesh       äÍ  F   F   €€  ÿÿÿÿÿÿ          �«M     è    Œ$0H`l
+áEè}Lè4mesh       J7 A   A   €€  ÿÿÿÿÿÿ          @Š‚M     è    Œ$0H`lMè4mesh       o F   F   €€  ÿÿÿÿÿÿ           Ë¹T     è    Œ$0H`l
+‚MèTè4mesh       jØ A   A   €€  ÿÿÿÿÿÿ          Pª#U     è    Œ$0H`lºTè4mesh       äÍ  F   F   €€  ÿÿÿÿÿÿ          °ëZ\     è    Œ$0H`l
+$Uè¿[è4mesh       J7 A   A   €€  ÿÿÿÿÿÿ          `ÊÄ\     è    Œ$0H`l[\è4mesh       o F   F   €€  ÿÿÿÿÿÿ          Àüc     è    Œ$0H`l
+Å\è`cè4mesh       jØ A   A   €€  ÿÿÿÿÿÿ          pêed     è    Œ$0H`lücè4mesh       äÍ  F   F   €€  ÿÿÿÿÿÿ          Ð+�k     è    Œ$0H`l
+fdèkè4mesh       J7 A   A   €€  ÿÿÿÿÿÿ          €
+l     è    Œ$0H`l�kè4mesh       o F   F   €€  ÿÿÿÿÿÿ          àK>s     è    Œ$0H`l
+lè¢rè4mesh       jØ A   A   €€  ÿÿÿÿÿÿ          �*¨s     è    Œ$0H`l>sè4mesh       äÍ  F   F   €€  ÿÿÿÿÿÿ          ðkßz     è    Œ$0H`l
+lèCzè4mesh       ×5 2   2   Ð€<                 J 4mesh 7          ç5       Ô€              56 2   2   Ð€<                 J 4mesh 7          Î6       Ô€              J7 A   A   €€  ÿÿÿÿÿÿ          °JI{     è    Œ$0H`lßzè4mesh       =8 R   R   Ð€<                 J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7 	        M8       Ô€              ›8 2   2   Ð€<                ÀJ 4mesh 7 	         d9 2   2   Ðˆ<                ÀJ 4mesh 7 	         ý9       Ô€              < 2   2   Ðˆ<                 J 4mesh 7	          #<       Ô€              Oø ,   ,   Ð€<                0  F                ün A   A   €€  ÿÿÿÿÿÿ          @‹€‚     è    Œ$0H`lä�è4mesh       o R   R   Ð€<                Ð J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7         ão       Ô€              ‰p P   P   Ð€<                PJ   	 Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬ 9 7
+         ™p       Ô€              ‹q R   R   Ð€<                ` J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7 
+        ›q       Ô€              éq P   P   Ð€<                àJ    Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬ 9 7 
+        ªr       Ô€              jÄ A   A   €€  ÿÿÿÿÿÿ          ðjÖ‚     è    Œ$0H`l€‚è4mesh    	   äÍ  F   F   €€  ÿÿÿÿÿÿ          p«!Š     è    Œ$0H`l
+†‰è	Ö‚è4mesh    	   J# A   A   €€  ÿÿÿÿÿÿ           ŠwŠ     è    Œ$0H`l"Šè4mesh    	   o F   F   €€  ÿÿÿÿÿÿ          €ËÂ‘     è    Œ$0H`l
+'‘è	wŠè4mesh    	   jÄ A   A   €€  ÿÿÿÿÿÿ          ª’     è    Œ$0H`lÃ‘è4mesh    
\ No newline at end of file
diff -Naur ns-3.19/src/mesh/test/dot11s/hwmp-reactive-regression-test-1-1.pcap ns-3.20/src/mesh/test/dot11s/hwmp-reactive-regression-test-1-1.pcap
--- ns-3.19/src/mesh/test/dot11s/hwmp-reactive-regression-test-1-1.pcap	2014-06-17 10:34:00.454636538 -0700
+++ ns-3.20/src/mesh/test/dot11s/hwmp-reactive-regression-test-1-1.pcap	2014-06-17 10:33:13.811996595 -0700
@@ -1,197 +1,195 @@
-ÔÃ²¡          ÿÿ  i       Ò=  <   <   €€  ÿÿÿÿÿÿ            j=      è    Œ$0H`l 4mesh        ô=  R   R   Ð€<                   J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          ò>  R   R   Ðˆ<                   J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          @  R   R   Ðˆ<                   J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          	A  R   R   Ðˆ<                   J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          +B  R   R   Ðˆ<                   J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7           C  R   R   Ðˆ<                   J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          'D  R   R   Ðˆ<                   J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          4^  R   R   Ð€<                   J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          S_        Ô€               ÒÝ  R   R   Ð€<                  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          ëÞ  R   R   Ðˆ<                  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          à  R   R   Ðˆ<                  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          /á  R   R   Ðˆ<                  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          Zâ  R   R   Ðˆ<                  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          jã  R   R   Ðˆ<                  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          zä  R   R   Ðˆ<                  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          Šå  2   2   Ð€<                  J 4mesh 7            #æ        Ô€               ký  A   A   €€  ÿÿÿÿÿÿ            ký      è    Œ$0H`l = è4mesh         2   2   Ð€<                  J 4mesh 7           	       Ô€               »O A   A   €€  ÿÿÿÿÿÿ            JO     è    Œ$0H`l ý è4mesh        ÝO R   R   Ð€<                0  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          ¢P       Ô€               HQ P   P   Ð€<                 J     Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬  9 7          XQ       Ô€               ±¥ 2   2   Ð€<                @ J 4mesh 7            Á¥       Ô€               Hñ 2   2   Ð€<                @ J 4mesh 7           áñ       Ô€               :ó 2   2   Ðˆ<                0 J 4mesh 7           Jó       Ô€               òÒ <   <   €€  ÿÿÿÿÿÿ           ŠÒ     è    Œ$0H`l 4mesh        Ó R   R   Ð€<                P  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          Ô R   R   Ðˆ<                P  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          =Õ R   R   Ðˆ<                P  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          MÖ R   R   Ðˆ<                P  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          x× R   R   Ðˆ<                P  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          Ø R   R   Ðˆ<                P  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          ˜Ù R   R   Ðˆ<                P  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          Tÿ R   R   Ð€<                P  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          s        Ô€               ‹f A   A   €€  ÿÿÿÿÿÿ           ‹f     è    Œ$0H`lÒè4mesh        òr R   R   Ð€<                `  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          &t R   R   Ðˆ<                `  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          ?u R   R   Ðˆ<                `  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          Xv R   R   Ðˆ<                `  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          Œw R   R   Ðˆ<                `  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          »x P   P   Ð€<                p J    Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          Xy R   R   Ðˆ<                `  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          z       Ô€               Ãz P   P   Ð€<                € J    Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          Óz       Ô€               ÛÐ A   A   €€  ÿÿÿÿÿÿ           jÐ     è    Œ$0H`lfè4mesh        ýÐ R   R   Ð€<                p  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          ÂÑ       Ô€               hÒ P   P   Ð€<                P J    Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬  9 7          xÒ       Ô€               Ã	 2   2   Ð€<                € J 4mesh 7           \	       Ô€               Ú	 2   2   Ð€<                  J 4mesh 7           ê	       Ô€               hr	 2   2   Ð€<                � J 4mesh 7           s	       Ô€               s	 2   2   Ð€<                p J 4mesh 7           �s	       Ô€              Ú1  A   A   €€  ÿÿÿÿÿÿ            ªs     è    Œ$0H`lþè4mesh       ü1  R   R   Ð€<                   J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7         Á2        Ô€              g3  P   P   Ð€<                ° J    Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬ 9 7         w3        Ô€              N4  R   R   Ð€<                À  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7         ^4        Ô€              ¬4  P   P   Ð€<                ° J    Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬ 9 7         m5        Ô€              k¥  A   A   €€  ÿÿÿÿÿÿ            «ç     è    Œ$0H`ltè4mesh       †¦  R   R   Ð€<                €  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7         –¦        Ô€              ä¦  P   P   Ð€<                À J    Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬ 9 7         ¥§        Ô€              Ç§  R   R   Ð€<                Ð  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7         Œ¨        Ô€              D©  P   P   Ð€<                � J    Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬ 9 7         T©        Ô€              »W A   A   €€  ÿÿÿÿÿÿ            Š™     è    Œ$0H`lèè4mesh       Ó F   F   €€  ÿÿÿÿÿÿ          0 Ê     è    Œ$0H`l
-¯èèè4mesh       ‹F F   F   €€  ÿÿÿÿÿÿ          0 Ëˆ     è    Œ$0H`l
-è™è4mesh       
-  L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿÐ      
+ÔÃ²¡          ÿÿ  i       Ò=  <   <   €€  ÿÿÿÿÿÿ            j=      è    Œ$0H`l 4mesh        ô=  R   R   Ð€<                   J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          ò>  R   R   Ðˆ<                   J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          @  R   R   Ðˆ<                   J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          	A  R   R   Ðˆ<                   J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          +B  R   R   Ðˆ<                   J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7           C  R   R   Ðˆ<                   J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          'D  R   R   Ðˆ<                   J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          4^  R   R   Ð€<                  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          S_        Ô€               ÒÝ  R   R   Ð€<                  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          ëÞ  R   R   Ðˆ<                  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          à  R   R   Ðˆ<                  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          /á  R   R   Ðˆ<                  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          Zâ  R   R   Ðˆ<                  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          jã  R   R   Ðˆ<                  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          zä  R   R   Ðˆ<                  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          Šå  2   2   Ð€<                  J 4mesh 7            #æ        Ô€               ký  A   A   €€  ÿÿÿÿÿÿ          0 ký      è    Œ$0H`l = è4mesh         2   2   Ð€<                0 J 4mesh 7           	       Ô€               »O A   A   €€  ÿÿÿÿÿÿ           JO     è    Œ$0H`l ý è4mesh        ÝO R   R   Ð€<                @  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          ¢P       Ô€               HQ P   P   Ð€<                  J     Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬  9 7          XQ       Ô€               ±¥ 2   2   Ð€<                P J 4mesh 7            Á¥       Ô€               Hñ 2   2   Ð€<                P J 4mesh 7           áñ       Ô€               :ó 2   2   Ðˆ<                @ J 4mesh 7           Jó       Ô€               òÒ <   <   €€  ÿÿÿÿÿÿ          ` ŠÒ     è    Œ$0H`l 4mesh        Ó R   R   Ð€<                `  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          Ô R   R   Ðˆ<                `  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          =Õ R   R   Ðˆ<                `  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          MÖ R   R   Ðˆ<                `  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          x× R   R   Ðˆ<                `  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          Ø R   R   Ðˆ<                `  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          ˜Ù R   R   Ðˆ<                `  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          Tÿ R   R   Ð€<                p  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          s        Ô€               ‹f A   A   €€  ÿÿÿÿÿÿ          p ‹f     è    Œ$0H`lÒè4mesh        òr R   R   Ð€<                €  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          &t R   R   Ðˆ<                €  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          ?u R   R   Ðˆ<                €  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          Xv R   R   Ðˆ<                €  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          Œw R   R   Ðˆ<                €  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          »x P   P   Ð€<                � J    Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          Xy R   R   Ðˆ<                €  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          z       Ô€               Ãz P   P   Ð€<                  J    Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          Óz       Ô€               ÛÐ A   A   €€  ÿÿÿÿÿÿ          ` jÐ     è    Œ$0H`lfè4mesh        ýÐ R   R   Ð€<                �  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          ÂÑ       Ô€               hÒ P   P   Ð€<                p J    Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬  9 7          xÒ       Ô€               Ã	 2   2   Ð€<                  J 4mesh 7           \	       Ô€               Ú	 2   2   Ð€<                À J 4mesh 7           ê	       Ô€               hr	 2   2   Ð€<                ° J 4mesh 7           s	       Ô€               s	 2   2   Ð€<                � J 4mesh 7           �s	       Ô€              Ú1  A   A   €€  ÿÿÿÿÿÿ          Ð ªs     è    Œ$0H`lþè4mesh       ü1  R   R   Ð€<                À  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7         Á2        Ô€              g3  P   P   Ð€<                à J    Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬ 9 7         w3        Ô€              N4  R   R   Ð€<                ð  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7         ^4        Ô€              ¬4  P   P   Ð€<                Ð J    Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬ 9 7         m5        Ô€              k¥  A   A   €€  ÿÿÿÿÿÿ          à «ç     è    Œ$0H`ltè4mesh       †¦  R   R   Ð€<                   J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7         –¦        Ô€              ä¦  P   P   Ð€<                ð J    Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬ 9 7         ¥§        Ô€              Ç§  R   R   Ð€<                  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7         Œ¨        Ô€              D©  P   P   Ð€<                ° J    Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬ 9 7         T©        Ô€              »W A   A   €€  ÿÿÿÿÿÿ          À Š™     è    Œ$0H`lèè4mesh       Ó F   F   €€  ÿÿÿÿÿÿ           Ê     è    Œ$0H`l
+¯èèè4mesh       ‹F F   F   €€  ÿÿÿÿÿÿ          Ëˆ     è    Œ$0H`l
+è™è4mesh         L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ     
     ªª           
 
 ÿÿÿÿÿÿ
-       5  L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿà      
+       6  L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ      
     ªª           
 
 ÿÿÿÿÿÿ
-       $  E   E   Ð€  ÿÿÿÿÿÿ          °   D%              ˆ           
-           s  E   E   Ð€  ÿÿÿÿÿÿ          ð   D%            ˆ  –        
-           «  E   E   Ð€  ÿÿÿÿÿÿ          à   D%            ˆ  j       
-           ’        Ô€                 ?   ?   Ð€<                ð   E         ˆ  Â       
-          0        Ô€              ~  ?   ?   Ð€<                   E         ˆ  Ž       
-          '        Ô€              Ò  L   L   ƒ<                
-À            ªª           
+       %  E   E   Ð€  ÿÿÿÿÿÿ          ð   D%              ˆ           
+           t  E   E   Ð€  ÿÿÿÿÿÿ          0  D%            ˆ  –        
+           ¬  E   E   Ð€  ÿÿÿÿÿÿ             D%            ˆ  j       
+           “        Ô€              !  ?   ?   Ð€<                0  E         ˆ  Â       
+          1        Ô€                ?   ?   Ð€<                @  E         ˆ  Ž       
+          (        Ô€              Ó  L   L   ƒ<                
+            ªª           
      
 
-       â        Ô€              9   L   L   ƒ<                
-          ªª           
+       ã        Ô€              :   L   L   ƒ<                
+P          ªª           
      
 
-       ö         Ô€              ¡!  L   L   ƒ<                
-           ªª           
+       ÷         Ô€              ¢!  L   L   ƒ<                
+@          ªª           
      
 
-       ½&        Ô€              €'  `   `   ƒ<                     
+       ¾&        Ô€              �'  `   `   ƒ<                P     
      ªª    E  0    @  
 
-À 	                              �'        Ô€              ç'  `   `   ƒ<                      
+À 	                              ‘'        Ô€              è'  `   `   ƒ<                `     
      ªª    E  0    @  
 
-À 	                              ¼(        Ô€              â1  F   F   €€  ÿÿÿÿÿÿ          @ êµ     è    Œ$0H`l
-Pè‰è4mesh       ¸4  L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿÐ           ªª           
+À 	                              ½(        Ô€              â1  F   F   €€  ÿÿÿÿÿÿ          `êµ     è    Œ$0H`l
+Pè‰è4mesh       ¹4  L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ          ªª           
 ÿÿÿÿÿÿ
-       ã4  L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ0         ªª           
+       ä4  L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿp         ªª           
 ÿÿÿÿÿÿ
-       6  L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ          ªª           
+       6  L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿp         ªª           
 ÿÿÿÿÿÿ
-       /:        Ô€              Ú:  L   L   ƒ<                0     
+       0:        Ô€              Û:  L   L   ƒ<                €     
      ªª           
 
      
-       ê:        Ô€              A;  L   L   ƒ<                @     
+       ë:        Ô€              B;  L   L   ƒ<                €     
      ªª           
 
      
-       þ;        Ô€              Á<  `   `   ƒ<                
-à            ªª    E  0    @  
+       ÿ;        Ô€              Â<  `   `   ƒ<                
+            ªª    E  0    @  
 
- 	À                              Ñ<        Ô€              p=  `   `   ƒ<                
-P          ªª    E  0    @  
+ 	À                              Ò<        Ô€              q=  `   `   ƒ<                
+�          ªª    E  0    @  
 
- 	À                              E>        Ô€              ?  `   `   ƒ<                
-@          ªª    E  0    @  
+ 	À                              F>        Ô€              	?  `   `   ƒ<                
+�          ªª    E  0    @  
 
- 	À                              k¥  F   F   €€  ÿÿÿÿÿÿ          @ ë)     è    Œ$0H`l
-¶è™è4mesh       {U ,   ,   Ð€<                `  F                V       Ô€              ‚V ,   ,   Ð€<                P  F                ûV 2   2   Ð€<                pJ 4mesh 7          ”W       Ô€              X A   A   €€  ÿÿÿÿÿÿ          @ ÊÛ     è    Œ$0H`l*è4mesh       ›X 2   2   Ð€<                ð J 4mesh 7          «X       Ô€              *7 E   E   Ð€  ÿÿÿÿÿÿ             D%              ˆ           
-           Þ£ E   E   Ð€  ÿÿÿÿÿÿ          `  D%         
-   ˆ  Â                  -¤ E   E   Ð€  ÿÿÿÿÿÿ          €  D%         
-   ˆ  g                  Ó F   F   €€  ÿÿÿÿÿÿ          P 
+ 	À                              k¥  F   F   €€  ÿÿÿÿÿÿ           ë)     è    Œ$0H`l
+¶è™è4mesh       {U ,   ,   Ð€<                °  F                V       Ô€              ‚V ,   ,   Ð€<                   F                ûV 2   2   Ð€<                ÀJ 4mesh 7          ”W       Ô€              X A   A   €€  ÿÿÿÿÿÿ          0ÊÛ     è    Œ$0H`l*è4mesh       ›X 2   2   Ð€<                @J 4mesh 7          «X       Ô€              +7 E   E   Ð€  ÿÿÿÿÿÿ          P  D%              ˆ           
+           ß£ E   E   Ð€  ÿÿÿÿÿÿ          °  D%         
+   ˆ  Â                  .¤ E   E   Ð€  ÿÿÿÿÿÿ          Ð  D%         
+   ˆ  g                  Ó F   F   €€  ÿÿÿÿÿÿ          À
 W&     è    Œ$0H`l
-òè‰è4mesh        E 2   2   Ð€<                pJ 4mesh 7          0E       Ô€              ~E 2   2   Ð€<                �J 4mesh 7          F       Ô€              ‹F A   A   €€  ÿÿÿÿÿÿ          P Ë&     è    Œ$0H`lW&è4mesh       ¦G R   R   Ð€<                € J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7         ¶G       Ô€              H 2   2   Ð€<                 J 4mesh 7          �H       Ô€              -I 2   2   Ð€<                �J 4mesh 7          =I       Ô€              ÓØ <   <   €€  ÿÿÿÿÿÿ          P ê\'     è    Œ$0H`l 4mesh       õØ R   R   Ð€<                ° J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7         ËÙ R   R   Ðˆ<                ° J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7         �Ú       Ô€              6Û P   P   Ð€<                J    Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬  9 7         FÛ       Ô€              8Ü R   R   Ð€<                  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7         HÜ       Ô€              –Ü P   P   Ð€<                ÀJ    Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬ 9 7         ™Ý P   P   Ðˆ<                ÀJ    Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬ 9 7         ZÞ       Ô€              {%	 6   6   Ð€<                Ð  F              
-          H&	 6   6   Ðˆ<                Ð  F              
-          å&	       Ô€              ÞÃ
- E   E   Ð€  ÿÿÿÿÿÿ             D%         
-   ˆ  Â                  *— E   E   Ð€  ÿÿÿÿÿÿ          0  D%              ˆ           
-           y— E   E   Ð€  ÿÿÿÿÿÿ          à  D%            ˆ  ¼        
-           Ú1  A   A   €€  ÿÿÿÿÿÿ          ` *ø-     è    Œ$0H`l“&è4mesh       ü1  R   R   Ð€<                ð J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7         Á2        Ô€              g3  P   P   Ð€<                °J    Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬ 9 7         w3        Ô€              /4  R   R   Ð€<                À J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7         ?4        Ô€              �4  P   P   Ð€<                 J    Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬ 9 7         Z5  P   P   Ðˆ<                 J    Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬ 9 7         6        Ô€              kÍ  F   F   €€  ÿÿÿÿÿÿ          ` +”.     è    Œ$0H`l
-]'èø-è4mesh       »7 A   A   €€  ÿÿÿÿÿÿ          ` 
-þ.     è    Œ$0H`l”.è4mesh       Ó F   F   €€  ÿÿÿÿÿÿ          p J™5     è    Œ$0H`l
-4.è”.è4mesh       ‹n F   F   €€  ÿÿÿÿÿÿ          p K56     è    Œ$0H`l
-þ.è™5è4mesh       ÛØ A   A   €€  ÿÿÿÿÿÿ          p *Ÿ6     è    Œ$0H`l56è4mesh       êÔ	 E   E   Ð€  ÿÿÿÿÿÿ          @  D%              ˆ           
-           9Õ	 E   E   Ð€  ÿÿÿÿÿÿ            D%            ˆ  ¼        
-           .×	 E   E   Ð€  ÿÿÿÿÿÿ          à  D%            ˆ  (       
-           RÙ	 ?   ?   Ðˆ<                Ð  E           ò  Â       
-          bÙ	       Ô€              °Ù	 ?   ?   Ð€<                   E         ò  ^       
-          YÚ	       Ô€              ÕÛ	       Ô€              cÜ	 ?   ?   Ð€<                ð  E         ˆ  Â       
-          sÜ	       Ô€              ÁÜ	 ?   ?   Ð€<                0  E         ˆ  ^       
-          jÝ	       Ô€              Vß	       Ô€              à	 `   `   ƒ<                      
+òè‰è4mesh        E 2   2   Ð€<                ÐJ 4mesh 7          0E       Ô€              ~E 2   2   Ð€<                àJ 4mesh 7          F       Ô€              ‹F A   A   €€  ÿÿÿÿÿÿ          ðË&     è    Œ$0H`lW&è4mesh       ¦G R   R   Ð€<                à J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7         ¶G       Ô€              H 2   2   Ð€<                 J 4mesh 7          �H       Ô€              -I 2   2   Ð€<                ðJ 4mesh 7          =I       Ô€              ÓØ <   <   €€  ÿÿÿÿÿÿ          `ê\'     è    Œ$0H`l 4mesh       õØ R   R   Ð€<                 J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7         ËÙ R   R   Ðˆ<                 J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7         �Ú       Ô€              6Û P   P   Ð€<                pJ    Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬  9 7         FÛ       Ô€              8Ü R   R   Ð€<                € J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7         HÜ       Ô€              –Ü P   P   Ð€<                 J    Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬ 9 7         ™Ý P   P   Ðˆ<                 J    Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬ 9 7         ZÞ       Ô€              {%	 6   6   Ð€<                0  F              
+          H&	 6   6   Ðˆ<                0  F              
+          å&	       Ô€              ßÃ
+ E   E   Ð€  ÿÿÿÿÿÿ             D%         
+   ˆ  Â                  +— E   E   Ð€  ÿÿÿÿÿÿ          �  D%              ˆ           
+           z— E   E   Ð€  ÿÿÿÿÿÿ          @  D%            ˆ  ¼        
+           Ú1  A   A   €€  ÿÿÿÿÿÿ          *ø-     è    Œ$0H`l“&è4mesh       ü1  R   R   Ð€<                P J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7         Á2        Ô€              g3  P   P   Ð€<                 J    Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬ 9 7         w3        Ô€              /4  R   R   Ð€<                0 J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7         ?4        Ô€              �4  P   P   Ð€<                `J    Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬ 9 7         Z5  P   P   Ðˆ<                `J    Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬ 9 7         6        Ô€              kÍ  F   F   €€  ÿÿÿÿÿÿ          p+”.     è    Œ$0H`l
+]'èø-è4mesh       »7 A   A   €€  ÿÿÿÿÿÿ           
+þ.     è    Œ$0H`l”.è4mesh       Ó F   F   €€  ÿÿÿÿÿÿ          @J™5     è    Œ$0H`l
+4.è”.è4mesh       ‹n F   F   €€  ÿÿÿÿÿÿ          €K56     è    Œ$0H`l
+þ.è™5è4mesh       ÛØ A   A   €€  ÿÿÿÿÿÿ          °*Ÿ6     è    Œ$0H`l56è4mesh       ëÔ	 E   E   Ð€  ÿÿÿÿÿÿ          À  D%              ˆ           
+           :Õ	 E   E   Ð€  ÿÿÿÿÿÿ          �  D%            ˆ  ¼        
+           /×	 E   E   Ð€  ÿÿÿÿÿÿ          `  D%            ˆ  (       
+           SÙ	 ?   ?   Ðˆ<                P  E           ò  Â       
+          cÙ	       Ô€              ±Ù	 ?   ?   Ð€<                   E         ò  ^       
+          ZÚ	       Ô€              ÖÛ	       Ô€              dÜ	 ?   ?   Ð€<                p  E         ˆ  Â       
+          tÜ	       Ô€              ÂÜ	 ?   ?   Ð€<                °  E         ˆ  ^       
+          kÝ	       Ô€              Wß	       Ô€              à	 `   `   ƒ<                €     
      ªª    E  0   @  
 
-À 	                              )à	       Ô€              €à	 `   `   ƒ<                @     
+À 	                              *à	       Ô€              �à	 `   `   ƒ<                À     
      ªª    E  0   @  
 
-À 	                              Uá	       Ô€              â	 `   `   ƒ<                
-P           ªª    E  0   @  
+À 	                              Vá	       Ô€              â	 `   `   ƒ<                
+Ð           ªª    E  0   @  
 
- 	À                              (â	       Ô€              ‘â	 `   `   ƒ<                
-P          ªª    E  0   @  
+ 	À                              )â	       Ô€              ’â	 `   `   ƒ<                
+Ð          ªª    E  0   @  
 
- 	À                              µä	       Ô€              xå	 `   `   ƒ<                     
+ 	À                              ¶ä	       Ô€              yå	 `   `   ƒ<                �     
      ªª    E  0   @  
 
-À 	                              ˆå	       Ô€              úå	 `   `   ‹<                
-P          ªª    E  0   @  
+À 	                              ‰å	       Ô€              ûå	 `   `   ‹<                
+Ð          ªª    E  0   @  
 
- 	À                              Ïæ	       Ô€              ’ç	 `   `   ƒ<                
-           ªª    E  0   @  
+ 	À                              Ðæ	       Ô€              “ç	 `   `   ƒ<                
+           ªª    E  0   @  
 
- 	À                              Aè	 `   `   ƒ<                `     
+ 	À                              Bè	 `   `   ƒ<                à     
      ªª    E  0   @  
 
-À 	                              é	       Ô€              Ùé	 `   `   ƒ<                
-`           ªª    E  0   @  
+À 	                              é	       Ô€              Úé	 `   `   ƒ<                
+à           ªª    E  0   @  
 
- 	À                              éé	       Ô€              £ê	 `   `   ƒ<                
-p          ªª    E  0   @  
+ 	À                              êé	       Ô€              ¤ê	 `   `   ƒ<                
+ð          ªª    E  0   @  
 
- 	À                              Èì	 `   `   ‹<                
-p          ªª    E  0   @  
+ 	À                              Éì	 `   `   ‹<                
+ð          ªª    E  0   @  
 
- 	À                              äî	 `   `   ‹<                
-p          ªª    E  0   @  
+ 	À                              åî	 `   `   ‹<                
+ð          ªª    E  0   @  
 
- 	À                              ¹ï	       Ô€              |ð	 `   `   ƒ<                
-0          ªª    E  0   @  
+ 	À                              ºï	       Ô€              }ð	 `   `   ƒ<                
+°          ªª    E  0   @  
 
- 	À                              Pò	 `   `   ‹<                
-0          ªª    E  0   @  
+ 	À                              Qò	 `   `   ‹<                
+°          ªª    E  0   @  
 
- 	À                              7ô	       Ô€              úô	 `   `   ƒ<                @     
+ 	À                              8ô	       Ô€              ûô	 `   `   ƒ<                À     
      ªª    E  0   @  
 
-À 	                              
-õ	       Ô€              aõ	 `   `   ƒ<                €     
+À 	                              õ	       Ô€              bõ	 `   `   ƒ<                      
      ªª    E  0   @  
 
-À 	                              6ö	       Ô€              òø	 `   `   ‹<                
-p           ªª    E  0   @  
+À 	                              7ö	       Ô€              óø	 `   `   ‹<                
+ð           ªª    E  0   @  
 
- 	À                              ù	       Ô€              Yù	 `   `   ƒ<                
-�          ªª    E  0   @  
+ 	À                              ù	       Ô€              Zù	 `   `   ƒ<                
+          ªª    E  0   @  
 
- 	À                              ÷ú	 `   `   ‹<                
-�          ªª    E  0   @  
+ 	À                              øú	 `   `   ‹<                
+          ªª    E  0   @  
 
- 	À                              ëý	 `   `   ‹<                
-�          ªª    E  0   @  
+ 	À                              ìý	 `   `   ‹<                
+          ªª    E  0   @  
 
- 	À                              Àþ	       Ô€              ƒÿ	 `   `   ƒ<                
-P          ªª    E  0   @  
+ 	À                              Áþ	       Ô€              „ÿ	 `   `   ƒ<                
+Ð          ªª    E  0   @  
 
- 	À                              §        Ô€              j  `   `   ƒ<                `     
+ 	À                              ¨        Ô€              k  `   `   ƒ<                à     
      ªª    E  0   @  
 
-À 	                              z        Ô€              Ñ  `   `   ƒ<                      
+À 	                              {        Ô€              Ò  `   `   ƒ<                      
      ªª    E  0   @  
 
-À 	                              ¦        Ô€              i  `   `   ƒ<                
-€           ªª    E  0   @  
+À 	                              §        Ô€              j  `   `   ƒ<                
+            ªª    E  0   @  
 
- 	À                              y        Ô€              ô  `   `   ƒ<                
-°          ªª    E  0   @  
+ 	À                              z        Ô€              õ  `   `   ƒ<                
+0          ªª    E  0   @  
 
- 	À                              É        Ô€              Œ	  `   `   ƒ<                
-p          ªª    E  0   @  
+ 	À                              Ê        Ô€              �	  `   `   ƒ<                
+ð          ªª    E  0   @  
 
- 	À                              â1  F   F   €€  ÿÿÿÿÿÿ          € j:=     è    Œ$0H`l
-Õ5è56è4mesh       kÍ  F   F   €€  ÿÿÿÿÿÿ          € kÖ=     è    Œ$0H`l
-Ÿ6è:=è4mesh       »7 A   A   €€  ÿÿÿÿÿÿ          € J@>     è    Œ$0H`lÖ=è4mesh       ó£       Ô€              ¶¤ `   `   ƒ<                €     
+ 	À                              â1  F   F   €€  ÿÿÿÿÿÿ           j:=     è    Œ$0H`l
+Õ5è56è4mesh       kÍ  F   F   €€  ÿÿÿÿÿÿ          @kÖ=     è    Œ$0H`l
+Ÿ6è:=è4mesh       »7 A   A   €€  ÿÿÿÿÿÿ          J@>     è    Œ$0H`lÖ=è4mesh       ô£       Ô€              ·¤ `   `   ƒ<                     
      ªª    E  0   @  
 
-À 	                              Æ¤       Ô€              ¥ `   `   ƒ<                À     
+À 	                              Ç¤       Ô€              ¥ `   `   ƒ<                P     
      ªª    E  0   @  
 
-À 	                              ò¥       Ô€              µ¦ `   `   ƒ<                
-�           ªª    E  0   @  
+À 	                              ó¥       Ô€              ¶¦ `   `   ƒ<                
+            ªª    E  0   @  
 
- 	À                              Å¦       Ô€              š§ `   `   ƒ<                
-Ð          ªª    E  0   @  
+ 	À                              Æ¦       Ô€              ›§ `   `   ƒ<                
+`          ªª    E  0   @  
 
- 	À                              ©¨ ,   ,   Ð€<                �  F      
-          ¹¨       Ô€              © ,   ,   Ð€<                à  F      
-          ˜©       Ô€              ›ª `   `   ‹<                
-Ð          ªª    E  0   @  
-
- 	À                              p«       Ô€              Ó F   F   €€  ÿÿÿÿÿÿ          � ŠÛD     è    Œ$0H`l
-v=èÖ=è4mesh       ‹n F   F   €€  ÿÿÿÿÿÿ          � ‹wE     è    Œ$0H`l
-@>èÜDè4mesh       ÛØ A   A   €€  ÿÿÿÿÿÿ          � jáE     è    Œ$0H`lxEè4mesh       â1  F   F   €€  ÿÿÿÿÿÿ            ª|L     è    Œ$0H`l
-v=èxEè4mesh       ¦k  2   2   Ð€<                 J 4mesh 7          ­m  2   2   Ðˆ<                 J 4mesh 7          £n  2   2   Ðˆ<                 J 4mesh 7          ¢o  2   2   Ðˆ<                 J 4mesh 7          tp  2   2   Ðˆ<                 J 4mesh 7          aq  2   2   Ðˆ<                 J 4mesh 7          kÍ  F   F   €€  ÿÿÿÿÿÿ            «M     è    Œ$0H`l
-áEè}Lè4mesh       »7 A   A   €€  ÿÿÿÿÿÿ            Š‚M     è    Œ$0H`lMè4mesh       úÒ A   A   €€  ÿÿÿÿÿÿ          ° ÊT     è    Œ$0H`lMè4mesh       ‹n F   F   €€  ÿÿÿÿÿÿ          ° Ë¹T     è    Œ$0H`l
-‚MèTè4mesh       ÛØ A   A   €€  ÿÿÿÿÿÿ          ° ª#U     è    Œ$0H`lºTè4mesh       Ú1  A   A   €€  ÿÿÿÿÿÿ          À ê¾[     è    Œ$0H`lºTè4mesh       kÍ  F   F   €€  ÿÿÿÿÿÿ          À ëZ\     è    Œ$0H`l
-$Uè¿[è4mesh       »7 A   A   €€  ÿÿÿÿÿÿ          À ÊÄ\     è    Œ$0H`l[\è4mesh       úÒ A   A   €€  ÿÿÿÿÿÿ          Ð 
-`c     è    Œ$0H`l[\è4mesh       ‹n F   F   €€  ÿÿÿÿÿÿ          Ð üc     è    Œ$0H`l
-Å\è`cè4mesh       ÛØ A   A   €€  ÿÿÿÿÿÿ          Ð êed     è    Œ$0H`lücè4mesh       Ú1  A   A   €€  ÿÿÿÿÿÿ          à *k     è    Œ$0H`lücè4mesh       kÍ  F   F   €€  ÿÿÿÿÿÿ          à +�k     è    Œ$0H`l
-fdèkè4mesh       »7 A   A   €€  ÿÿÿÿÿÿ          à 
-l     è    Œ$0H`l�kè4mesh       úÒ A   A   €€  ÿÿÿÿÿÿ          ð J¢r     è    Œ$0H`l�kè4mesh       ‹n F   F   €€  ÿÿÿÿÿÿ          ð K>s     è    Œ$0H`l
-lè¢rè4mesh       Ú1  A   A   €€  ÿÿÿÿÿÿ           jCz     è    Œ$0H`l>sè4mesh       kÍ  F   F   €€  ÿÿÿÿÿÿ           kßz     è    Œ$0H`l
-lèCzè4mesh       {5 2   2   Ð€<                ðJ 4mesh 7          6       Ô€              ’6 2   2   Ð€<                 J 4mesh 7          ¢6       Ô€              »7 A   A   €€  ÿÿÿÿÿÿ           JI{     è    Œ$0H`lßzè4mesh       Ý7 R   R   Ð€<                  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7 	        z8       Ô€              Á9 2   2   Ðˆ<                °J 4mesh 7 	         Ñ9       Ô€              (: 2   2   Ð€<                J 4mesh 7	          ; 2   2   Ðˆ<                J 4mesh 7	          ·; 2   2   Ðˆ<                J 4mesh 7	          P<       Ô€              û÷ ,   ,   Ð€<                   F                Œø       Ô€              úÒ A   A   €€  ÿÿÿÿÿÿ          Šä�     è    Œ$0H`lßzè4mesh       ‹n A   A   €€  ÿÿÿÿÿÿ          ‹€‚     è    Œ$0H`lä�è4mesh       ¦o R   R   Ð€<                À J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7         ¶o       Ô€              p P   P   Ð€<                0J   	 Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬ 9 7
-         Åp       Ô€              q R   R   Ð€<                @ J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7 
-        Çq       Ô€              mr P   P   Ð€<                ÐJ    Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬ 9 7 
-        }r       Ô€              ÛÄ A   A   €€  ÿÿÿÿÿÿ          jÖ‚     è    Œ$0H`l€‚è4mesh    	   Ú1  A   A   €€  ÿÿÿÿÿÿ           ª…‰     è    Œ$0H`l€‚è4mesh    	   kÍ  F   F   €€  ÿÿÿÿÿÿ           «!Š     è    Œ$0H`l
-†‰è	Ö‚è4mesh    	   »# A   A   €€  ÿÿÿÿÿÿ           ŠwŠ     è    Œ$0H`l"Šè4mesh    	   úÒ A   A   €€  ÿÿÿÿÿÿ          0Ê&‘     è    Œ$0H`l"Šè4mesh    	   ‹n F   F   €€  ÿÿÿÿÿÿ          0ËÂ‘     è    Œ$0H`l
-'‘è	wŠè4mesh    	   ÛÄ A   A   €€  ÿÿÿÿÿÿ          0ª’     è    Œ$0H`lÃ‘è4mesh    
\ No newline at end of file
+ 	À                              ª¨ ,   ,   Ð€<                   F      
+          º¨       Ô€              © ,   ,   Ð€<                p  F      
+          ™©       Ô€              œª `   `   ‹<                
+`          ªª    E  0   @  
+
+ 	À                              q«       Ô€              Ó F   F   €€  ÿÿÿÿÿÿ          0ŠÛD     è    Œ$0H`l
+v=èÖ=è4mesh       ‹n F   F   €€  ÿÿÿÿÿÿ          €‹wE     è    Œ$0H`l
+@>èÜDè4mesh       ÛØ A   A   €€  ÿÿÿÿÿÿ          0jáE     è    Œ$0H`lxEè4mesh       â1  F   F   €€  ÿÿÿÿÿÿ          @ª|L     è    Œ$0H`l
+v=èxEè4mesh       ¦k  2   2   Ð€<                PJ 4mesh 7          ­m  2   2   Ðˆ<                PJ 4mesh 7          £n  2   2   Ðˆ<                PJ 4mesh 7          ¢o  2   2   Ðˆ<                PJ 4mesh 7          tp  2   2   Ðˆ<                PJ 4mesh 7          aq  2   2   Ðˆ<                PJ 4mesh 7          kÍ  F   F   €€  ÿÿÿÿÿÿ          �«M     è    Œ$0H`l
+áEè}Lè4mesh       »7 A   A   €€  ÿÿÿÿÿÿ          @Š‚M     è    Œ$0H`lMè4mesh       úÒ A   A   €€  ÿÿÿÿÿÿ          `ÊT     è    Œ$0H`lMè4mesh       ‹n F   F   €€  ÿÿÿÿÿÿ           Ë¹T     è    Œ$0H`l
+‚MèTè4mesh       ÛØ A   A   €€  ÿÿÿÿÿÿ          Pª#U     è    Œ$0H`lºTè4mesh       Ú1  A   A   €€  ÿÿÿÿÿÿ          pê¾[     è    Œ$0H`lºTè4mesh       kÍ  F   F   €€  ÿÿÿÿÿÿ          °ëZ\     è    Œ$0H`l
+$Uè¿[è4mesh       »7 A   A   €€  ÿÿÿÿÿÿ          `ÊÄ\     è    Œ$0H`l[\è4mesh       úÒ A   A   €€  ÿÿÿÿÿÿ          €
+`c     è    Œ$0H`l[\è4mesh       ‹n F   F   €€  ÿÿÿÿÿÿ          Àüc     è    Œ$0H`l
+Å\è`cè4mesh       ÛØ A   A   €€  ÿÿÿÿÿÿ          pêed     è    Œ$0H`lücè4mesh       Ú1  A   A   €€  ÿÿÿÿÿÿ          �*k     è    Œ$0H`lücè4mesh       kÍ  F   F   €€  ÿÿÿÿÿÿ          Ð+�k     è    Œ$0H`l
+fdèkè4mesh       »7 A   A   €€  ÿÿÿÿÿÿ          €
+l     è    Œ$0H`l�kè4mesh       úÒ A   A   €€  ÿÿÿÿÿÿ           J¢r     è    Œ$0H`l�kè4mesh       ‹n F   F   €€  ÿÿÿÿÿÿ          àK>s     è    Œ$0H`l
+lè¢rè4mesh       Ú1  A   A   €€  ÿÿÿÿÿÿ          °jCz     è    Œ$0H`l>sè4mesh       kÍ  F   F   €€  ÿÿÿÿÿÿ          ðkßz     è    Œ$0H`l
+lèCzè4mesh       {5 2   2   Ð€<                 J 4mesh 7          6       Ô€              ’6 2   2   Ð€<                 J 4mesh 7          ¢6       Ô€              »7 A   A   €€  ÿÿÿÿÿÿ          °JI{     è    Œ$0H`lßzè4mesh       Ý7 R   R   Ð€<                 J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7 	        z8       Ô€              Á9 2   2   Ðˆ<                ÀJ 4mesh 7 	         Ñ9       Ô€              (: 2   2   Ð€<                 J 4mesh 7	          ; 2   2   Ðˆ<                 J 4mesh 7	          ·; 2   2   Ðˆ<                 J 4mesh 7	          P<       Ô€              û÷ ,   ,   Ð€<                0  F                Œø       Ô€              úÒ A   A   €€  ÿÿÿÿÿÿ          ÀŠä�     è    Œ$0H`lßzè4mesh       ‹n A   A   €€  ÿÿÿÿÿÿ          @‹€‚     è    Œ$0H`lä�è4mesh       ¦o R   R   Ð€<                Ð J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7         ¶o       Ô€              p P   P   Ð€<                PJ   	 Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬ 9 7
+         Åp       Ô€              q R   R   Ð€<                ` J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7 
+        Çq       Ô€              mr P   P   Ð€<                àJ    Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬ 9 7 
+        }r       Ô€              ÛÄ A   A   €€  ÿÿÿÿÿÿ          ðjÖ‚     è    Œ$0H`l€‚è4mesh    	   Ú1  A   A   €€  ÿÿÿÿÿÿ          Ðª…‰     è    Œ$0H`l€‚è4mesh    	   kÍ  F   F   €€  ÿÿÿÿÿÿ          p«!Š     è    Œ$0H`l
+†‰è	Ö‚è4mesh    	   »# A   A   €€  ÿÿÿÿÿÿ           ŠwŠ     è    Œ$0H`l"Šè4mesh    	   úÒ A   A   €€  ÿÿÿÿÿÿ          àÊ&‘     è    Œ$0H`l"Šè4mesh    	   ‹n F   F   €€  ÿÿÿÿÿÿ          €ËÂ‘     è    Œ$0H`l
+'‘è	wŠè4mesh    	   ÛÄ A   A   €€  ÿÿÿÿÿÿ          ª’     è    Œ$0H`lÃ‘è4mesh    
\ No newline at end of file
diff -Naur ns-3.19/src/mesh/test/dot11s/hwmp-reactive-regression-test-2-1.pcap ns-3.20/src/mesh/test/dot11s/hwmp-reactive-regression-test-2-1.pcap
--- ns-3.19/src/mesh/test/dot11s/hwmp-reactive-regression-test-2-1.pcap	2014-06-17 10:34:00.455636530 -0700
+++ ns-3.20/src/mesh/test/dot11s/hwmp-reactive-regression-test-2-1.pcap	2014-06-17 10:33:13.812996587 -0700
@@ -1,198 +1,198 @@
-ÔÃ²¡          ÿÿ  i       À  R   R   Ð€<      	             J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          ß        Ô€       	        Æ        Ô€       	        ~  P   P   Ð€<      	           J     Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          j=  <   <   €€  ÿÿÿÿÿÿ            j=      è    Œ$0H`l 4mesh        Š]  F   F   €€  ÿÿÿÿÿÿ            ]      è    Œ$0H`l
-  è= è4mesh        ¬]  R   R   Ð€<                   J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          q^        Ô€               _  P   P   Ð€<                0 J    Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          '_        Ô€               çå  2   2   Ð€<                  J 4mesh 7            ÷å        Ô€               Üý  A   A   €€  ÿÿÿÿÿÿ            ký      è    Œ$0H`l = è4mesh        þý  R   R   Ð€<                  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          )ÿ  R   R   Ðˆ<                  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          B  R   R   Ðˆ<                  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          [ R   R   Ðˆ<                  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          � R   R   Ðˆ<                  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          Ÿ R   R   Ðˆ<                  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          ¯ R   R   Ðˆ<                  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          ¶ 2   2   Ð€<                  J 4mesh 7           O       Ô€               Í 2   2   Ð€<                P J 4mesh 7           Ý       Ô€               eP R   R   Ð€<                0  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          „Q       Ô€               Ü� R   R   Ð€<                0  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          Ñž R   R   Ðˆ<                0  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          ÏŸ R   R   Ðˆ<                0  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          ß  R   R   Ðˆ<                0  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          
-¢ R   R   Ðˆ<                0  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          5£ R   R   Ðˆ<                0  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          W¤ R   R   Ðˆ<                0  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          U¥ 2   2   Ð€<                @ J 4mesh 7            î¥       Ô€               ¤ñ 2   2   Ð€<                @ J 4mesh 7           vó       Ô€               ŠÒ <   <   €€  ÿÿÿÿÿÿ           ŠÒ     è    Œ$0H`l 4mesh        ªþ F   F   €€  ÿÿÿÿÿÿ           1þ     è    Œ$0H`l
- œèÒè4mesh        Ìþ R   R   Ð€<                P  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          ‘ÿ       Ô€               7  P   P   Ð€<                p J    Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          G        Ô€               üf A   A   €€  ÿÿÿÿÿÿ           ‹f     è    Œ$0H`lÒè4mesh        g R   R   Ð€<                `  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          h R   R   Ðˆ<                `  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          ,i R   R   Ðˆ<                `  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          <j R   R   Ðˆ<                `  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          ^k R   R   Ðˆ<                `  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          \l R   R   Ðˆ<                `  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          um R   R   Ðˆ<                `  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          ©w R   R   Ðˆ<                €  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          ¹w       Ô€               7x P   P   Ð€<                p J    Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          øx       Ô€               áy R   R   Ðˆ<                `  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          ñy       Ô€               ?z P   P   Ð€<                € J    Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬ 9 7           {       Ô€               …Ñ R   R   Ð€<                p  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          ¤Ò       Ô€               ü	 R   R   Ð€<                �  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          	 R   R   Ðˆ<                �  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          ø	 R   R   Ðˆ<                �  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          ÿ		 R   R   Ðˆ<                �  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          	 R   R   Ðˆ<                �  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          1	 R   R   Ðˆ<                �  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          &	 R   R   Ðˆ<                �  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7           	 2   2   Ð€<                € J 4mesh 7           0	       Ô€               ~	 2   2   Ð€<                  J 4mesh 7           	       Ô€               Är	 2   2   Ð€<                � J 4mesh 7           »s	       Ô€              j1  A   A   €€  ÿÿÿÿÿÿ            ªs     è    Œ$0H`lþè4mesh       …2  R   R   Ð€<                   J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7         •2        Ô€              ã2  P   P   Ð€<                ° J    Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬ 9 7         ¤3        Ô€              Æ3  R   R   Ð€<                À  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7         ‹4        Ô€              15  P   P   Ð€<                ° J    Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬ 9 7         A5        Ô€              Šm  F   F   €€  ÿÿÿÿÿÿ            Q¯     è    Œ$0H`l
- =ètè4mesh       Ü¥  A   A   €€  ÿÿÿÿÿÿ            «ç     è    Œ$0H`ltè4mesh       Ã¦        Ô€              P¨  R   R   Ð€<                Ð  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7         �©        Ô€              ŠÒ F   F   €€  ÿÿÿÿÿÿ          0 Ê     è    Œ$0H`l
-¯èèè4mesh       ª F   F   €€  ÿÿÿÿÿÿ          0 qP     è    Œ$0H`l
- Þèè4mesh       G F   F   €€  ÿÿÿÿÿÿ          0 Ëˆ     è    Œ$0H`l
-è™è4mesh       _  L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ�      
+ÔÃ²¡          ÿÿ  i       Á  R   R   Ð€<      	             J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          à        Ô€       	        Ç        Ô€       	          P   P   Ð€<      	           J     Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          j=  <   <   €€  ÿÿÿÿÿÿ            j=      è    Œ$0H`l 4mesh        Š]  F   F   €€  ÿÿÿÿÿÿ          0 ]      è    Œ$0H`l
+  è= è4mesh        ¬]  R   R   Ð€<                  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          q^        Ô€               _  P   P   Ð€<                @ J    Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          '_        Ô€               çå  2   2   Ð€<                  J 4mesh 7            ÷å        Ô€               Üý  A   A   €€  ÿÿÿÿÿÿ          0 ký      è    Œ$0H`l = è4mesh        þý  R   R   Ð€<                   J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          )ÿ  R   R   Ðˆ<                   J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          B  R   R   Ðˆ<                   J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          [ R   R   Ðˆ<                   J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          � R   R   Ðˆ<                   J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          Ÿ R   R   Ðˆ<                   J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          ¯ R   R   Ðˆ<                   J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          ¶ 2   2   Ð€<                0 J 4mesh 7           O       Ô€               Í 2   2   Ð€<                ` J 4mesh 7           Ý       Ô€               eP R   R   Ð€<                @  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          „Q       Ô€               Ü� R   R   Ð€<                @  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          Ñž R   R   Ðˆ<                @  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          ÏŸ R   R   Ðˆ<                @  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          ß  R   R   Ðˆ<                @  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          
+¢ R   R   Ðˆ<                @  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          5£ R   R   Ðˆ<                @  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          W¤ R   R   Ðˆ<                @  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          U¥ 2   2   Ð€<                P J 4mesh 7            î¥       Ô€               ¤ñ 2   2   Ð€<                P J 4mesh 7           vó       Ô€               ŠÒ <   <   €€  ÿÿÿÿÿÿ          ` ŠÒ     è    Œ$0H`l 4mesh        ªþ F   F   €€  ÿÿÿÿÿÿ          € 1þ     è    Œ$0H`l
+ œèÒè4mesh        Ìþ R   R   Ð€<                p  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          ‘ÿ       Ô€               7  P   P   Ð€<                � J    Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          G        Ô€               üf A   A   €€  ÿÿÿÿÿÿ          p ‹f     è    Œ$0H`lÒè4mesh        g R   R   Ð€<                €  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          h R   R   Ðˆ<                €  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          ,i R   R   Ðˆ<                €  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          <j R   R   Ðˆ<                €  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          ^k R   R   Ðˆ<                €  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          \l R   R   Ðˆ<                €  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          um R   R   Ðˆ<                €  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          ©w R   R   Ðˆ<                   J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          ¹w       Ô€               7x P   P   Ð€<                � J    Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          øx       Ô€               áy R   R   Ðˆ<                €  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          ñy       Ô€               ?z P   P   Ð€<                  J    Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬ 9 7           {       Ô€               …Ñ R   R   Ð€<                �  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          ¤Ò       Ô€               ü	 R   R   Ð€<                °  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          	 R   R   Ðˆ<                °  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          ø	 R   R   Ðˆ<                °  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          ÿ		 R   R   Ðˆ<                °  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          	 R   R   Ðˆ<                °  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          1	 R   R   Ðˆ<                °  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          &	 R   R   Ðˆ<                °  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7           	 2   2   Ð€<                  J 4mesh 7           0	       Ô€               ~	 2   2   Ð€<                À J 4mesh 7           	       Ô€               Är	 2   2   Ð€<                ° J 4mesh 7           »s	       Ô€              j1  A   A   €€  ÿÿÿÿÿÿ          Ð ªs     è    Œ$0H`lþè4mesh       …2  R   R   Ð€<                À  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7         •2        Ô€              ã2  P   P   Ð€<                à J    Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬ 9 7         ¤3        Ô€              Æ3  R   R   Ð€<                ð  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7         ‹4        Ô€              15  P   P   Ð€<                Ð J    Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬ 9 7         A5        Ô€              Šm  F   F   €€  ÿÿÿÿÿÿ          ° Q¯     è    Œ$0H`l
+ =ètè4mesh       Ü¥  A   A   €€  ÿÿÿÿÿÿ          à «ç     è    Œ$0H`ltè4mesh       Ã¦        Ô€              P¨  R   R   Ð€<                  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7         �©        Ô€              ŠÒ F   F   €€  ÿÿÿÿÿÿ           Ê     è    Œ$0H`l
+¯èèè4mesh       ª F   F   €€  ÿÿÿÿÿÿ          À qP     è    Œ$0H`l
+ Þèè4mesh       G F   F   €€  ÿÿÿÿÿÿ          Ëˆ     è    Œ$0H`l
+è™è4mesh       _  L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿÐ      
     ªª           
 
 ÿÿÿÿÿÿ
-       Š  L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿÐ      
+       Š  L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ     
     ªª           
 
 ÿÿÿÿÿÿ
-       ¶  L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿà      
+       ¶  L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ      
     ªª           
 
 ÿÿÿÿÿÿ
-       è  E   E   Ð€  ÿÿÿÿÿÿ          ð   D%            ˆ  –        
-           7  E   E   Ð€  ÿÿÿÿÿÿ          à   D%            ˆ  j       
-           o  E   E   Ð€  ÿÿÿÿÿÿ              D%            ˆ  e       
-           È        Ô€       	       V  ?   ?   Ð€<                °   E         ˆ  ,       
-          f        Ô€              ´  ?   ?   Ð€<                ð   E         ˆ  Â       
-          ]        Ô€              ë  ?   ?   Ð€<                   E         ˆ  Ž       
+       è  E   E   Ð€  ÿÿÿÿÿÿ          0  D%            ˆ  –        
+           7  E   E   Ð€  ÿÿÿÿÿÿ             D%            ˆ  j       
+           o  E   E   Ð€  ÿÿÿÿÿÿ          à   D%            ˆ  e       
+           È        Ô€       	       V  ?   ?   Ð€<                ð   E         ˆ  ,       
+          f        Ô€              ´  ?   ?   Ð€<                0  E         ˆ  Â       
+          ]        Ô€              ë  ?   ?   Ð€<                @  E         ˆ  Ž       
                    Ô€              º   L   L   ƒ<                
-          ªª           
+P          ªª           
      
 
        Ê         Ô€              !!  L   L   ƒ<                
-           ªª           
+@          ªª           
      
 
        Þ!        Ô€              ‰"  L   L   ƒ<      	          
-À           ªª           
+           ªª           
      
 
-       ¾%        Ô€       	       �&  `   `   ƒ<                Ð      
+       ¾%        Ô€       	       �&  `   `   ƒ<                     
      ªª    E  0    @  
 
-À 	                              ‘&        Ô€              è&  `   `   ƒ<                     
+À 	                              ‘&        Ô€              è&  `   `   ƒ<                P     
      ªª    E  0    @  
 
-À 	                              ½'        Ô€              €(  `   `   ƒ<                      
+À 	                              ½'        Ô€              €(  `   `   ƒ<                `     
      ªª    E  0    @  
 
-À 	                              j1  F   F   €€  ÿÿÿÿÿÿ          @ êµ     è    Œ$0H`l
-Pè‰è4mesh       d5  L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ0         ªª           
+À 	                              j1  F   F   €€  ÿÿÿÿÿÿ          `êµ     è    Œ$0H`l
+Pè‰è4mesh       d5  L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿp         ªª           
 ÿÿÿÿÿÿ
-       �5  L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ          ªª           
+       �5  L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿp         ªª           
 ÿÿÿÿÿÿ
-       »6  L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿà          ªª           
+       »6  L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ          ªª           
 ÿÿÿÿÿÿ
-       H9        Ô€       	       ó9  L   L   ƒ<                ð      
+       H9        Ô€       	       ó9  L   L   ƒ<                0     
      ªª           
 
      
-       :        Ô€              Z:  L   L   ƒ<                0     
+       :        Ô€              Z:  L   L   ƒ<                €     
      ªª           
 
      
-       ;        Ô€              Â;  L   L   ƒ<                @     
+       ;        Ô€              Â;  L   L   ƒ<                €     
      ªª           
 
      
        þ<        Ô€              	>  `   `   ƒ<                
-P          ªª    E  0    @  
+�          ªª    E  0    @  
 
  	À                              >        Ô€              p>  `   `   ƒ<                
-@          ªª    E  0    @  
+�          ªª    E  0    @  
 
  	À                              E?        Ô€              @  `   `   ƒ<      	          
-           ªª    E  0    @  
+@          ªª    E  0    @  
 
- 	À                              Šm  F   F   €€  ÿÿÿÿÿÿ          @ ‘ñ     è    Œ$0H`l
- è¶è4mesh       ÏU ,   ,   Ð€<                `  F                ßU       Ô€              -V ,   ,   Ð€<                P  F                ¾V       Ô€              ×X       Ô€              £ E   E   Ð€  ÿÿÿÿÿÿ             D%         
-   ˆ  ,                  j£ E   E   Ð€  ÿÿÿÿÿÿ          `  D%         
-   ˆ  Â                  ¢¤ E   E   Ð€  ÿÿÿÿÿÿ          €  D%         
-   ˆ  g                  ŠÒ F   F   €€  ÿÿÿÿÿÿ          P 
+ 	À                              Šm  F   F   €€  ÿÿÿÿÿÿ          P‘ñ     è    Œ$0H`l
+ è¶è4mesh       ÏU ,   ,   Ð€<                °  F                ßU       Ô€              -V ,   ,   Ð€<                   F                ¾V       Ô€              ×X       Ô€              £ E   E   Ð€  ÿÿÿÿÿÿ          p  D%         
+   ˆ  ,                  j£ E   E   Ð€  ÿÿÿÿÿÿ          °  D%         
+   ˆ  Â                  ¢¤ E   E   Ð€  ÿÿÿÿÿÿ          Ð  D%         
+   ˆ  g                  ŠÒ F   F   €€  ÿÿÿÿÿÿ          À
 W&     è    Œ$0H`l
-òè‰è4mesh       ª F   F   €€  ÿÿÿÿÿÿ          P ±’&     è    Œ$0H`l
-  &èW&è4mesh       ÄD 2   2   Ð€<                pJ 4mesh 7          ]E       Ô€              ÛE 2   2   Ð€<                �J 4mesh 7          ëE       Ô€              üF A   A   €€  ÿÿÿÿÿÿ          P Ë&     è    Œ$0H`lW&è4mesh       G R   R   Ð€<                € J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7         ãG       Ô€              aH 2   2   Ð€<                 J 4mesh 7          qH       Ô€              ÑH 2   2   Ð€<                �J 4mesh 7          jI       Ô€              SÚ R   R   Ðˆ<                ° J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7         rÛ       Ô€              tÜ       Ô€              Ý P   P   Ð€<                ÀJ    Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬ 9 7         Þ P   P   Ðˆ<                ÀJ    Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬ 9 7         Û%	 6   6   Ð€<                Ð  F              
-          ¨&	 6   6   Ðˆ<                Ð  F              
+òè‰è4mesh       ª F   F   €€  ÿÿÿÿÿÿ          €±’&     è    Œ$0H`l
+  &èW&è4mesh       ÄD 2   2   Ð€<                ÐJ 4mesh 7          ]E       Ô€              ÛE 2   2   Ð€<                àJ 4mesh 7          ëE       Ô€              üF A   A   €€  ÿÿÿÿÿÿ          ðË&     è    Œ$0H`lW&è4mesh       G R   R   Ð€<                à J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7         ãG       Ô€              aH 2   2   Ð€<                 J 4mesh 7          qH       Ô€              ÑH 2   2   Ð€<                ðJ 4mesh 7          jI       Ô€              SÚ R   R   Ðˆ<                 J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7         rÛ       Ô€              tÜ       Ô€              Ý P   P   Ð€<                 J    Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬ 9 7         Þ P   P   Ðˆ<                 J    Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬ 9 7         Û%	 6   6   Ð€<                0  F              
+          ¨&	 6   6   Ðˆ<                0  F              
           Ã
- E   E   Ð€  ÿÿÿÿÿÿ          0  D%         
+ E   E   Ð€  ÿÿÿÿÿÿ          �  D%         
    ˆ  ,                  jÃ
- E   E   Ð€  ÿÿÿÿÿÿ             D%         
-   ˆ  Â                  î— E   E   Ð€  ÿÿÿÿÿÿ          à  D%            ˆ  ¼        
-           j1  A   A   €€  ÿÿÿÿÿÿ          ` *ø-     è    Œ$0H`l“&è4mesh       …2  R   R   Ð€<                ð J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7         •2        Ô€              ã2  P   P   Ð€<                °J    Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬ 9 7         ¤3        Ô€              Ï3  R   R   Ð€<                À J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7         l4        Ô€              ß5  P   P   Ðˆ<                 J    Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬ 9 7         ï5        Ô€              Šm  F   F   €€  ÿÿÿÿÿÿ          ` Ñ3.     è    Œ$0H`l
- Á-èø-è4mesh       äÍ  F   F   €€  ÿÿÿÿÿÿ          ` +”.     è    Œ$0H`l
-]'èø-è4mesh       ŠÒ F   F   €€  ÿÿÿÿÿÿ          p J™5     è    Œ$0H`l
-4.è”.è4mesh       ª F   F   €€  ÿÿÿÿÿÿ          p ñÔ5     è    Œ$0H`l
- b5è™5è4mesh       o F   F   €€  ÿÿÿÿÿÿ          p K56     è    Œ$0H`l
-þ.è™5è4mesh       ®Õ	 E   E   Ð€  ÿÿÿÿÿÿ            D%            ˆ  ¼        
-           ÐÕ	 ?   ?   Ð€<                Ð  E           ò  Â       
-          ºÖ	 E   E   Ð€  ÿÿÿÿÿÿ          à  D%            ˆ  (       
-           b×	 ?   ?   Ðˆ<                Ð  E           ò  Â       
-          ²Ø	 E   E   Ð€  ÿÿÿÿÿÿ          P  D%            ˆ  Î       
-           æØ	 ?   ?   Ðˆ<                Ð  E           ò  Â       
-          �Ù	       Ô€              Ú	 ?   ?   Ð€<                   E         ò  ^       
-          Û	       Ô€       	       ™Û	 ?   ?   Ð€<                `  E         ˆ  ,       
-          ©Û	       Ô€              ÷Û	 ?   ?   Ð€<                ð  E         ˆ  Â       
-           Ü	       Ô€              .Ý	 ?   ?   Ð€<                0  E         ˆ  ^       
-          WÞ	       Ô€       	       ß	 `   `   ƒ<                p     
+ E   E   Ð€  ÿÿÿÿÿÿ             D%         
+   ˆ  Â                  î— E   E   Ð€  ÿÿÿÿÿÿ          @  D%            ˆ  ¼        
+           j1  A   A   €€  ÿÿÿÿÿÿ          *ø-     è    Œ$0H`l“&è4mesh       …2  R   R   Ð€<                P J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7         •2        Ô€              ã2  P   P   Ð€<                 J    Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬ 9 7         ¤3        Ô€              Ï3  R   R   Ð€<                0 J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7         l4        Ô€              ß5  P   P   Ðˆ<                `J    Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬ 9 7         ï5        Ô€              Šm  F   F   €€  ÿÿÿÿÿÿ           Ñ3.     è    Œ$0H`l
+ Á-èø-è4mesh       äÍ  F   F   €€  ÿÿÿÿÿÿ          p+”.     è    Œ$0H`l
+]'èø-è4mesh       ŠÒ F   F   €€  ÿÿÿÿÿÿ          @J™5     è    Œ$0H`l
+4.è”.è4mesh       ª F   F   €€  ÿÿÿÿÿÿ          ÀñÔ5     è    Œ$0H`l
+ b5è™5è4mesh       o F   F   €€  ÿÿÿÿÿÿ          €K56     è    Œ$0H`l
+þ.è™5è4mesh       ®Õ	 E   E   Ð€  ÿÿÿÿÿÿ          �  D%            ˆ  ¼        
+           ÐÕ	 ?   ?   Ð€<                P  E           ò  Â       
+          ºÖ	 E   E   Ð€  ÿÿÿÿÿÿ          `  D%            ˆ  (       
+           b×	 ?   ?   Ðˆ<                P  E           ò  Â       
+          ²Ø	 E   E   Ð€  ÿÿÿÿÿÿ          Ð  D%            ˆ  Î       
+           æØ	 ?   ?   Ðˆ<                P  E           ò  Â       
+          �Ù	       Ô€              Ú	 ?   ?   Ð€<                   E         ò  ^       
+          Û	       Ô€       	       ™Û	 ?   ?   Ð€<                à  E         ˆ  ,       
+          ©Û	       Ô€              ÷Û	 ?   ?   Ð€<                p  E         ˆ  Â       
+           Ü	       Ô€              .Ý	 ?   ?   Ð€<                °  E         ˆ  ^       
+          WÞ	       Ô€       	       ß	 `   `   ƒ<                ð     
      ªª    E  0   @  
 
-À 	                              *ß	       Ô€              �ß	 `   `   ƒ<                      
+À 	                              *ß	       Ô€              �ß	 `   `   ƒ<                €     
      ªª    E  0   @  
 
-À 	                              Và	       Ô€              á	 `   `   ƒ<                @     
+À 	                              Và	       Ô€              á	 `   `   ƒ<                À     
      ªª    E  0   @  
 
-À 	                              Ðá	       Ô€       	       yä	 `   `   ‹<                €     
+À 	                              Ðá	       Ô€       	       yä	 `   `   ‹<                      
      ªª    E  0   @  
 
-À 	                              ‰ä	       Ô€              àä	 `   `   ƒ<                     
+À 	                              ‰ä	       Ô€              àä	 `   `   ƒ<                �     
      ªª    E  0   @  
 
 À 	                              µå	       Ô€              “æ	 `   `   ‹<                
-P          ªª    E  0   @  
+Ð          ªª    E  0   @  
 
  	À                              £æ	       Ô€              úæ	 `   `   ƒ<                
-           ªª    E  0   @  
+           ªª    E  0   @  
 
  	À                              Ïç	       Ô€              }ï	 `   `   ‹<                
-p          ªª    E  0   @  
+ð          ªª    E  0   @  
 
  	À                              �ï	       Ô€              äï	 `   `   ƒ<                
-0          ªª    E  0   @  
+°          ªª    E  0   @  
 
  	À                              ¸ñ	 `   `   ‹<                
-0          ªª    E  0   @  
+°          ªª    E  0   @  
 
- 	À                              �ò	       Ô€              ûó	 `   `   ‹<                      
+ 	À                              �ò	       Ô€              ûó	 `   `   ‹<                      
      ªª    E  0   @  
 
-À 	                              ô	       Ô€              bô	 `   `   ƒ<                @     
+À 	                              ô	       Ô€              bô	 `   `   ƒ<                À     
      ªª    E  0   @  
 
 À 	                              7õ	       Ô€              /ù	       Ô€              „þ	 `   `   ‹<                
-�          ªª    E  0   @  
+          ªª    E  0   @  
 
  	À                              ”þ	       Ô€              ëþ	 `   `   ƒ<                
-P          ªª    E  0   @  
+Ð          ªª    E  0   @  
 
  	À                              Àÿ	       Ô€              ƒ 
  `   `   ƒ<      	          
-À          ªª    E  0   @  
+@          ªª    E  0   @  
 
- 	À                              ¨        Ô€       	       k  `   `   ƒ<                Ð     
+ 	À                              ¨        Ô€       	       k  `   `   ƒ<                P     
      ªª    E  0   @  
 
-À 	                              {        Ô€              Ò  `   `   ƒ<                `     
+À 	                              {        Ô€              Ò  `   `   ƒ<                à     
      ªª    E  0   @  
 
-À 	                              §        Ô€              j  `   `   ƒ<                      
+À 	                              §        Ô€              j  `   `   ƒ<                      
      ªª    E  0   @  
 
 À 	                              ¦        Ô€              �  `   `   ƒ<                
-°          ªª    E  0   @  
+0          ªª    E  0   @  
 
  	À                              �        Ô€              ô  `   `   ƒ<                
-p          ªª    E  0   @  
+ð          ªª    E  0   @  
 
  	À                              É	        Ô€              Œ
   `   `   ƒ<      	          
-à          ªª    E  0   @  
+`          ªª    E  0   @  
 
- 	À                              j1  F   F   €€  ÿÿÿÿÿÿ          € j:=     è    Œ$0H`l
-Õ5è56è4mesh       Šm  F   F   €€  ÿÿÿÿÿÿ          € v=     è    Œ$0H`l
- =è:=è4mesh       äÍ  F   F   €€  ÿÿÿÿÿÿ          € kÖ=     è    Œ$0H`l
-Ÿ6è:=è4mesh       ô¢       Ô€       	       ·£ `   `   ƒ<                ð     
+ 	À                              j1  F   F   €€  ÿÿÿÿÿÿ           j:=     è    Œ$0H`l
+Õ5è56è4mesh       Šm  F   F   €€  ÿÿÿÿÿÿ          pv=     è    Œ$0H`l
+ =è:=è4mesh       äÍ  F   F   €€  ÿÿÿÿÿÿ          @kÖ=     è    Œ$0H`l
+Ÿ6è:=è4mesh       ô¢       Ô€       	       ·£ `   `   ƒ<                €     
      ªª    E  0   @  
 
-À 	                              Ç£       Ô€              ¤ `   `   ƒ<                €     
+À 	                              Ç£       Ô€              ¤ `   `   ƒ<                     
      ªª    E  0   @  
 
-À 	                              ó¤       Ô€              ò¦       Ô€              œ§ ,   ,   Ðˆ<                   F      
-          ¬§       Ô€              U¨ ,   ,   Ð€<                �  F      
-          æ¨       Ô€              \© ,   ,   Ð€<                à  F      
+À 	                              ó¤       Ô€              ò¦       Ô€              œ§ ,   ,   Ðˆ<                �  F      
+          ¬§       Ô€              U¨ ,   ,   Ð€<                   F      
+          æ¨       Ô€              \© ,   ,   Ð€<                p  F      
           4« `   `   ‹<                
-Ð          ªª    E  0   @  
+`          ªª    E  0   @  
 
- 	À                              D«       Ô€              ŠÒ F   F   €€  ÿÿÿÿÿÿ          � ŠÛD     è    Œ$0H`l
-v=èÖ=è4mesh       o F   F   €€  ÿÿÿÿÿÿ          � ‹wE     è    Œ$0H`l
-@>èÜDè4mesh       j1  F   F   €€  ÿÿÿÿÿÿ            ª|L     è    Œ$0H`l
-v=èxEè4mesh       Jk  2   2   Ð€<                 J 4mesh 7          Il  2   2   Ðˆ<                 J 4mesh 7          Qm  2   2   Ðˆ<                 J 4mesh 7          Gn  2   2   Ðˆ<                 J 4mesh 7          Fo  2   2   Ðˆ<                 J 4mesh 7          p  2   2   Ðˆ<                 J 4mesh 7          q  2   2   Ðˆ<                 J 4mesh 7          äÍ  F   F   €€  ÿÿÿÿÿÿ            «M     è    Œ$0H`l
-áEè}Lè4mesh       ŠÒ A   A   €€  ÿÿÿÿÿÿ          ° ÊT     è    Œ$0H`lMè4mesh       o F   F   €€  ÿÿÿÿÿÿ          ° Ë¹T     è    Œ$0H`l
-‚MèTè4mesh       j1  A   A   €€  ÿÿÿÿÿÿ          À ê¾[     è    Œ$0H`lºTè4mesh       äÍ  F   F   €€  ÿÿÿÿÿÿ          À ëZ\     è    Œ$0H`l
-$Uè¿[è4mesh       ŠÒ A   A   €€  ÿÿÿÿÿÿ          Ð 
-`c     è    Œ$0H`l[\è4mesh       o F   F   €€  ÿÿÿÿÿÿ          Ð üc     è    Œ$0H`l
-Å\è`cè4mesh       j1  A   A   €€  ÿÿÿÿÿÿ          à *k     è    Œ$0H`lücè4mesh       äÍ  F   F   €€  ÿÿÿÿÿÿ          à +�k     è    Œ$0H`l
-fdèkè4mesh       ŠÒ A   A   €€  ÿÿÿÿÿÿ          ð J¢r     è    Œ$0H`l�kè4mesh       o F   F   €€  ÿÿÿÿÿÿ          ð K>s     è    Œ$0H`l
-lè¢rè4mesh       j1  A   A   €€  ÿÿÿÿÿÿ           jCz     è    Œ$0H`l>sè4mesh       äÍ  F   F   €€  ÿÿÿÿÿÿ           kßz     è    Œ$0H`l
-lèCzè4mesh       ×5 2   2   Ð€<                ðJ 4mesh 7          Î6       Ô€              ý9       Ô€              < 2   2   Ðˆ<                J 4mesh 7	          Oø ,   ,   Ð€<                   F                _ø       Ô€              ŠÒ A   A   €€  ÿÿÿÿÿÿ          Šä�     è    Œ$0H`lßzè4mesh       ün A   A   €€  ÿÿÿÿÿÿ          ‹€‚     è    Œ$0H`lä�è4mesh       ão       Ô€              ‹q R   R   Ð€<                @ J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7 
-        ªr       Ô€           	   j1  A   A   €€  ÿÿÿÿÿÿ           ª…‰     è    Œ$0H`l€‚è4mesh    	   äÍ  F   F   €€  ÿÿÿÿÿÿ           «!Š     è    Œ$0H`l
-†‰è	Ö‚è4mesh    	   ŠÒ A   A   €€  ÿÿÿÿÿÿ          0Ê&‘     è    Œ$0H`l"Šè4mesh    	   o F   F   €€  ÿÿÿÿÿÿ          0ËÂ‘     è    Œ$0H`l
+ 	À                              D«       Ô€              ŠÒ F   F   €€  ÿÿÿÿÿÿ          0ŠÛD     è    Œ$0H`l
+v=èÖ=è4mesh       o F   F   €€  ÿÿÿÿÿÿ          €‹wE     è    Œ$0H`l
+@>èÜDè4mesh       j1  F   F   €€  ÿÿÿÿÿÿ          @ª|L     è    Œ$0H`l
+v=èxEè4mesh       Jk  2   2   Ð€<                PJ 4mesh 7          Il  2   2   Ðˆ<                PJ 4mesh 7          Qm  2   2   Ðˆ<                PJ 4mesh 7          Gn  2   2   Ðˆ<                PJ 4mesh 7          Fo  2   2   Ðˆ<                PJ 4mesh 7          p  2   2   Ðˆ<                PJ 4mesh 7          q  2   2   Ðˆ<                PJ 4mesh 7          äÍ  F   F   €€  ÿÿÿÿÿÿ          �«M     è    Œ$0H`l
+áEè}Lè4mesh       ŠÒ A   A   €€  ÿÿÿÿÿÿ          `ÊT     è    Œ$0H`lMè4mesh       o F   F   €€  ÿÿÿÿÿÿ           Ë¹T     è    Œ$0H`l
+‚MèTè4mesh       j1  A   A   €€  ÿÿÿÿÿÿ          pê¾[     è    Œ$0H`lºTè4mesh       äÍ  F   F   €€  ÿÿÿÿÿÿ          °ëZ\     è    Œ$0H`l
+$Uè¿[è4mesh       ŠÒ A   A   €€  ÿÿÿÿÿÿ          €
+`c     è    Œ$0H`l[\è4mesh       o F   F   €€  ÿÿÿÿÿÿ          Àüc     è    Œ$0H`l
+Å\è`cè4mesh       j1  A   A   €€  ÿÿÿÿÿÿ          �*k     è    Œ$0H`lücè4mesh       äÍ  F   F   €€  ÿÿÿÿÿÿ          Ð+�k     è    Œ$0H`l
+fdèkè4mesh       ŠÒ A   A   €€  ÿÿÿÿÿÿ           J¢r     è    Œ$0H`l�kè4mesh       o F   F   €€  ÿÿÿÿÿÿ          àK>s     è    Œ$0H`l
+lè¢rè4mesh       j1  A   A   €€  ÿÿÿÿÿÿ          °jCz     è    Œ$0H`l>sè4mesh       äÍ  F   F   €€  ÿÿÿÿÿÿ          ðkßz     è    Œ$0H`l
+lèCzè4mesh       ×5 2   2   Ð€<                 J 4mesh 7          Î6       Ô€              ý9       Ô€              < 2   2   Ðˆ<                 J 4mesh 7	          Oø ,   ,   Ð€<                0  F                _ø       Ô€              ŠÒ A   A   €€  ÿÿÿÿÿÿ          ÀŠä�     è    Œ$0H`lßzè4mesh       ün A   A   €€  ÿÿÿÿÿÿ          @‹€‚     è    Œ$0H`lä�è4mesh       ão       Ô€              ‹q R   R   Ð€<                ` J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7 
+        ªr       Ô€           	   j1  A   A   €€  ÿÿÿÿÿÿ          Ðª…‰     è    Œ$0H`l€‚è4mesh    	   äÍ  F   F   €€  ÿÿÿÿÿÿ          p«!Š     è    Œ$0H`l
+†‰è	Ö‚è4mesh    	   ŠÒ A   A   €€  ÿÿÿÿÿÿ          àÊ&‘     è    Œ$0H`l"Šè4mesh    	   o F   F   €€  ÿÿÿÿÿÿ          €ËÂ‘     è    Œ$0H`l
 '‘è	wŠè4mesh    
\ No newline at end of file
diff -Naur ns-3.19/src/mesh/test/dot11s/hwmp-reactive-regression-test-3-1.pcap ns-3.20/src/mesh/test/dot11s/hwmp-reactive-regression-test-3-1.pcap
--- ns-3.19/src/mesh/test/dot11s/hwmp-reactive-regression-test-3-1.pcap	2014-06-17 10:34:00.456636522 -0700
+++ ns-3.20/src/mesh/test/dot11s/hwmp-reactive-regression-test-3-1.pcap	2014-06-17 10:33:13.813996579 -0700
@@ -2,225 +2,224 @@
      	     	   J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          \        Ô€       
         ^        Ô€       
           P   P   Ð€<      
-     	     	 J     Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬ 9 7            A   A   €€  ÿÿÿÿÿÿ     	     	  ¦      è    Œ$0H`l  è4mesh        8  R   R   Ð€<      	             J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          ý        Ô€               £  P   P   Ð€<           	     	  J    Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          ³        Ô€       	        Š  R   R   Ð€<           	     	0  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          š        Ô€       	        ú  P   P   Ð€<      	           J     Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          »        Ô€               Ò=  <   <   €€  ÿÿÿÿÿÿ            j=      è    Œ$0H`l 4mesh        ô=  R   R   Ð€<                   J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          û>  R   R   Ðˆ<                   J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          @  R   R   Ðˆ<                   J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          $A  R   R   Ðˆ<                   J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          B  R   R   Ðˆ<                   J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          C  R   R   Ðˆ<                   J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          'D  R   R   Ðˆ<                   J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          ]  F   F   €€  ÿÿÿÿÿÿ            ]      è    Œ$0H`l
-  è= è4mesh        4^  R   R   Ð€<                   J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          D^        Ô€               ’^  P   P   Ð€<                0 J    Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          S_        Ô€               ÒÝ  R   R   Ð€<                @  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          ëÞ  R   R   Ðˆ<                @  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          ûß  R   R   Ðˆ<                @  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          á  R   R   Ðˆ<                @  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7           â  R   R   Ðˆ<                @  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          ã  R   R   Ðˆ<                @  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          Mä  R   R   Ðˆ<                @  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          #æ        Ô€               †þ  R   R   Ð€<                  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          Ê  R   R   Ðˆ<                  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          ã R   R   Ðˆ<                  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7           R   R   Ðˆ<                  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          ' R   R   Ðˆ<                  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          7 R   R   Ðˆ<                  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7           2   2   Ð€<                  J 4mesh 7           "       Ô€               p 2   2   Ð€<                P J 4mesh 7           	       Ô€               dž R   R   Ð€<                0  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          YŸ R   R   Ðˆ<                0  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          W  R   R   Ðˆ<                0  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          g¡ R   R   Ðˆ<                0  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          ’¢ R   R   Ðˆ<                0  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          ½£ R   R   Ðˆ<                0  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          ß¤ R   R   Ðˆ<                0  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          ±¥ 2   2   Ð€<                @ J 4mesh 7            >œ F   F   €€  ÿÿÿÿÿÿ     	     	 Æ›     è    Œ$0H`l
-  è] è4mesh        òÒ <   <   €€  ÿÿÿÿÿÿ           ŠÒ     è    Œ$0H`l 4mesh        Ó R   R   Ð€<                `  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          -Ô R   R   Ðˆ<                `  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          OÕ R   R   Ðˆ<                `  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          ƒÖ R   R   Ðˆ<                `  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          x× R   R   Ðˆ<                `  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          £Ø R   R   Ðˆ<                `  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          ¡Ù R   R   Ðˆ<                `  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          1þ F   F   €€  ÿÿÿÿÿÿ           1þ     è    Œ$0H`l
- œèÒè4mesh        Tÿ R   R   Ð€<                P  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          dÿ       Ô€               ²ÿ P   P   Ð€<                p J    Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          s        Ô€               ¦g R   R   Ð€<                `  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          ¤h R   R   Ðˆ<                `  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          Äj R   R   Ðˆ<                `  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          æk R   R   Ðˆ<                `  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          äl R   R   Ðˆ<                `  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          òr R   R   Ð€<                €  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          çs R   R   Ðˆ<                €  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          ÷t R   R   Ðˆ<                €  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          v R   R   Ðˆ<                €  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7           w R   R   Ðˆ<                €  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          åw       Ô€               »x P   P   Ð€<                p J    Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          Ëx       Ô€               z       Ô€               Ãz P   P   Ð€<                € J    Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          „	 R   R   Ð€<                �  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          ‹	 R   R   Ðˆ<                �  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          €		 R   R   Ðˆ<                �  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          ‡
-	 R   R   Ðˆ<                �  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          —	 R   R   Ðˆ<                �  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          ¹	 R   R   Ðˆ<                �  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          \	       Ô€               Ú	 2   2   Ð€<                  J 4mesh 7           ^= F   F   €€  ÿÿÿÿÿÿ     	     	  æ<     è    Œ$0H`l
- ¥èþè4mesh       Ú1  A   A   €€  ÿÿÿÿÿÿ            ªs     è    Œ$0H`lþè4mesh       Á2        Ô€              g3  P   P   Ð€<                ° J    Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬ 9 7         m5        Ô€              m  F   F   €€  ÿÿÿÿÿÿ            Q¯     è    Œ$0H`l
- =ètè4mesh       >œ F   F   €€  ÿÿÿÿÿÿ     	     	0 Þ     è    Œ$0H`l
- Fè¯è4mesh       Ó F   F   €€  ÿÿÿÿÿÿ          0 Ê     è    Œ$0H`l
-¯èèè4mesh       1 F   F   €€  ÿÿÿÿÿÿ          0 qP     è    Œ$0H`l
- Þèè4mesh       ^= F   F   €€  ÿÿÿÿÿÿ     	     	@ &     è    Œ$0H`l
- çèPè4mesh       ³  L   L   ƒ  ÿÿÿÿÿÿ     	ÿÿÿÿÿÿ@      
+     	     	 J     Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬ 9 7            A   A   €€  ÿÿÿÿÿÿ     	     	  ¦      è    Œ$0H`l  è4mesh        8  R   R   Ð€<      	             J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          ý        Ô€               £  P   P   Ð€<           	     	0 J    Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          ³        Ô€       	        Š  R   R   Ð€<           	     	@  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          š        Ô€       	        ú  P   P   Ð€<      	           J     Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          »        Ô€               Ò=  <   <   €€  ÿÿÿÿÿÿ            j=      è    Œ$0H`l 4mesh        ô=  R   R   Ð€<                   J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          û>  R   R   Ðˆ<                   J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          @  R   R   Ðˆ<                   J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          $A  R   R   Ðˆ<                   J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          B  R   R   Ðˆ<                   J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          C  R   R   Ðˆ<                   J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          'D  R   R   Ðˆ<                   J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          ]  F   F   €€  ÿÿÿÿÿÿ          0 ]      è    Œ$0H`l
+  è= è4mesh        4^  R   R   Ð€<                  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          D^        Ô€               ’^  P   P   Ð€<                @ J    Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          S_        Ô€               ÒÝ  R   R   Ð€<                P  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          ëÞ  R   R   Ðˆ<                P  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          ûß  R   R   Ðˆ<                P  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          á  R   R   Ðˆ<                P  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7           â  R   R   Ðˆ<                P  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          ã  R   R   Ðˆ<                P  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          Mä  R   R   Ðˆ<                P  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          #æ        Ô€               †þ  R   R   Ð€<                   J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          Ê  R   R   Ðˆ<                   J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          ã R   R   Ðˆ<                   J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7           R   R   Ðˆ<                   J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          ' R   R   Ðˆ<                   J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          7 R   R   Ðˆ<                   J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7           2   2   Ð€<                0 J 4mesh 7           "       Ô€               p 2   2   Ð€<                ` J 4mesh 7           	       Ô€               dž R   R   Ð€<                @  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          YŸ R   R   Ðˆ<                @  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          W  R   R   Ðˆ<                @  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          g¡ R   R   Ðˆ<                @  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          ’¢ R   R   Ðˆ<                @  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          ½£ R   R   Ðˆ<                @  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          ß¤ R   R   Ðˆ<                @  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          ±¥ 2   2   Ð€<                P J 4mesh 7            >œ F   F   €€  ÿÿÿÿÿÿ     	     	P Æ›     è    Œ$0H`l
+  è] è4mesh        òÒ <   <   €€  ÿÿÿÿÿÿ          ` ŠÒ     è    Œ$0H`l 4mesh        Ó R   R   Ð€<                p  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          -Ô R   R   Ðˆ<                p  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          OÕ R   R   Ðˆ<                p  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          ƒÖ R   R   Ðˆ<                p  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          x× R   R   Ðˆ<                p  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          £Ø R   R   Ðˆ<                p  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          ¡Ù R   R   Ðˆ<                p  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          1þ F   F   €€  ÿÿÿÿÿÿ          € 1þ     è    Œ$0H`l
+ œèÒè4mesh        Tÿ R   R   Ð€<                p  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          dÿ       Ô€               ²ÿ P   P   Ð€<                � J    Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          s        Ô€               ¦g R   R   Ð€<                €  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          ¤h R   R   Ðˆ<                €  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          Äj R   R   Ðˆ<                €  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          æk R   R   Ðˆ<                €  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          äl R   R   Ðˆ<                €  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          òr R   R   Ð€<                   J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          çs R   R   Ðˆ<                   J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          ÷t R   R   Ðˆ<                   J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          v R   R   Ðˆ<                   J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7           w R   R   Ðˆ<                   J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          åw       Ô€               »x P   P   Ð€<                � J    Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          Ëx       Ô€               z       Ô€               Ãz P   P   Ð€<                  J    Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          „	 R   R   Ð€<                °  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          ‹	 R   R   Ðˆ<                °  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          €		 R   R   Ðˆ<                °  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          ‡
+	 R   R   Ðˆ<                °  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          —	 R   R   Ðˆ<                °  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          ¹	 R   R   Ðˆ<                °  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          \	       Ô€               Ú	 2   2   Ð€<                À J 4mesh 7           ^= F   F   €€  ÿÿÿÿÿÿ     	     	` æ<     è    Œ$0H`l
+ ¥èþè4mesh       Ú1  A   A   €€  ÿÿÿÿÿÿ          Ð ªs     è    Œ$0H`lþè4mesh       Á2        Ô€              g3  P   P   Ð€<                à J    Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬ 9 7         m5        Ô€              m  F   F   €€  ÿÿÿÿÿÿ          ° Q¯     è    Œ$0H`l
+ =ètè4mesh       >œ F   F   €€  ÿÿÿÿÿÿ     	     	p Þ     è    Œ$0H`l
+ Fè¯è4mesh       Ó F   F   €€  ÿÿÿÿÿÿ           Ê     è    Œ$0H`l
+¯èèè4mesh       1 F   F   €€  ÿÿÿÿÿÿ          À qP     è    Œ$0H`l
+ Þèè4mesh       ^= F   F   €€  ÿÿÿÿÿÿ     	     	€ &     è    Œ$0H`l
+ çèPè4mesh       ´  L   L   ƒ  ÿÿÿÿÿÿ     	ÿÿÿÿÿÿ�      
     ªª           
 
 ÿÿÿÿÿÿ
-       Þ  L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ�      
+       ß  L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿÐ      
     ªª           
 
 ÿÿÿÿÿÿ
-       
-  L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿÐ      
+         L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ     
     ªª           
 
 ÿÿÿÿÿÿ
-       «  E   E   Ð€  ÿÿÿÿÿÿ          à   D%            ˆ  j       
-           ú  E   E   Ð€  ÿÿÿÿÿÿ              D%            ˆ  e       
-           2  E   E   Ð€  ÿÿÿÿÿÿ     	     	P   D%            ˆ  û       
-           ý        Ô€       
-       ‹  ?   ?   Ð€<           	     	`   E         ˆ  –        
-          ›        Ô€       	       é  ?   ?   Ð€<                °   E         ˆ  ,       
-          ’        Ô€                 ?   ?   Ð€<                ð   E         ˆ  Â       
-          ö         Ô€              ¡!  L   L   ƒ<                
-           ªª           
+       ¬  E   E   Ð€  ÿÿÿÿÿÿ             D%            ˆ  j       
+           û  E   E   Ð€  ÿÿÿÿÿÿ          à   D%            ˆ  e       
+           3  E   E   Ð€  ÿÿÿÿÿÿ     	     	    D%            ˆ  û       
+           þ        Ô€       
+       Œ  ?   ?   Ð€<           	     	°   E         ˆ  –        
+          œ        Ô€       	       ê  ?   ?   Ð€<                ð   E         ˆ  ,       
+          “        Ô€              !  ?   ?   Ð€<                0  E         ˆ  Â       
+          ÷         Ô€              ¢!  L   L   ƒ<                
+@          ªª           
      
 
-       ±!        Ô€              "  L   L   ƒ<      	          
-À           ªª           
+       ²!        Ô€              	"  L   L   ƒ<      	          
+           ªª           
      
 
-       Å"        Ô€              p#  L   L   ƒ<      
+       Æ"        Ô€              q#  L   L   ƒ<      
      	     
-p           ªª           
+À           ªª           
      
 
-       ¬$        Ô€       
-       �%  `   `   ƒ<           	     €      
+       ­$        Ô€       
+       ‚%  `   `   ƒ<           	     Ð      
      ªª    E  0    @  
 
-À 	                              ‘%        Ô€       	       è%  `   `   ƒ<                Ð      
+À 	                              ’%        Ô€       	       é%  `   `   ƒ<                     
      ªª    E  0    @  
 
-À 	                              ½&        Ô€              â1  F   F   €€  ÿÿÿÿÿÿ          @ êµ     è    Œ$0H`l
-Pè‰è4mesh       6  L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ          ªª           
+À 	                              ¾&        Ô€              â1  F   F   €€  ÿÿÿÿÿÿ          `êµ     è    Œ$0H`l
+Pè‰è4mesh       6  L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿp         ªª           
 ÿÿÿÿÿÿ
-       :6  L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿà          ªª           
+       ;6  L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ          ªª           
 ÿÿÿÿÿÿ
-       f7  L   L   ƒ  ÿÿÿÿÿÿ     	ÿÿÿÿÿÿ�          ªª           
+       g7  L   L   ƒ  ÿÿÿÿÿÿ     	ÿÿÿÿÿÿà          ªª           
 ÿÿÿÿÿÿ
-       N8        Ô€       
-       9  L   L   ƒ<           	            
+       O8        Ô€       
+       9  L   L   ƒ<           	     ð      
      ªª           
 
      
-       9        Ô€       	       r9  L   L   ƒ<                ð      
+       9        Ô€       	       s9  L   L   ƒ<                0     
      ªª           
 
      
-       /:        Ô€              Ú:  L   L   ƒ<                0     
+       0:        Ô€              Û:  L   L   ƒ<                €     
      ªª           
 
      
-       E>        Ô€              ?  `   `   ƒ<                
-@          ªª    E  0    @  
+       F>        Ô€              	?  `   `   ƒ<                
+�          ªª    E  0    @  
 
- 	À                              ?        Ô€              o?  `   `   ƒ<      	          
-           ªª    E  0    @  
+ 	À                              ?        Ô€              p?  `   `   ƒ<      	          
+@          ªª    E  0    @  
 
- 	À                              D@        Ô€              A  `   `   ƒ<      
+ 	À                              E@        Ô€              A  `   `   ƒ<      
      	     
-°           ªª    E  0    @  
+           ªª    E  0    @  
 
- 	À                              m  F   F   €€  ÿÿÿÿÿÿ          @ ‘ñ     è    Œ$0H`l
- è¶è4mesh       V       Ô€              ‚V ,   ,   Ð€<                P  F                ’V       Ô€              àV ,   ,   Ð€<      	            F                qW       Ô€              çW ,   ,   Ð€<      
-     	     	À   F                >œ F   F   €€  ÿÿÿÿÿÿ     	     	P F &     è    Œ$0H`l
- ‰èòè4mesh       W¢ E   E   Ð€  ÿÿÿÿÿÿ     	     	Ð   D%         
-   ˆ  –                   ¦¢ E   E   Ð€  ÿÿÿÿÿÿ             D%         
-   ˆ  ,                  Þ£ E   E   Ð€  ÿÿÿÿÿÿ          `  D%         
-   ˆ  Â                  Ó F   F   €€  ÿÿÿÿÿÿ          P 
+ 	À                              m  F   F   €€  ÿÿÿÿÿÿ          P‘ñ     è    Œ$0H`l
+ è¶è4mesh       V       Ô€              ‚V ,   ,   Ð€<                   F                ’V       Ô€              àV ,   ,   Ð€<      	          `  F                qW       Ô€              çW ,   ,   Ð€<      
+     	     	  F                >œ F   F   €€  ÿÿÿÿÿÿ     	     	 F &     è    Œ$0H`l
+ ‰èòè4mesh       X¢ E   E   Ð€  ÿÿÿÿÿÿ     	     	0  D%         
+   ˆ  –                   §¢ E   E   Ð€  ÿÿÿÿÿÿ          p  D%         
+   ˆ  ,                  ß£ E   E   Ð€  ÿÿÿÿÿÿ          °  D%         
+   ˆ  Â                  Ó F   F   €€  ÿÿÿÿÿÿ          À
 W&     è    Œ$0H`l
-òè‰è4mesh       1 F   F   €€  ÿÿÿÿÿÿ          P ±’&     è    Œ$0H`l
-  &èW&è4mesh        E 2   2   Ð€<                pJ 4mesh 7          F       Ô€              ¦G R   R   Ð€<                € J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7         �H       Ô€              -I 2   2   Ð€<                �J 4mesh 7          WÂ
- E   E   Ð€  ÿÿÿÿÿÿ     	     	à   D%         
-   ˆ  –                   ¦Â
- E   E   Ð€  ÿÿÿÿÿÿ          0  D%         
-   ˆ  ,                  ÞÃ
- E   E   Ð€  ÿÿÿÿÿÿ             D%         
-   ˆ  Â                  ^= F   F   €€  ÿÿÿÿÿÿ     	     	` fÁ-     è    Œ$0H`l
- *&è“&è4mesh       Ú1  A   A   €€  ÿÿÿÿÿÿ          ` *ø-     è    Œ$0H`l“&è4mesh       Á2        Ô€              g3  P   P   Ð€<                °J    Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬ 9 7         6        Ô€              m  F   F   €€  ÿÿÿÿÿÿ          ` Ñ3.     è    Œ$0H`l
- Á-èø-è4mesh       à E   E   Ð€  ÿÿÿÿÿÿ     	     	ð   D%         
-   ˆ  –                   fà E   E   Ð€  ÿÿÿÿÿÿ          @  D%         
-   ˆ  ,                  >œ F   F   €€  ÿÿÿÿÿÿ     	     	p †b5     è    Œ$0H`l
- Ë-è4.è4mesh       Ó F   F   €€  ÿÿÿÿÿÿ          p J™5     è    Œ$0H`l
-4.è”.è4mesh       1 F   F   €€  ÿÿÿÿÿÿ          p ñÔ5     è    Œ$0H`l
- b5è™5è4mesh       .×	 E   E   Ð€  ÿÿÿÿÿÿ          à  D%            ˆ  (       
-           =Ø	 E   E   Ð€  ÿÿÿÿÿÿ          P  D%            ˆ  Î       
-           @Ú	       Ô€       
-       ÎÚ	 ?   ?   Ð€<           	     	  E         ˆ  –        
-          ÞÚ	       Ô€       	       ,Û	 ?   ?   Ð€<                `  E         ˆ  ,       
-          ÕÛ	       Ô€              cÜ	 ?   ?   Ð€<                ð  E         ˆ  Â       
-          WÝ	       Ô€       
-       Þ	 `   `   ƒ<           	           
+òè‰è4mesh       1 F   F   €€  ÿÿÿÿÿÿ          €±’&     è    Œ$0H`l
+  &èW&è4mesh        E 2   2   Ð€<                ÐJ 4mesh 7          F       Ô€              ¦G R   R   Ð€<                à J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7         �H       Ô€              -I 2   2   Ð€<                ðJ 4mesh 7          XÂ
+ E   E   Ð€  ÿÿÿÿÿÿ     	     	@  D%         
+   ˆ  –                   §Â
+ E   E   Ð€  ÿÿÿÿÿÿ          �  D%         
+   ˆ  ,                  ßÃ
+ E   E   Ð€  ÿÿÿÿÿÿ             D%         
+   ˆ  Â                  ^= F   F   €€  ÿÿÿÿÿÿ     	     	PfÁ-     è    Œ$0H`l
+ *&è“&è4mesh       Ú1  A   A   €€  ÿÿÿÿÿÿ          *ø-     è    Œ$0H`l“&è4mesh       Á2        Ô€              g3  P   P   Ð€<                 J    Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬ 9 7         6        Ô€              m  F   F   €€  ÿÿÿÿÿÿ           Ñ3.     è    Œ$0H`l
+ Á-èø-è4mesh       à E   E   Ð€  ÿÿÿÿÿÿ     	     	`  D%         
+   ˆ  –                   gà E   E   Ð€  ÿÿÿÿÿÿ          °  D%         
+   ˆ  ,                  >œ F   F   €€  ÿÿÿÿÿÿ     	     	p†b5     è    Œ$0H`l
+ Ë-è4.è4mesh       Ó F   F   €€  ÿÿÿÿÿÿ          @J™5     è    Œ$0H`l
+4.è”.è4mesh       1 F   F   €€  ÿÿÿÿÿÿ          ÀñÔ5     è    Œ$0H`l
+ b5è™5è4mesh       /×	 E   E   Ð€  ÿÿÿÿÿÿ          `  D%            ˆ  (       
+           >Ø	 E   E   Ð€  ÿÿÿÿÿÿ          Ð  D%            ˆ  Î       
+           AÚ	       Ô€       
+       ÏÚ	 ?   ?   Ð€<           	     	�  E         ˆ  –        
+          ßÚ	       Ô€       	       -Û	 ?   ?   Ð€<                à  E         ˆ  ,       
+          ÖÛ	       Ô€              dÜ	 ?   ?   Ð€<                p  E         ˆ  Â       
+          XÝ	       Ô€       
+       Þ	 `   `   ƒ<           	           
      ªª    E  0   @  
 
-À 	                              *Þ	       Ô€       	       �Þ	 `   `   ƒ<                p     
+À 	                              +Þ	       Ô€       	       ‚Þ	 `   `   ƒ<                ð     
      ªª    E  0   @  
 
-À 	                              Vß	       Ô€              à	 `   `   ƒ<                      
+À 	                              Wß	       Ô€              à	 `   `   ƒ<                €     
      ªª    E  0   @  
 
-À 	                              Çà	       Ô€       
-       “á	 `   `   ƒ<           	     0     
+À 	                              Èà	       Ô€       
+       ”á	 `   `   ƒ<           	     °     
      ªª    E  0   @  
 
-À 	                              £á	       Ô€       	       â	 `   `   ƒ<                €     
+À 	                              ¤á	       Ô€       	       â	 `   `   ƒ<                      
      ªª    E  0   @  
 
-À 	                              àã	 `   `   ‹<                €     
+À 	                              áã	 `   `   ‹<                      
      ªª    E  0   @  
 
-À 	                              µä	       Ô€              xå	 `   `   ƒ<                     
+À 	                              ¶ä	       Ô€              yå	 `   `   ƒ<                �     
      ªª    E  0   @  
 
-À 	                              æ	       Ô€       
-       ’ç	 `   `   ƒ<                
-           ªª    E  0   @  
+À 	                              æ	       Ô€       
+       “ç	 `   `   ƒ<                
+           ªª    E  0   @  
 
- 	À                              ¢ç	       Ô€              /è	 `   `   ƒ<      	          
-�          ªª    E  0   @  
+ 	À                              £ç	       Ô€              0è	 `   `   ƒ<      	          
+          ªª    E  0   @  
 
- 	À                              úê	 `   `   ‹<      	          
-�          ªª    E  0   @  
+ 	À                              ûê	 `   `   ‹<      	          
+          ªª    E  0   @  
 
- 	À                              Ïë	       Ô€              ¿ì	 `   `   ‹<           	     @     
+ 	À                              Ðë	       Ô€              Àì	 `   `   ‹<           	     À     
      ªª    E  0   @  
 
-À 	                              Ïì	       Ô€       	       Aí	 `   `   ƒ<                      
+À 	                              Ðì	       Ô€       	       Bí	 `   `   ƒ<                      
      ªª    E  0   @  
 
-À 	                              âî	 `   `   ƒ<      
+À 	                              ãî	 `   `   ƒ<      
      	     
-P          ªª    E  0   @  
+Ð          ªª    E  0   @  
 
- 	À                              ˆï	 `   `   ‹<                      
+ 	À                              ‰ï	 `   `   ‹<                      
      ªª    E  0   @  
 
-À 	                              Pò	 `   `   ‹<                
-0          ªª    E  0   @  
+À 	                              Qò	 `   `   ‹<                
+°          ªª    E  0   @  
 
- 	À                              `ò	       Ô€              bó	 `   `   ‹<                      
+ 	À                              aò	       Ô€              có	 `   `   ‹<                      
      ªª    E  0   @  
 
-À 	                              7ô	       Ô€              úô	 `   `   ƒ<                @     
+À 	                              8ô	       Ô€              ûô	 `   `   ƒ<                À     
      ªª    E  0   @  
 
-À 	                              »õ	 `   `   ƒ<      	          
-°          ªª    E  0   @  
+À 	                              ¼õ	 `   `   ƒ<      	          
+0          ªª    E  0   @  
 
- 	À                              �ö	       Ô€              Àþ	       Ô€              ƒÿ	 `   `   ƒ<                
-P          ªª    E  0   @  
+ 	À                              ‘ö	       Ô€              Áþ	       Ô€              „ÿ	 `   `   ƒ<                
+Ð          ªª    E  0   @  
 
- 	À                              “ÿ	       Ô€              êÿ	 `   `   ƒ<      	          
-À          ªª    E  0   @  
+ 	À                              ”ÿ	       Ô€              ëÿ	 `   `   ƒ<      	          
+@          ªª    E  0   @  
 
- 	À                              ¿ 
-       Ô€              ‚
+ 	À                              À 
+       Ô€              ƒ
  `   `   ƒ<      
      	     
-p          ªª    E  0   @  
+ð          ªª    E  0   @  
 
- 	À                              ^= F   F   €€  ÿÿÿÿÿÿ     	     	€ ¦=     è    Œ$0H`l
- l5èÕ5è4mesh       Ô         Ô€       
-       k  `   `   ‹<           	     €     
+ 	À                              ^= F   F   €€  ÿÿÿÿÿÿ     	     	 ¦=     è    Œ$0H`l
+ l5èÕ5è4mesh       Õ         Ô€       
+       l  `   `   ‹<           	          
      ªª    E  0   @  
 
-À 	                              {        Ô€       	       Ò  `   `   ƒ<                Ð     
+À 	                              |        Ô€       	       Ó  `   `   ƒ<                P     
      ªª    E  0   @  
 
-À 	                              §        Ô€              j  `   `   ƒ<                `     
+À 	                              ¨        Ô€              k  `   `   ƒ<                à     
      ªª    E  0   @  
 
-À 	                              É        Ô€              Œ	  `   `   ƒ<                
-p          ªª    E  0   @  
+À 	                              Ê        Ô€              �	  `   `   ƒ<                
+ð          ªª    E  0   @  
 
- 	À                              œ	        Ô€              ó	  `   `   ƒ<      	          
-à          ªª    E  0   @  
+ 	À                              �	        Ô€              ô	  `   `   ƒ<      	          
+`          ªª    E  0   @  
 
- 	À                              È
-        Ô€              ‹  `   `   ƒ<      
+ 	À                              É
+        Ô€              Œ  `   `   ƒ<      
      	     
-�          ªª    E  0   @  
+           ªª    E  0   @  
 
- 	À                              â1  F   F   €€  ÿÿÿÿÿÿ          € j:=     è    Œ$0H`l
-Õ5è56è4mesh       m  F   F   €€  ÿÿÿÿÿÿ          € v=     è    Œ$0H`l
- =è:=è4mesh       >œ F   F   €€  ÿÿÿÿÿÿ     	     	� Æ¤D     è    Œ$0H`l
- l5èv=è4mesh       ô¡       Ô€       
-       ·¢ `   `   ƒ<           	           
+ 	À                              â1  F   F   €€  ÿÿÿÿÿÿ           j:=     è    Œ$0H`l
+Õ5è56è4mesh       m  F   F   €€  ÿÿÿÿÿÿ          pv=     è    Œ$0H`l
+ =è:=è4mesh       >œ F   F   €€  ÿÿÿÿÿÿ     	     	0Æ¤D     è    Œ$0H`l
+ l5èv=è4mesh       õ¡       Ô€       
+       ¸¢ `   `   ƒ<           	     @     
      ªª    E  0   @  
 
-À 	                              Ç¢       Ô€       	       £ `   `   ƒ<                ð     
+À 	                              È¢       Ô€       	       £ `   `   ƒ<                €     
      ªª    E  0   @  
 
-À 	                              ó£       Ô€              E¥ ,   ,   Ðˆ<           	     	°  F      
-          U¥       Ô€       	       £¥ ,   ,   Ð€<                   F      
-          ×¦ 2   2   Ð€<      
-     	     	ÀJ 4mesh 7          G§ ,   ,   Ðˆ<                   F      
-          Ø§       Ô€              p«       Ô€              Ó F   F   €€  ÿÿÿÿÿÿ          � ŠÛD     è    Œ$0H`l
-v=èÖ=è4mesh       1 F   F   €€  ÿÿÿÿÿÿ          � 1E     è    Œ$0H`l
- ¥DèÜDè4mesh       V= A   A   €€  ÿÿÿÿÿÿ     	     	  æEL     è    Œ$0H`lEè4mesh       =>       Ô€       
+À 	                              ô£       Ô€              F¥ ,   ,   Ðˆ<           	     	P  F      
+          V¥       Ô€       	       ¤¥ ,   ,   Ð€<                �  F      
+          Ø¦ 2   2   Ð€<      
+     	     	`J 4mesh 7          H§ ,   ,   Ðˆ<                �  F      
+          Ù§       Ô€              q«       Ô€              Ó F   F   €€  ÿÿÿÿÿÿ          0ŠÛD     è    Œ$0H`l
+v=èÖ=è4mesh       1 F   F   €€  ÿÿÿÿÿÿ           1E     è    Œ$0H`l
+ ¥DèÜDè4mesh       V= A   A   €€  ÿÿÿÿÿÿ     	     	pæEL     è    Œ$0H`lEè4mesh       =>       Ô€       
        ²@ R   R   Ð€<      
-     	     	à J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7         ÑA       Ô€       
-       m  F   F   €€  ÿÿÿÿÿÿ            Q¸L     è    Œ$0H`l
- FLèÜDè4mesh       ÂÐ 6   6   Ð€<      	            F                        ¡Ñ 6   6   Ðˆ<      	            F                        ›Ò 6   6   Ðˆ<      	            F                        hÓ 6   6   Ðˆ<      	            F                        tÔ 6   6   Ðˆ<      	            F                        eÕ 6   6   Ðˆ<      	            F                        ;Ö 6   6   Ðˆ<      	            F                        × 2   2   Ð€<                 J 4mesh 7          õ× 2   2   Ðˆ<                 J 4mesh 7          ýØ 2   2   Ðˆ<                 J 4mesh 7          óÙ 2   2   Ðˆ<                 J 4mesh 7          àÚ 2   2   Ðˆ<                 J 4mesh 7          »Û 2   2   Ðˆ<                 J 4mesh 7          �Ü 2   2   Ðˆ<                 J 4mesh 7          1 F   F   €€  ÿÿÿÿÿÿ          ° qYT     è    Œ$0H`l
- FLèÜDè4mesh       ; 2   2   Ð€<      	          0J 4mesh 7          ñ; 2   2   Ðˆ<      	          0J 4mesh 7          ù< 2   2   Ðˆ<      	          0J 4mesh 7          Ô= 2   2   Ðˆ<      	          0J 4mesh 7          Ü> 2   2   Ðˆ<      	          0J 4mesh 7          É? 2   2   Ðˆ<      	          0J 4mesh 7          ¤@ 2   2   Ðˆ<      	          0J 4mesh 7          m  A   A   €€  ÿÿÿÿÿÿ          À ‘ú[     è    Œ$0H`l FLè4mesh       1 <   <   €€  ÿÿÿÿÿÿ          Ð ±£c     è    Œ$0H`l 4mesh       �  <   <   €€  ÿÿÿÿÿÿ          à Ñlk     è    Œ$0H`l 4mesh       1^ <   <   €€  ÿÿÿÿÿÿ          ð ñ-s     è    Œ$0H`l 4mesh       Ý  <   <   €€  ÿÿÿÿÿÿ           ïz     è    Œ$0H`l 4mesh       1v <   <   €€  ÿÿÿÿÿÿ          1ˆ‚     è    Œ$0H`l 4mesh    	   é  <   <   €€  ÿÿÿÿÿÿ           Q=Š     è    Œ$0H`l 4mesh    	   1j <   <   €€  ÿÿÿÿÿÿ          0q¾‘     è    Œ$0H`l 4mesh    
\ No newline at end of file
+     	     	� J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7         ÑA       Ô€       
+       m  F   F   €€  ÿÿÿÿÿÿ          °Q¸L     è    Œ$0H`l
+ FLèÜDè4mesh       ÂÐ 6   6   Ð€<      	          À  F                        ¡Ñ 6   6   Ðˆ<      	          À  F                        ›Ò 6   6   Ðˆ<      	          À  F                        hÓ 6   6   Ðˆ<      	          À  F                        tÔ 6   6   Ðˆ<      	          À  F                        eÕ 6   6   Ðˆ<      	          À  F                        ;Ö 6   6   Ðˆ<      	          À  F                        × 2   2   Ð€<                ÐJ 4mesh 7          õ× 2   2   Ðˆ<                ÐJ 4mesh 7          ýØ 2   2   Ðˆ<                ÐJ 4mesh 7          óÙ 2   2   Ðˆ<                ÐJ 4mesh 7          àÚ 2   2   Ðˆ<                ÐJ 4mesh 7          »Û 2   2   Ðˆ<                ÐJ 4mesh 7          �Ü 2   2   Ðˆ<                ÐJ 4mesh 7          1 F   F   €€  ÿÿÿÿÿÿ          àqYT     è    Œ$0H`l
+ FLèÜDè4mesh       ; 2   2   Ð€<      	          ðJ 4mesh 7          ñ; 2   2   Ðˆ<      	          ðJ 4mesh 7          ù< 2   2   Ðˆ<      	          ðJ 4mesh 7          Ô= 2   2   Ðˆ<      	          ðJ 4mesh 7          Ü> 2   2   Ðˆ<      	          ðJ 4mesh 7          É? 2   2   Ðˆ<      	          ðJ 4mesh 7          ¤@ 2   2   Ðˆ<      	          ðJ 4mesh 7          m  A   A   €€  ÿÿÿÿÿÿ           ‘ú[     è    Œ$0H`l FLè4mesh       1 <   <   €€  ÿÿÿÿÿÿ          ±£c     è    Œ$0H`l 4mesh       �  <   <   €€  ÿÿÿÿÿÿ           Ñlk     è    Œ$0H`l 4mesh       1^ <   <   €€  ÿÿÿÿÿÿ          0ñ-s     è    Œ$0H`l 4mesh       Ý  <   <   €€  ÿÿÿÿÿÿ          @ïz     è    Œ$0H`l 4mesh       1v <   <   €€  ÿÿÿÿÿÿ          P1ˆ‚     è    Œ$0H`l 4mesh    	   é  <   <   €€  ÿÿÿÿÿÿ          `Q=Š     è    Œ$0H`l 4mesh    	   1j <   <   €€  ÿÿÿÿÿÿ          pq¾‘     è    Œ$0H`l 4mesh    
\ No newline at end of file
diff -Naur ns-3.19/src/mesh/test/dot11s/hwmp-reactive-regression-test-4-1.pcap ns-3.20/src/mesh/test/dot11s/hwmp-reactive-regression-test-4-1.pcap
--- ns-3.19/src/mesh/test/dot11s/hwmp-reactive-regression-test-4-1.pcap	2014-06-17 10:34:00.457636515 -0700
+++ ns-3.20/src/mesh/test/dot11s/hwmp-reactive-regression-test-4-1.pcap	2014-06-17 10:33:13.814996571 -0700
@@ -3,402 +3,402 @@
   *      è    Œ$0H`l 4mesh        ´  R   R   Ð€<      
      	     	   J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          y        Ô€       	          P   P   Ð€<      	     
      
-  J     Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬  9 7          /        Ô€       
+ J     Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬  9 7          /        Ô€       
         !  R   R   Ð€<      	     
      
-  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          1        Ô€       
+   J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          1        Ô€       
           P   P   Ð€<      
-     	     	 J     Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          @        Ô€       	        ¦  A   A   €€  ÿÿÿÿÿÿ     	     	  ¦      è    Œ$0H`l  è4mesh        À  R   R   Ð€<      	             J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          Ð        Ô€                 P   P   Ð€<           	     	  J    Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          ß        Ô€       	          R   R   Ð€<           	     	0  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          Æ        Ô€       	        ~  P   P   Ð€<      	           J     Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          Ž        Ô€               }>  R   R   Ð€<                   J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          „?  R   R   Ðˆ<                   J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          ¦@  R   R   Ðˆ<                   J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          ­A  R   R   Ðˆ<                   J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          ¢B  R   R   Ðˆ<                   J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          —C  R   R   Ðˆ<                   J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          °D  R   R   Ðˆ<                   J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          Š]  F   F   €€  ÿÿÿÿÿÿ            ]      è    Œ$0H`l
-  è= è4mesh        q^        Ô€               _  P   P   Ð€<                0 J    Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          [Þ  R   R   Ð€<                @  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          tß  R   R   Ðˆ<                @  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          „à  R   R   Ðˆ<                @  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          ‹á  R   R   Ðˆ<                @  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          ‰â  R   R   Ðˆ<                @  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          ¢ã  R   R   Ðˆ<                @  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          Öä  R   R   Ðˆ<                @  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          O       Ô€               Í 2   2   Ð€<                P J 4mesh 7           Æ› F   F   €€  ÿÿÿÿÿÿ     	     	 Æ›     è    Œ$0H`l
+     	     	 J     Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          @        Ô€       	        ¦  A   A   €€  ÿÿÿÿÿÿ     	     	  ¦      è    Œ$0H`l  è4mesh        Á  R   R   Ð€<      	             J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          Ñ        Ô€                 P   P   Ð€<           	     	0 J    Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          à        Ô€       	          R   R   Ð€<           	     	@  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          Ç        Ô€       	          P   P   Ð€<      	           J     Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          �        Ô€               }>  R   R   Ð€<                   J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          „?  R   R   Ðˆ<                   J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          ¦@  R   R   Ðˆ<                   J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          ­A  R   R   Ðˆ<                   J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          ¢B  R   R   Ðˆ<                   J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          —C  R   R   Ðˆ<                   J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          °D  R   R   Ðˆ<                   J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          Š]  F   F   €€  ÿÿÿÿÿÿ          0 ]      è    Œ$0H`l
+  è= è4mesh        q^        Ô€               _  P   P   Ð€<                @ J    Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          [Þ  R   R   Ð€<                P  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          tß  R   R   Ðˆ<                P  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          „à  R   R   Ðˆ<                P  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          ‹á  R   R   Ðˆ<                P  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          ‰â  R   R   Ðˆ<                P  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          ¢ã  R   R   Ðˆ<                P  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          Öä  R   R   Ðˆ<                P  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          O       Ô€               Í 2   2   Ð€<                ` J 4mesh 7           Æ› F   F   €€  ÿÿÿÿÿÿ     	     	P Æ›     è    Œ$0H`l
   è] è4mesh        º¥ A   A   €€  ÿÿÿÿÿÿ     
      
- J¥     è    Œ$0H`l œè4mesh        �Ó R   R   Ð€<                `  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          ¶Ô R   R   Ðˆ<                `  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          ØÕ R   R   Ðˆ<                `  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          × R   R   Ðˆ<                `  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          ,Ù R   R   Ðˆ<                `  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          *Ú R   R   Ðˆ<                `  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          ªþ F   F   €€  ÿÿÿÿÿÿ           1þ     è    Œ$0H`l
- œèÒè4mesh        ‘ÿ       Ô€               7  P   P   Ð€<                p J    Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          {s R   R   Ð€<                €  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          pt R   R   Ðˆ<                €  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          €u R   R   Ðˆ<                €  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          ©w R   R   Ðˆ<                €  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          øx       Ô€               æ< F   F   €€  ÿÿÿÿÿÿ     	     	  æ<     è    Œ$0H`l
+0 J¥     è    Œ$0H`l œè4mesh        �Ó R   R   Ð€<                p  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          ¶Ô R   R   Ðˆ<                p  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          ØÕ R   R   Ðˆ<                p  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          × R   R   Ðˆ<                p  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          ,Ù R   R   Ðˆ<                p  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          *Ú R   R   Ðˆ<                p  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          ªþ F   F   €€  ÿÿÿÿÿÿ          € 1þ     è    Œ$0H`l
+ œèÒè4mesh        ‘ÿ       Ô€               7  P   P   Ð€<                � J    Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          {s R   R   Ð€<                   J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          pt R   R   Ðˆ<                   J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          €u R   R   Ðˆ<                   J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          ©w R   R   Ðˆ<                   J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          øx       Ô€               æ< F   F   €€  ÿÿÿÿÿÿ     	     	` æ<     è    Œ$0H`l
  ¥èþè4mesh       š  A   A   €€  ÿÿÿÿÿÿ     
      
-  jF     è    Œ$0H`l =è4mesh       Šm  F   F   €€  ÿÿÿÿÿÿ            Q¯     è    Œ$0H`l
- =ètè4mesh       Æ› F   F   €€  ÿÿÿÿÿÿ     	     	0 Þ     è    Œ$0H`l
+@ jF     è    Œ$0H`l =è4mesh       Šm  F   F   €€  ÿÿÿÿÿÿ          ° Q¯     è    Œ$0H`l
+ =ètè4mesh       Æ› F   F   €€  ÿÿÿÿÿÿ     	     	p Þ     è    Œ$0H`l
  Fè¯è4mesh       º¥ A   A   €€  ÿÿÿÿÿÿ     
      
-0 Šç     è    Œ$0H`l Þè4mesh       ª F   F   €€  ÿÿÿÿÿÿ          0 qP     è    Œ$0H`l
- Þèè4mesh       æ< F   F   €€  ÿÿÿÿÿÿ     	     	@ &     è    Œ$0H`l
+P Šç     è    Œ$0H`l Þè4mesh       ª F   F   €€  ÿÿÿÿÿÿ          À qP     è    Œ$0H`l
+ Þèè4mesh       æ< F   F   €€  ÿÿÿÿÿÿ     	     	€ &     è    Œ$0H`l
  çèPè4mesh       š  A   A   €€  ÿÿÿÿÿÿ     
      
-@ ªˆ     è    Œ$0H`l è4mesh         L   L   ƒ  ÿÿÿÿÿÿ     
-ÿÿÿÿÿÿ       
+` ªˆ     è    Œ$0H`l è4mesh         L   L   ƒ  ÿÿÿÿÿÿ     
+ÿÿÿÿÿÿp      
      ªª           
 
 ÿÿÿÿÿÿ
-       3  L   L   ƒ  ÿÿÿÿÿÿ     	ÿÿÿÿÿÿ@      
+       3  L   L   ƒ  ÿÿÿÿÿÿ     	ÿÿÿÿÿÿ�      
     ªª           
 
 ÿÿÿÿÿÿ
-       _  L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ�      
+       _  L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿÐ      
     ªª           
 
 ÿÿÿÿÿÿ
-       o  E   E   Ð€  ÿÿÿÿÿÿ              D%            ˆ  e       
-           ¾  E   E   Ð€  ÿÿÿÿÿÿ     	     	P   D%            ˆ  û       
+       o  E   E   Ð€  ÿÿÿÿÿÿ          à   D%            ˆ  e       
+           ¾  E   E   Ð€  ÿÿÿÿÿÿ     	     	    D%            ˆ  û       
            Á  ?   ?   Ð€<      	     
      
-0   E           ˆ           
+€   E           ˆ           
           Ñ        Ô€       
-         ?   ?   Ð€<           	     	`   E         ˆ  –        
-          È        Ô€       	       V  ?   ?   Ð€<                °   E         ˆ  ,       
+         ?   ?   Ð€<           	     	°   E         ˆ  –        
+          È        Ô€       	       V  ?   ?   Ð€<                ð   E         ˆ  ,       
           Þ!        Ô€              ‰"  L   L   ƒ<      	          
-À           ªª           
+           ªª           
      
 
        ™"        Ô€              ð"  L   L   ƒ<      
      	     
-p           ªª           
+À           ªª           
      
 
        ­#        Ô€       	       p$  `   `   ƒ<      	     
-     @      
+     �      
       ªª    E  0    @  
 
 À 	                              €$        Ô€       
-       é$  `   `   ƒ<           	     €      
+       é$  `   `   ƒ<           	     Ð      
      ªª    E  0    @  
 
-À 	                              ¾%        Ô€       	       �&  `   `   ƒ<                Ð      
+À 	                              ¾%        Ô€       	       �&  `   `   ƒ<                     
      ªª    E  0    @  
 
-À 	                              »6  L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿà          ªª           
+À 	                              »6  L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ          ªª           
 ÿÿÿÿÿÿ
-       æ6  L   L   ƒ  ÿÿÿÿÿÿ     	ÿÿÿÿÿÿ�          ªª           
+       æ6  L   L   ƒ  ÿÿÿÿÿÿ     	ÿÿÿÿÿÿà          ªª           
 ÿÿÿÿÿÿ
        8  L   L   ƒ<      	     
-     P      
+            
       ªª           
 
      
        "8        Ô€       
-       ‹8  L   L   ƒ<           	            
+       ‹8  L   L   ƒ<           	     ð      
      ªª           
 
      
        H9        Ô€       	       E?        Ô€              @  `   `   ƒ<      	          
-           ªª    E  0    @  
+@          ªª    E  0    @  
 
  	À                              @        Ô€              o@  `   `   ƒ<      
      	     
-°           ªª    E  0    @  
+           ªª    E  0    @  
 
- 	À                              DA        Ô€       	       Šm  F   F   €€  ÿÿÿÿÿÿ          @ ‘ñ     è    Œ$0H`l
- è¶è4mesh       ¾V       Ô€              4W ,   ,   Ð€<      	            F                DW       Ô€              ’W ,   ,   Ð€<      
-     	     	À   F                #X       Ô€       	       Æ› F   F   €€  ÿÿÿÿÿÿ     	     	P F &     è    Œ$0H`l
+ 	À                              DA        Ô€       	       Šm  F   F   €€  ÿÿÿÿÿÿ          P‘ñ     è    Œ$0H`l
+ è¶è4mesh       ¾V       Ô€              4W ,   ,   Ð€<      	          `  F                DW       Ô€              ’W ,   ,   Ð€<      
+     	     	  F                #X       Ô€       	       Æ› F   F   €€  ÿÿÿÿÿÿ     	     	 F &     è    Œ$0H`l
  ‰èòè4mesh       ”¡ E   E   Ð€  ÿÿÿÿÿÿ     
      
-p   D%           
-   ˆ                      ã¡ E   E   Ð€  ÿÿÿÿÿÿ     	     	Ð   D%         
-   ˆ  –                   £ E   E   Ð€  ÿÿÿÿÿÿ             D%         
+À   D%           
+   ˆ                      ã¡ E   E   Ð€  ÿÿÿÿÿÿ     	     	0  D%         
+   ˆ  –                   £ E   E   Ð€  ÿÿÿÿÿÿ          p  D%         
    ˆ  ,                  º¥ A   A   €€  ÿÿÿÿÿÿ     
      
-P Ê)&     è    Œ$0H`l  &è4mesh       ª F   F   €€  ÿÿÿÿÿÿ          P ±’&     è    Œ$0H`l
+Ð Ê)&     è    Œ$0H`l  &è4mesh       ª F   F   €€  ÿÿÿÿÿÿ          €±’&     è    Œ$0H`l
   &èW&è4mesh       ”Á
  E   E   Ð€  ÿÿÿÿÿÿ     
      
-€   D%           
+à   D%           
    ˆ                      ãÁ
- E   E   Ð€  ÿÿÿÿÿÿ     	     	à   D%         
+ E   E   Ð€  ÿÿÿÿÿÿ     	     	@  D%         
    ˆ  –                   Ã
- E   E   Ð€  ÿÿÿÿÿÿ          0  D%         
-   ˆ  ,                  æ< F   F   €€  ÿÿÿÿÿÿ     	     	` fÁ-     è    Œ$0H`l
+ E   E   Ð€  ÿÿÿÿÿÿ          �  D%         
+   ˆ  ,                  æ< F   F   €€  ÿÿÿÿÿÿ     	     	PfÁ-     è    Œ$0H`l
  *&è“&è4mesh       š  A   A   €€  ÿÿÿÿÿÿ     
      
-` êÊ-     è    Œ$0H`l Á-è4mesh       Šm  F   F   €€  ÿÿÿÿÿÿ          ` Ñ3.     è    Œ$0H`l
+ð êÊ-     è    Œ$0H`l Á-è4mesh       Šm  F   F   €€  ÿÿÿÿÿÿ           Ñ3.     è    Œ$0H`l
  Á-èø-è4mesh       Tß E   E   Ð€  ÿÿÿÿÿÿ     
      
-�   D%           
-   ˆ                      £ß E   E   Ð€  ÿÿÿÿÿÿ     	     	ð   D%         
-   ˆ  –                   Ûà E   E   Ð€  ÿÿÿÿÿÿ          @  D%         
-   ˆ  ,                  Æ› F   F   €€  ÿÿÿÿÿÿ     	     	p †b5     è    Œ$0H`l
+   D%           
+   ˆ                      £ß E   E   Ð€  ÿÿÿÿÿÿ     	     	`  D%         
+   ˆ  –                   Ûà E   E   Ð€  ÿÿÿÿÿÿ          °  D%         
+   ˆ  ,                  Æ› F   F   €€  ÿÿÿÿÿÿ     	     	p†b5     è    Œ$0H`l
  Ë-è4.è4mesh       º¥ A   A   €€  ÿÿÿÿÿÿ     
      
-p 
-l5     è    Œ$0H`l b5è4mesh       ª F   F   €€  ÿÿÿÿÿÿ          p ñÔ5     è    Œ$0H`l
- b5è™5è4mesh       ²Ø	 E   E   Ð€  ÿÿÿÿÿÿ          P  D%            ˆ  Î       
-           Ù	 E   E   Ð€  ÿÿÿÿÿÿ     	     	   D%            ˆ  d       
+
+l5     è    Œ$0H`l b5è4mesh       ª F   F   €€  ÿÿÿÿÿÿ          ÀñÔ5     è    Œ$0H`l
+ b5è™5è4mesh       ²Ø	 E   E   Ð€  ÿÿÿÿÿÿ          Ð  D%            ˆ  Î       
+           Ù	 E   E   Ð€  ÿÿÿÿÿÿ     	     	€  D%            ˆ  d       
            Ú	 ?   ?   Ð€<      	     
      
-    E           ˆ           
+   E           ˆ           
           Ú	       Ô€       
-       bÚ	 ?   ?   Ð€<           	     	  E         ˆ  –        
+       bÚ	 ?   ?   Ð€<           	     	�  E         ˆ  –        
           Û	       Ô€       	       Ý	 `   `   ‹<      	     
-     °      
+     0     
       ªª    E  0   @  
 
 À 	                              +Ý	       Ô€       
-       ‚Ý	 `   `   ƒ<           	           
+       ‚Ý	 `   `   ƒ<           	           
      ªª    E  0   @  
 
 À 	                              WÞ	       Ô€       	       ‹à	 `   `   ‹<      	     
-     À      
+     @     
       ªª    E  0   @  
 
 À 	                              ›à	       Ô€       
-       ûà	 `   `   ƒ<           	     0     
+       ûà	 `   `   ƒ<           	     °     
      ªª    E  0   @  
 
 À 	                              Ðá	       Ô€       	       Ïå	 `   `   ‹<      	     
-     Ð      
+     P     
       ªª    E  0   @  
 
 À 	                              ßå	       Ô€       
-       6æ	 `   `   ƒ<           	     @     
+       6æ	 `   `   ƒ<           	     À     
      ªª    E  0   @  
 
-À 	                              Ïç	       Ô€              0è	 `   `   ‹<           	     @     
+À 	                              Ïç	       Ô€              0è	 `   `   ‹<           	     À     
      ªª    E  0   @  
 
-À 	                              ¡é	 `   `   ‹<           	     @     
+À 	                              ¡é	 `   `   ‹<           	     À     
      ªª    E  0   @  
 
 À 	                              “ë	 `   `   ‹<      	          
-�          ªª    E  0   @  
+          ªª    E  0   @  
 
- 	À                              £ë	       Ô€              'ì	 `   `   ‹<           	     @     
+ 	À                              £ë	       Ô€              'ì	 `   `   ‹<           	     À     
      ªª    E  0   @  
 
-À 	                              üì	       Ô€       	       Úí	 `   `   ƒ<                      
+À 	                              üì	       Ô€       	       Úí	 `   `   ƒ<                      
      ªª    E  0   @  
 
 À 	                              Jî	 `   `   ƒ<      
      	     
-P          ªª    E  0   @  
+Ð          ªª    E  0   @  
 
- 	À                              ï	       Ô€       	       �ò	       Ô€              ûó	 `   `   ‹<                      
+ 	À                              ï	       Ô€       	       �ò	       Ô€              ûó	 `   `   ‹<                      
      ªª    E  0   @  
 
 À 	                              Tö	 `   `   ƒ<      	          
-°          ªª    E  0   @  
+0          ªª    E  0   @  
 
  	À                              dö	       Ô€              »ö	 `   `   ƒ<      
      	     
-`          ªª    E  0   @  
+à          ªª    E  0   @  
 
  	À                              �÷	       Ô€       	       Àÿ	       Ô€              ƒ 
  `   `   ƒ<      	          
-À          ªª    E  0   @  
+@          ªª    E  0   @  
 
  	À                              “ 
        Ô€              ê 
  `   `   ƒ<      
      	     
-p          ªª    E  0   @  
+ð          ªª    E  0   @  
 
  	À                              ¿
-       Ô€       	       æ< F   F   €€  ÿÿÿÿÿÿ     	     	€ ¦=     è    Œ$0H`l
+       Ô€       	       æ< F   F   €€  ÿÿÿÿÿÿ     	     	 ¦=     è    Œ$0H`l
  l5èÕ5è4mesh       ˜   `   `   ƒ<      	     
-     à      
+     `     
       ªª    E  0   @  
 
 À 	                              ¨         Ô€       
-       ÿ   `   `   ƒ<           	     €     
+       ÿ   `   `   ƒ<           	          
      ªª    E  0   @  
 
-À 	                              Ó  `   `   ‹<           	     €     
+À 	                              Ó  `   `   ‹<           	          
      ªª    E  0   @  
 
 À 	                              ¨        Ô€       	       É	        Ô€              Œ
   `   `   ƒ<      	          
-à          ªª    E  0   @  
+`          ªª    E  0   @  
 
  	À                              œ
         Ô€              ó
   `   `   ƒ<      
      	     
-�          ªª    E  0   @  
+           ªª    E  0   @  
 
- 	À                              È        Ô€       	       Šm  F   F   €€  ÿÿÿÿÿÿ          € v=     è    Œ$0H`l
- =è:=è4mesh       Æ› F   F   €€  ÿÿÿÿÿÿ     	     	� Æ¤D     è    Œ$0H`l
+ 	À                              È        Ô€       	       Šm  F   F   €€  ÿÿÿÿÿÿ          pv=     è    Œ$0H`l
+ =è:=è4mesh       Æ› F   F   €€  ÿÿÿÿÿÿ     	     	0Æ¤D     è    Œ$0H`l
  l5èv=è4mesh       ¸¡ `   `   ƒ<      	     
-     ð      
+     €     
       ªª    E  0   @  
 
 À 	                              È¡       Ô€       
-       ¢ `   `   ƒ<           	           
+       ¢ `   `   ƒ<           	     @     
      ªª    E  0   @  
 
-À 	                              ô¢       Ô€       	       ·£ `   `   ƒ<                ð     
+À 	                              ô¢       Ô€       	       ·£ `   `   ƒ<                €     
      ªª    E  0   @  
 
-À 	                              ¤ ,   ,   Ð€<           	     	°  F      
-          ñ¤ ,   ,   Ðˆ<           	     	°  F      
+À 	                              ¤ ,   ,   Ð€<           	     	P  F      
+          ñ¤ ,   ,   Ðˆ<           	     	P  F      
           ‚¥       Ô€       	       {¦ 2   2   Ð€<      
-     	     	ÀJ 4mesh 7          §       Ô€       	       v¨ 2   2   Ðˆ<      	     
+     	     	`J 4mesh 7          §       Ô€       	       v¨ 2   2   Ðˆ<      	     
      
- J 4mesh 7          †¨       Ô€       
-       ª F   F   €€  ÿÿÿÿÿÿ          � 1E     è    Œ$0H`l
- ¥DèÜDè4mesh       æ< A   A   €€  ÿÿÿÿÿÿ     	     	  æEL     è    Œ$0H`lEè4mesh        > R   R   Ð€<      	     
-     
- J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7         >       Ô€       
-       ^> P   P   Ð€<      
-     	     	ÐJ    Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬ 9 7         F? P   P   Ðˆ<      
-     	     	ÐJ    Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬ 9 7         @       Ô€       	       )@ R   R   Ð€<      
-     	     	à J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7         î@       Ô€       	       ”A P   P   Ð€<      	     
+ J 4mesh 7          †¨       Ô€       
+       ª F   F   €€  ÿÿÿÿÿÿ           1E     è    Œ$0H`l
+ ¥DèÜDè4mesh       æ< A   A   €€  ÿÿÿÿÿÿ     	     	pæEL     è    Œ$0H`lEè4mesh       > R   R   Ð€<      	     
+     
+° J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7         >       Ô€       
+       _> P   P   Ð€<      
+     	     	€J    Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬ 9 7         G? P   P   Ðˆ<      
+     	     	€J    Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬ 9 7         @       Ô€       	       *@ R   R   Ð€<      
+     	     	� J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7         ï@       Ô€       	       •A P   P   Ð€<      	     
      
- J    Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬ 9 7         ¤A       Ô€       
+ÀJ    Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬ 9 7         ¥A       Ô€       
        š,  A   A   €€  ÿÿÿÿÿÿ     
      
-  jwL     è    Œ$0H`lFLè4mesh       t  E   E   Ð€  ÿÿÿÿÿÿ     
+àjwL     è    Œ$0H`lFLè4mesh       t  E   E   Ð€  ÿÿÿÿÿÿ     
      
-@  D%           
+ð  D%           
    ˆ                      –  ?   ?   Ð€<      
-     	     	ð  E        
+     	     	   E        
    ”  d                 ?!       Ô€       	       " `   `   ƒ<      	     
-     P     
+           
       ªª    E  0   @  
 
 À 	                              "       Ô€       
-       i" `   `   ƒ<           	           
+       i" `   `   ƒ<           	     °     
      ªª    E  0   @  
 
-À 	                              ›# E   E   Ð€  ÿÿÿÿÿÿ     	     	  D%         
-   ˆ  »                   å$ `   `   ‹<           	           
+À 	                              ›# E   E   Ð€  ÿÿÿÿÿÿ     	     	À  D%         
+   ˆ  »                   å$ `   `   ‹<           	     °     
      ªª    E  0   @  
 
-À 	                              m' `   `   ‹<           	           
+À 	                              m' `   `   ‹<           	     °     
      ªª    E  0   @  
 
-À 	                              Ž* `   `   ‹<           	           
+À 	                              Ž* `   `   ‹<           	     °     
      ªª    E  0   @  
 
-À 	                              (- `   `   ‹<           	           
+À 	                              (- `   `   ‹<           	     °     
      ªª    E  0   @  
 
-À 	                              ò5 `   `   ‹<           	           
+À 	                              ò5 `   `   ‹<           	     °     
      ªª    E  0   @  
 
-À 	                              	I `   `   ‹<           	           
+À 	                              	I `   `   ‹<           	     °     
      ªª    E  0   @  
 
-À 	                              Æ› F   F   €€  ÿÿÿÿÿÿ     	     	° çS     è    Œ$0H`l
+À 	                              Æ› F   F   €€  ÿÿÿÿÿÿ     	     	ÐçS     è    Œ$0H`l
 EèwLè4mesh       ô¤ `   `   ‹<      	     
-     `     
+          
       ªª    E  0   @  
 
 À 	                              ¥       Ô€       
-       [¥ `   `   ƒ<           	           
+       [¥ `   `   ƒ<           	     à     
      ªª    E  0   @  
 
-À 	                              r¦ `   `   ‹<           	           
+À 	                              r¦ `   `   ‹<           	     à     
      ªª    E  0   @  
 
-À 	                              Ö¨ `   `   ‹<           	           
+À 	                              Ö¨ `   `   ‹<           	     à     
      ªª    E  0   @  
 
-À 	                              Á« `   `   ‹<           	           
+À 	                              Á« `   `   ‹<           	     à     
      ªª    E  0   @  
 
-À 	                              È° `   `   ‹<           	           
+À 	                              È° `   `   ‹<           	     à     
      ªª    E  0   @  
 
-À 	                              ^½ `   `   ‹<           	           
+À 	                              ^½ `   `   ‹<           	     à     
      ªª    E  0   @  
 
-À 	                              OÃ `   `   ‹<           	           
+À 	                              OÃ `   `   ‹<           	     à     
      ªª    E  0   @  
 
-À 	                              TÄ 2   2   Ð€<           	     	0J 4mesh 7          &Å 2   2   Ðˆ<           	     	0J 4mesh 7          Æ 2   2   Ðˆ<           	     	0J 4mesh 7          åÆ 2   2   Ðˆ<           	     	0J 4mesh 7          íÇ 2   2   Ðˆ<           	     	0J 4mesh 7          ìÈ 2   2   Ðˆ<           	     	0J 4mesh 7          ÇÉ 2   2   Ðˆ<           	     	0J 4mesh 7          ºù A   A   €€  ÿÿÿÿÿÿ     
+À 	                              TÄ 2   2   Ð€<           	     	ðJ 4mesh 7          &Å 2   2   Ðˆ<           	     	ðJ 4mesh 7          Æ 2   2   Ðˆ<           	     	ðJ 4mesh 7          åÆ 2   2   Ðˆ<           	     	ðJ 4mesh 7          íÇ 2   2   Ðˆ<           	     	ðJ 4mesh 7          ìÈ 2   2   Ðˆ<           	     	ðJ 4mesh 7          ÇÉ 2   2   Ðˆ<           	     	ðJ 4mesh 7          ºù A   A   €€  ÿÿÿÿÿÿ     
      
-° ŠDT     è    Œ$0H`lçSè4mesh       : 6   6   Ð€<      
-     	     	@  F                        5 6   6   Ðˆ<      
-     	     	@  F                        Ò       Ô€       	       t€ E   E   Ð€  ÿÿÿÿÿÿ     
+ ŠDT     è    Œ$0H`lçSè4mesh       : 6   6   Ð€<      
+     	     	   F                        5 6   6   Ðˆ<      
+     	     	   F                        Ò       Ô€       	       t€ E   E   Ð€  ÿÿÿÿÿÿ     
      
-p  D%           
-	   ˆ                      Ã€ E   E   Ð€  ÿÿÿÿÿÿ     	     	P  D%         
-	   ˆ  É                   æ< A   A   €€  ÿÿÿÿÿÿ     	     	À &ˆ[     è    Œ$0H`lDTè4mesh       šX  A   A   €€  ÿÿÿÿÿÿ     
+0  D%           
+	   ˆ                      Ã€ E   E   Ð€  ÿÿÿÿÿÿ     	     	  D%         
+	   ˆ  É                   æ< A   A   €€  ÿÿÿÿÿÿ     	     	 &ˆ[     è    Œ$0H`lDTè4mesh       šX  A   A   €€  ÿÿÿÿÿÿ     
      
-À ªå[     è    Œ$0H`lˆ[è4mesh       Æ› A   A   €€  ÿÿÿÿÿÿ     	     	Ð F)c     è    Œ$0H`læ[è4mesh       4¾	 E   E   Ð€  ÿÿÿÿÿÿ     
+@ªå[     è    Œ$0H`lˆ[è4mesh       Æ› A   A   €€  ÿÿÿÿÿÿ     	     	0F)c     è    Œ$0H`læ[è4mesh       4¾	 E   E   Ð€  ÿÿÿÿÿÿ     
      
-€  D%           
+`  D%           
 
-   ˆ                      ƒ¾	 E   E   Ð€  ÿÿÿÿÿÿ     	     	`  D%         
+   ˆ                      ƒ¾	 E   E   Ð€  ÿÿÿÿÿÿ     	     	@  D%         
 
-   ˆ  É                   æ< A   A   €€  ÿÿÿÿÿÿ     	     	à fÊj     è    Œ$0H`læ[è4mesh       ZV  2   2   Ð€<      
-     	     	pJ 4mesh 7          óV        Ô€       	       qW  2   2   Ð€<      	     
+   ˆ  É                   æ< A   A   €€  ÿÿÿÿÿÿ     	     	PfÊj     è    Œ$0H`læ[è4mesh       ZV  2   2   Ð€<      
+     	     	`J 4mesh 7          óV        Ô€       	       qW  2   2   Ð€<      	     
      
-�J 4mesh 7          �W        Ô€       
+pJ 4mesh 7          �W        Ô€       
        šX  A   A   €€  ÿÿÿÿÿÿ     
      
-à ê'k     è    Œ$0H`l)cè4mesh       ¼X  R   R   Ð€<      
-     	     	€ J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7         �Y        Ô€       	       ÿY  2   2   Ð€<      	     
+€ê'k     è    Œ$0H`l)cè4mesh       ¼X  R   R   Ð€<      
+     	     	p J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7         �Y        Ô€       	       ÿY  2   2   Ð€<      	     
      
- J 4mesh 7          Z        Ô€       
+�J 4mesh 7          Z        Ô€       
        ]Z  2   2   Ð€<      
-     	     	�J 4mesh 7          öZ        Ô€       	       Æw <   <   €€  ÿÿÿÿÿÿ     	     	ð †Gr     è    Œ$0H`l 4mesh       Øx R   R   Ð€<      	     
+     	     	€J 4mesh 7          öZ        Ô€       	       Æw <   <   €€  ÿÿÿÿÿÿ     	     	�†Gr     è    Œ$0H`l 4mesh       Ùx R   R   Ð€<      	     
      
-° J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7         èx       Ô€       
-       6y P   P   Ð€<      
-     	     	 J    Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬  9 7         ÷y       Ô€       	       4z R   R   Ð€<      
-     	     	° J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7         ùz       Ô€       	       Ÿ{ P   P   Ð€<      	     
+  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7         éx       Ô€       
+       7y P   P   Ð€<      
+     	     	 J    Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬  9 7         øy       Ô€       	       5z R   R   Ð€<      
+     	     	° J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7         úz       Ô€       	        { P   P   Ð€<      	     
      
-ÀJ    Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬ 9 7         ¯{       Ô€       
+°J    Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬ 9 7         °{       Ô€       
        º! A   A   €€  ÿÿÿÿÿÿ     
      
-ð 
-ñr     è    Œ$0H`lGrè4mesh       æ A   A   €€  ÿÿÿÿÿÿ     	     	 ¦èy     è    Œ$0H`lñrè4mesh       t   E   E   Ð€  ÿÿÿÿÿÿ     
+À
+ñr     è    Œ$0H`lGrè4mesh       æ A   A   €€  ÿÿÿÿÿÿ     	     	À¦èy     è    Œ$0H`lñrè4mesh       t   E   E   Ð€  ÿÿÿÿÿÿ     
      
-Ð  D%           
-   ˆ                      Ã   E   E   Ð€  ÿÿÿÿÿÿ     	     	À  D%         
+Ð  D%           
+   ˆ                      Ã   E   E   Ð€  ÿÿÿÿÿÿ     	     	Ð  D%         
    ˆ  œ                   š¤  A   A   €€  ÿÿÿÿÿÿ     
      
- *¶z     è    Œ$0H`lGrè4mesh       t  E   E   Ð€  ÿÿÿÿÿÿ     
+à*¶z     è    Œ$0H`lGrè4mesh       t  E   E   Ð€  ÿÿÿÿÿÿ     
      
-à  D%   	        
-   ˆ                      Ã  E   E   Ð€  ÿÿÿÿÿÿ     	     	Ð  D% 	        
-   ˆ  œ                   Jv 2   2   Ð€<      	     
+ð  D%   	        
+   ˆ                      Ã  E   E   Ð€  ÿÿÿÿÿÿ     	     	à  D% 	        
+   ˆ  œ                   Kv 2   2   Ð€<      	     
      
-ðJ 4mesh 7          Zv       Ô€       
-       ¨v 2   2   Ð€<      
-     	     	àJ 4mesh 7          Aw       Ô€       	       Æw A   A   €€  ÿÿÿÿÿÿ     	     	Æ‰�     è    Œ$0H`l¶zè4mesh       àx R   R   Ð€<      	     
+ J 4mesh 7          [v       Ô€       
+       ©v 2   2   Ð€<      
+     	     	ðJ 4mesh 7          Bw       Ô€       	       Æw A   A   €€  ÿÿÿÿÿÿ     	     	 Æ‰�     è    Œ$0H`l¶zè4mesh       áx R   R   Ð€<      	     
      
-  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7         ðx       Ô€       
-       >y 2   2   Ð€<      
-     	     	ðJ 4mesh 7          ×y       Ô€       	       ³| R   R   Ðˆ<      	     
+ J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7         ñx       Ô€       
+       ?y 2   2   Ð€<      
+     	     	J 4mesh 7          Øy       Ô€       	       ´| R   R   Ðˆ<      	     
      
-  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7         Ã|       Ô€       
-       n} 2   2   Ð€<      	     
+ J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7         Ä|       Ô€       
+       o} 2   2   Ð€<      	     
      
-J 4mesh 7          ~}       Ô€       
+ J 4mesh 7          }       Ô€       
        ²u <   <   €€  ÿÿÿÿÿÿ     
      
-J‡‚     è    Œ$0H`l 4mesh       Ôu R   R   Ð€<      
-     	     	  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7         öv R   R   Ðˆ<      
-     	     	  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7         »w       Ô€       	       ax P   P   Ð€<      	     
+0J‡‚     è    Œ$0H`l 4mesh       Ôu R   R   Ð€<      
+     	     	  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7         öv R   R   Ðˆ<      
+     	     	  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7         »w       Ô€       	       ax P   P   Ð€<      	     
      
- J    Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬  9 7         qx       Ô€       
+@J    Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬  9 7         qx       Ô€       
        Qy R   R   Ð€<      	     
      
-0 J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7         ay       Ô€       
+P J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7         ay       Ô€       
        ¯y P   P   Ð€<      
-     	     	J    Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬ 9 7         pz       Ô€       	       t€ E   E   Ð€  ÿÿÿÿÿÿ     
+     	     	0J    Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬ 9 7         pz       Ô€       	       t€ E   E   Ð€  ÿÿÿÿÿÿ     
      
-@  D%   
+`  D%   
         
-   ˆ                      Ã€ E   E   Ð€  ÿÿÿÿÿÿ     	     	   D% 
+   ˆ                      Ã€ E   E   Ð€  ÿÿÿÿÿÿ     	     	@  D% 
         
-   ˆ  l                   æ  A   A   €€  ÿÿÿÿÿÿ     	     	 æ‰     è    Œ$0H`l‡‚è4mesh    	   šÔ  A   A   €€  ÿÿÿÿÿÿ     
+   ˆ  l                   æ  A   A   €€  ÿÿÿÿÿÿ     	     	Pæ‰     è    Œ$0H`l‡‚è4mesh    	   šÔ  A   A   €€  ÿÿÿÿÿÿ     
      
- j(Š     è    Œ$0H`l‰è4mesh    	   Æ_ A   A   €€  ÿÿÿÿÿÿ     	     	0´�     è    Œ$0H`l(Šè4mesh    	   ºu A   A   €€  ÿÿÿÿÿÿ     
+pj(Š     è    Œ$0H`l‰è4mesh    	   Æ_ A   A   €€  ÿÿÿÿÿÿ     	     	`´�     è    Œ$0H`l(Šè4mesh    	   ºu A   A   €€  ÿÿÿÿÿÿ     
      
-0ŠÉ‘     è    Œ$0H`l‰è4mesh    	   4¾	 E   E   Ð€  ÿÿÿÿÿÿ     
+€ŠÉ‘     è    Œ$0H`l‰è4mesh    	   4¾	 E   E   Ð€  ÿÿÿÿÿÿ     
      
-P  D%           
-   ˆ                   	   ƒ¾	 E   E   Ð€  ÿÿÿÿÿÿ     	     	0  D%         
-   ˆ  l                	   rÿ 2   2   Ð€<      	     
+�  D%           
+   ˆ                   	   ƒ¾	 E   E   Ð€  ÿÿÿÿÿÿ     	     	p  D%         
+   ˆ  l                	   sÿ 2   2   Ð€<      	     
      
-`J 4mesh 7       	   ‚ÿ       Ô€       
-    	   Ðÿ 2   2   Ð€<      
-     	     	@J 4mesh 7       	   �  2   2   Ðˆ<      
-     	     	@J 4mesh 7       	          Ô€       	    	   3 A   A   €€  ÿÿÿÿÿÿ     	     	@&U˜     è    Œ$0H`lÉ‘è4mesh    	   N R   R   Ð€<      	     
+ J 4mesh 7       	   ƒÿ       Ô€       
+    	   Ñÿ 2   2   Ð€<      
+     	     	€J 4mesh 7       	   ‚  2   2   Ðˆ<      
+     	     	€J 4mesh 7       	          Ô€       	    	   4 A   A   €€  ÿÿÿÿÿÿ     	     	�&U˜     è    Œ$0H`lÉ‘è4mesh    	   O R   R   Ð€<      	     
      
-p J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7      	   ^       Ô€       
-    	   Ç 2   2   Ð€<      
-     	     	PJ 4mesh 7       	   `       Ô€       	    	   Þ 2   2   Ð€<      	     
+° J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7      	   _       Ô€       
+    	   È 2   2   Ð€<      
+     	     	 J 4mesh 7       	   a       Ô€       	    	   ß 2   2   Ð€<      	     
      
-€J 4mesh 7       	   î       Ô€       
+ÀJ 4mesh 7       	   ï       Ô€       
     
\ No newline at end of file
diff -Naur ns-3.19/src/mesh/test/dot11s/hwmp-reactive-regression-test-5-1.pcap ns-3.20/src/mesh/test/dot11s/hwmp-reactive-regression-test-5-1.pcap
--- ns-3.19/src/mesh/test/dot11s/hwmp-reactive-regression-test-5-1.pcap	2014-06-17 10:34:00.458636507 -0700
+++ ns-3.20/src/mesh/test/dot11s/hwmp-reactive-regression-test-5-1.pcap	2014-06-17 10:33:13.815996564 -0700
@@ -3,372 +3,371 @@
   *      è    Œ$0H`l 4mesh        =  R   R   Ð€<      
      	     	   J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          M        Ô€       	        ›  P   P   Ð€<      	     
      
-  J     Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬  9 7          \        Ô€       
+ J     Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬  9 7          \        Ô€       
         ™  R   R   Ð€<      	     
      
-  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          ^        Ô€       
+   J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          ^        Ô€       
           P   P   Ð€<      
-     	     	 J     Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬ 9 7                  Ô€       	          A   A   €€  ÿÿÿÿÿÿ     	     	  ¦      è    Œ$0H`l  è4mesh        ý        Ô€               £  P   P   Ð€<           	     	  J    Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          Š  R   R   Ð€<           	     	0  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          »        Ô€               >œ F   F   €€  ÿÿÿÿÿÿ     	     	 Æ›     è    Œ$0H`l
+     	     	 J     Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬ 9 7                  Ô€       	          A   A   €€  ÿÿÿÿÿÿ     	     	  ¦      è    Œ$0H`l  è4mesh        ý        Ô€               £  P   P   Ð€<           	     	0 J    Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          Š  R   R   Ð€<           	     	@  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          »        Ô€               >œ F   F   €€  ÿÿÿÿÿÿ     	     	P Æ›     è    Œ$0H`l
   è] è4mesh        J¥ A   A   €€  ÿÿÿÿÿÿ     
      
- J¥     è    Œ$0H`l œè4mesh        ^= F   F   €€  ÿÿÿÿÿÿ     	     	  æ<     è    Œ$0H`l
+0 J¥     è    Œ$0H`l œè4mesh        ^= F   F   €€  ÿÿÿÿÿÿ     	     	` æ<     è    Œ$0H`l
  ¥èþè4mesh       *  A   A   €€  ÿÿÿÿÿÿ     
      
-  jF     è    Œ$0H`l =è4mesh       >œ F   F   €€  ÿÿÿÿÿÿ     	     	0 Þ     è    Œ$0H`l
+@ jF     è    Œ$0H`l =è4mesh       >œ F   F   €€  ÿÿÿÿÿÿ     	     	p Þ     è    Œ$0H`l
  Fè¯è4mesh       J¥ A   A   €€  ÿÿÿÿÿÿ     
      
-0 Šç     è    Œ$0H`l Þè4mesh       ^= F   F   €€  ÿÿÿÿÿÿ     	     	@ &     è    Œ$0H`l
+P Šç     è    Œ$0H`l Þè4mesh       ^= F   F   €€  ÿÿÿÿÿÿ     	     	€ &     è    Œ$0H`l
  çèPè4mesh       *  A   A   €€  ÿÿÿÿÿÿ     
      
-@ ªˆ     è    Œ$0H`l è4mesh       ˆ  L   L   ƒ  ÿÿÿÿÿÿ     
-ÿÿÿÿÿÿ       
+` ªˆ     è    Œ$0H`l è4mesh       ˆ  L   L   ƒ  ÿÿÿÿÿÿ     
+ÿÿÿÿÿÿp      
      ªª           
 
 ÿÿÿÿÿÿ
-       ³  L   L   ƒ  ÿÿÿÿÿÿ     	ÿÿÿÿÿÿ@      
+       ´  L   L   ƒ  ÿÿÿÿÿÿ     	ÿÿÿÿÿÿ�      
     ªª           
 
 ÿÿÿÿÿÿ
-       2  E   E   Ð€  ÿÿÿÿÿÿ     	     	P   D%            ˆ  û       
-           T  ?   ?   Ð€<      	     
+       3  E   E   Ð€  ÿÿÿÿÿÿ     	     	    D%            ˆ  û       
+           U  ?   ?   Ð€<      	     
      
-0   E           ˆ           
-          ý        Ô€       
-       ‹  ?   ?   Ð€<           	     	`   E         ˆ  –        
-          Å"        Ô€              p#  L   L   ƒ<      
+€   E           ˆ           
+          þ        Ô€       
+       Œ  ?   ?   Ð€<           	     	°   E         ˆ  –        
+          Æ"        Ô€              q#  L   L   ƒ<      
      	     
-p           ªª           
+À           ªª           
      
 
-       €#        Ô€       	       ×#  `   `   ƒ<      	     
-     @      
+       �#        Ô€       	       Ø#  `   `   ƒ<      	     
+     �      
       ªª    E  0    @  
 
-À 	                              ¬$        Ô€       
-       �%  `   `   ƒ<           	     €      
+À 	                              ­$        Ô€       
+       ‚%  `   `   ƒ<           	     Ð      
      ªª    E  0    @  
 
-À 	                              f7  L   L   ƒ  ÿÿÿÿÿÿ     	ÿÿÿÿÿÿ�          ªª           
+À 	                              g7  L   L   ƒ  ÿÿÿÿÿÿ     	ÿÿÿÿÿÿà          ªª           
 ÿÿÿÿÿÿ
-       ‘7  L   L   ƒ<      	     
-     P      
+       ’7  L   L   ƒ<      	     
+            
       ªª           
 
      
-       N8        Ô€       
-       9  L   L   ƒ<           	            
+       O8        Ô€       
+       9  L   L   ƒ<           	     ð      
      ªª           
 
      
-       Ÿ9  L   L   ƒ  ÿÿÿÿÿÿ     
-ÿÿÿÿÿÿ`          ªª           
+        9  L   L   ƒ  ÿÿÿÿÿÿ     
+ÿÿÿÿÿÿ°          ªª           
 ÿÿÿÿÿÿ
-       D@        Ô€              A  `   `   ƒ<      
+       E@        Ô€              A  `   `   ƒ<      
      	     
-°           ªª    E  0    @  
+           ªª    E  0    @  
 
- 	À                              A        Ô€       	       qW       Ô€              çW ,   ,   Ð€<      
-     	     	À   F                ÷W       Ô€       	       >œ F   F   €€  ÿÿÿÿÿÿ     	     	P F &     è    Œ$0H`l
+ 	À                              A        Ô€       	       qW       Ô€              çW ,   ,   Ð€<      
+     	     	  F                ÷W       Ô€       	       >œ F   F   €€  ÿÿÿÿÿÿ     	     	 F &     è    Œ$0H`l
  ‰èòè4mesh        ¡ E   E   Ð€  ÿÿÿÿÿÿ     
      
-p   D%           
-   ˆ                      W¢ E   E   Ð€  ÿÿÿÿÿÿ     	     	Ð   D%         
+À   D%           
+   ˆ                      X¢ E   E   Ð€  ÿÿÿÿÿÿ     	     	0  D%         
    ˆ  –                   J¥ A   A   €€  ÿÿÿÿÿÿ     
      
-P Ê)&     è    Œ$0H`l  &è4mesh        Á
+Ð Ê)&     è    Œ$0H`l  &è4mesh        Á
  E   E   Ð€  ÿÿÿÿÿÿ     
      
-€   D%           
-   ˆ                      WÂ
- E   E   Ð€  ÿÿÿÿÿÿ     	     	à   D%         
-   ˆ  –                   ^= F   F   €€  ÿÿÿÿÿÿ     	     	` fÁ-     è    Œ$0H`l
+à   D%           
+   ˆ                      XÂ
+ E   E   Ð€  ÿÿÿÿÿÿ     	     	@  D%         
+   ˆ  –                   ^= F   F   €€  ÿÿÿÿÿÿ     	     	PfÁ-     è    Œ$0H`l
  *&è“&è4mesh       *  A   A   €€  ÿÿÿÿÿÿ     
      
-` êÊ-     è    Œ$0H`l Á-è4mesh       àÞ E   E   Ð€  ÿÿÿÿÿÿ     
+ð êÊ-     è    Œ$0H`l Á-è4mesh       àÞ E   E   Ð€  ÿÿÿÿÿÿ     
      
-�   D%           
-   ˆ                      à E   E   Ð€  ÿÿÿÿÿÿ     	     	ð   D%         
-   ˆ  –                   >œ F   F   €€  ÿÿÿÿÿÿ     	     	p †b5     è    Œ$0H`l
+   D%           
+   ˆ                      à E   E   Ð€  ÿÿÿÿÿÿ     	     	`  D%         
+   ˆ  –                   >œ F   F   €€  ÿÿÿÿÿÿ     	     	p†b5     è    Œ$0H`l
  Ë-è4.è4mesh       J¥ A   A   €€  ÿÿÿÿÿÿ     
      
-p 
-l5     è    Œ$0H`l b5è4mesh       uÙ	 E   E   Ð€  ÿÿÿÿÿÿ     	     	   D%            ˆ  d       
-           —Ù	 ?   ?   Ð€<      	     
-     
-    E           ˆ           
-          @Ú	       Ô€       
-       ÎÚ	 ?   ?   Ð€<           	     	  E         ˆ  –        
-          5Û	 `   `   ƒ<      	     
-     °      
+
+l5     è    Œ$0H`l b5è4mesh       vÙ	 E   E   Ð€  ÿÿÿÿÿÿ     	     	€  D%            ˆ  d       
+           ˜Ù	 ?   ?   Ð€<      	     
+     
+   E           ˆ           
+          AÚ	       Ô€       
+       ÏÚ	 ?   ?   Ð€<           	     	�  E         ˆ  –        
+          6Û	 `   `   ƒ<      	     
+     0     
       ªª    E  0   @  
 
-À 	                              ‚Ü	 `   `   ‹<      	     
-     °      
+À 	                              ƒÜ	 `   `   ‹<      	     
+     0     
       ªª    E  0   @  
 
-À 	                              WÝ	       Ô€       
-       Þ	 `   `   ƒ<           	           
+À 	                              XÝ	       Ô€       
+       Þ	 `   `   ƒ<           	           
      ªª    E  0   @  
 
-À 	                              ÛÞ	 `   `   ƒ<      	     
-     À      
+À 	                              ÜÞ	 `   `   ƒ<      	     
+     @     
       ªª    E  0   @  
 
-À 	                              òß	 `   `   ‹<      	     
-     À      
+À 	                              óß	 `   `   ‹<      	     
+     @     
       ªª    E  0   @  
 
-À 	                              Çà	       Ô€       
-       Tâ	 `   `   ƒ<      	     
-     Ð      
+À 	                              Èà	       Ô€       
+       Uâ	 `   `   ƒ<      	     
+     P     
       ªª    E  0   @  
 
-À 	                              ä	 `   `   ‹<      	     
-     Ð      
+À 	                              ä	 `   `   ‹<      	     
+     P     
       ªª    E  0   @  
 
-À 	                              6å	 `   `   ‹<      	     
-     Ð      
+À 	                              7å	 `   `   ‹<      	     
+     P     
       ªª    E  0   @  
 
-À 	                              æ	       Ô€       
-       Îæ	 `   `   ƒ<           	     @     
+À 	                              æ	       Ô€       
+       Ïæ	 `   `   ƒ<           	     À     
      ªª    E  0   @  
 
-À 	                              Èè	 `   `   ‹<           	     @     
+À 	                              Éè	 `   `   ‹<           	     À     
      ªª    E  0   @  
 
-À 	                              9ê	 `   `   ‹<           	     @     
+À 	                              :ê	 `   `   ‹<           	     À     
      ªª    E  0   @  
 
-À 	                              Ïë	       Ô€              ¿ì	 `   `   ‹<           	     @     
+À 	                              Ðë	       Ô€              Àì	 `   `   ‹<           	     À     
      ªª    E  0   @  
 
-À 	                              âî	 `   `   ƒ<      
+À 	                              ãî	 `   `   ƒ<      
      	     
-P          ªª    E  0   @  
+Ð          ªª    E  0   @  
 
- 	À                              òî	       Ô€       	       �ö	       Ô€              S÷	 `   `   ƒ<      
+ 	À                              óî	       Ô€       	       ‘ö	       Ô€              T÷	 `   `   ƒ<      
      	     
-`          ªª    E  0   @  
+à          ªª    E  0   @  
 
- 	À                              c÷	       Ô€       	       ¿ 
-       Ô€              ‚
+ 	À                              d÷	       Ô€       	       À 
+       Ô€              ƒ
  `   `   ƒ<      
      	     
-p          ªª    E  0   @  
+ð          ªª    E  0   @  
 
- 	À                              ’
-       Ô€       	       ^= F   F   €€  ÿÿÿÿÿÿ     	     	€ ¦=     è    Œ$0H`l
+ 	À                              “
+       Ô€       	       ^= F   F   €€  ÿÿÿÿÿÿ     	     	 ¦=     è    Œ$0H`l
  l5èÕ5è4mesh           `   `   ƒ<      	     
-     à      
+     `     
       ªª    E  0   @  
 
-À 	                              Ô         Ô€       
-       k  `   `   ‹<           	     €     
+À 	                              Õ         Ô€       
+       l  `   `   ‹<           	          
      ªª    E  0   @  
 
 À 	                              *  A   A   €€  ÿÿÿÿÿÿ     
      
-€ *=     è    Œ$0H`l =è4mesh       È
-        Ô€              ‹  `   `   ƒ<      
+p*=     è    Œ$0H`l =è4mesh       É
+        Ô€              Œ  `   `   ƒ<      
      	     
-�          ªª    E  0   @  
+           ªª    E  0   @  
 
- 	À                              ›        Ô€       	       >œ F   F   €€  ÿÿÿÿÿÿ     	     	� Æ¤D     è    Œ$0H`l
+ 	À                              œ        Ô€       	       >œ F   F   €€  ÿÿÿÿÿÿ     	     	0Æ¤D     è    Œ$0H`l
  l5èv=è4mesh        ¡ `   `   ƒ<      	     
-     ð      
+     €     
       ªª    E  0   @  
 
-À 	                              ô¡       Ô€       
-       ·¢ `   `   ƒ<           	           
+À 	                              õ¡       Ô€       
+       ¸¢ `   `   ƒ<           	     @     
      ªª    E  0   @  
 
-À 	                              i¤ ,   ,   Ð€<           	     	°  F      
-          E¥ ,   ,   Ðˆ<           	     	°  F      
-          š¥ A   A   €€  ÿÿÿÿÿÿ     
+À 	                              j¤ ,   ,   Ð€<           	     	P  F      
+          F¥ ,   ,   Ðˆ<           	     	P  F      
+          ›¥ A   A   €€  ÿÿÿÿÿÿ     
      
-� J®D     è    Œ$0H`l ¥Dè4mesh       ×¦ 2   2   Ð€<      
-     	     	ÀJ 4mesh 7          ç¦       Ô€       	       5§ 2   2   Ð€<      	     
+�J®D     è    Œ$0H`l ¥Dè4mesh       Ø¦ 2   2   Ð€<      
+     	     	`J 4mesh 7          è¦       Ô€       	       6§ 2   2   Ð€<      	     
      
- J 4mesh 7          ¨ 2   2   Ðˆ<      	     
+ J 4mesh 7          ¨ 2   2   Ðˆ<      	     
      
- J 4mesh 7          ²¨       Ô€       
-       V= A   A   €€  ÿÿÿÿÿÿ     	     	  æEL     è    Œ$0H`lEè4mesh       x= R   R   Ð€<      	     
+ J 4mesh 7          ³¨       Ô€       
+       V= A   A   €€  ÿÿÿÿÿÿ     	     	pæEL     è    Œ$0H`lEè4mesh       x= R   R   Ð€<      	     
      
- J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7         =>       Ô€       
+° J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7         =>       Ô€       
        Ë? P   P   Ðˆ<      
-     	     	ÐJ    Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬ 9 7         Û?       Ô€       	       ²@ R   R   Ð€<      
-     	     	à J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7         Â@       Ô€       	       A P   P   Ð€<      	     
+     	     	€J    Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬ 9 7         Û?       Ô€       	       ²@ R   R   Ð€<      
+     	     	� J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬ 9 7         Â@       Ô€       	       A P   P   Ð€<      	     
      
- J    Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬ 9 7         ÑA       Ô€       
+ÀJ    Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬ 9 7         ÑA       Ô€       
            E   E   Ð€  ÿÿÿÿÿÿ     
      
-0  D%           
+Ð  D%           
    ˆ                      *,  A   A   €€  ÿÿÿÿÿÿ     
      
-  jwL     è    Œ$0H`lFLè4mesh          E   E   Ð€  ÿÿÿÿÿÿ     
+àjwL     è    Œ$0H`lFLè4mesh          E   E   Ð€  ÿÿÿÿÿÿ     
      
-@  D%           
-   ˆ                      ! ?   ?   Ð€<      
-     	     	ð  E        
-   ”  d                 !       Ô€       	       i! `   `   ƒ<      	     
-     P     
+ð  D%           
+   ˆ                      ! ?   ?   Ð€<      
+     	     	   E        
+   ”  d                 !       Ô€       	       j! `   `   ƒ<      	     
+           
       ªª    E  0   @  
 
-À 	                              >"       Ô€       
-       # `   `   ƒ<           	           
+À 	                              ?"       Ô€       
+       # `   `   ƒ<           	     °     
      ªª    E  0   @  
 
-À 	                              $ E   E   Ð€  ÿÿÿÿÿÿ     	     	  D%         
-   ˆ  »                   }% `   `   ‹<           	           
+À 	                              $ E   E   Ð€  ÿÿÿÿÿÿ     	     	À  D%         
+   ˆ  »                   ~% `   `   ‹<           	     °     
      ªª    E  0   @  
 
-À 	                              ( `   `   ‹<           	           
+À 	                              ( `   `   ‹<           	     °     
      ªª    E  0   @  
 
-À 	                              &+ `   `   ‹<           	           
+À 	                              '+ `   `   ‹<           	     °     
      ªª    E  0   @  
 
-À 	                              À- `   `   ‹<           	           
+À 	                              Á- `   `   ‹<           	     °     
      ªª    E  0   @  
 
-À 	                              Š6 `   `   ‹<           	           
+À 	                              ‹6 `   `   ‹<           	     °     
      ªª    E  0   @  
 
-À 	                              ¡I `   `   ‹<           	           
+À 	                              ¢I `   `   ‹<           	     °     
      ªª    E  0   @  
 
-À 	                              >œ F   F   €€  ÿÿÿÿÿÿ     	     	° çS     è    Œ$0H`l
+À 	                              >œ F   F   €€  ÿÿÿÿÿÿ     	     	ÐçS     è    Œ$0H`l
 EèwLè4mesh        ¡ `   `   ƒ<      	     
-     `     
+          
       ªª    E  0   @  
 
 À 	                              7¢ `   `   ‹<      	     
-     `     
+          
       ªª    E  0   @  
 
 À 	                              \¤ `   `   ‹<      	     
-     `     
+          
       ªª    E  0   @  
 
-À 	                              0¥       Ô€       
-       
-§ `   `   ‹<           	           
+À 	                              1¥       Ô€       
+       § `   `   ‹<           	     à     
      ªª    E  0   @  
 
-À 	                              n© `   `   ‹<           	           
+À 	                              o© `   `   ‹<           	     à     
      ªª    E  0   @  
 
-À 	                              Y¬ `   `   ‹<           	           
+À 	                              Z¬ `   `   ‹<           	     à     
      ªª    E  0   @  
 
-À 	                              `± `   `   ‹<           	           
+À 	                              a± `   `   ‹<           	     à     
      ªª    E  0   @  
 
-À 	                              çÃ `   `   ‹<           	           
+À 	                              èÃ `   `   ‹<           	     à     
      ªª    E  0   @  
 
-À 	                              °Ä 2   2   Ð€<           	     	0J 4mesh 7          ‚Å 2   2   Ðˆ<           	     	0J 4mesh 7          xÆ 2   2   Ðˆ<           	     	0J 4mesh 7          AÇ 2   2   Ðˆ<           	     	0J 4mesh 7          IÈ 2   2   Ðˆ<           	     	0J 4mesh 7          HÉ 2   2   Ðˆ<           	     	0J 4mesh 7          #Ê 2   2   Ðˆ<           	     	0J 4mesh 7          Jù A   A   €€  ÿÿÿÿÿÿ     
+À 	                              ±Ä 2   2   Ð€<           	     	ðJ 4mesh 7          ƒÅ 2   2   Ðˆ<           	     	ðJ 4mesh 7          yÆ 2   2   Ðˆ<           	     	ðJ 4mesh 7          BÇ 2   2   Ðˆ<           	     	ðJ 4mesh 7          JÈ 2   2   Ðˆ<           	     	ðJ 4mesh 7          IÉ 2   2   Ðˆ<           	     	ðJ 4mesh 7          $Ê 2   2   Ðˆ<           	     	ðJ 4mesh 7          Jù A   A   €€  ÿÿÿÿÿÿ     
      
-° ŠDT     è    Œ$0H`lçSè4mesh       › 6   6   Ð€<      
-     	     	@  F                        «       Ô€       	       – 6   6   Ðˆ<      
-     	     	@  F                        ¦       Ô€       	        € E   E   Ð€  ÿÿÿÿÿÿ     
+ ŠDT     è    Œ$0H`lçSè4mesh       › 6   6   Ð€<      
+     	     	   F                        «       Ô€       	       – 6   6   Ðˆ<      
+     	     	   F                        ¦       Ô€       	        € E   E   Ð€  ÿÿÿÿÿÿ     
      
-p  D%           
-	   ˆ                      7� E   E   Ð€  ÿÿÿÿÿÿ     	     	P  D%         
-	   ˆ  É                   V= A   A   €€  ÿÿÿÿÿÿ     	     	À &ˆ[     è    Œ$0H`lDTè4mesh       *X  A   A   €€  ÿÿÿÿÿÿ     
+0  D%           
+	   ˆ                      8� E   E   Ð€  ÿÿÿÿÿÿ     	     	  D%         
+	   ˆ  É                   V= A   A   €€  ÿÿÿÿÿÿ     	     	 &ˆ[     è    Œ$0H`lDTè4mesh       *X  A   A   €€  ÿÿÿÿÿÿ     
      
-À ªå[     è    Œ$0H`lˆ[è4mesh       6œ A   A   €€  ÿÿÿÿÿÿ     	     	Ð F)c     è    Œ$0H`læ[è4mesh       Jù A   A   €€  ÿÿÿÿÿÿ     
+@ªå[     è    Œ$0H`lˆ[è4mesh       6œ A   A   €€  ÿÿÿÿÿÿ     	     	0F)c     è    Œ$0H`læ[è4mesh       Jù A   A   €€  ÿÿÿÿÿÿ     
      
-Ð Ê†c     è    Œ$0H`l)cè4mesh       À½	 E   E   Ð€  ÿÿÿÿÿÿ     
+PÊ†c     è    Œ$0H`l)cè4mesh       À½	 E   E   Ð€  ÿÿÿÿÿÿ     
      
-€  D%           
+`  D%           
 
-   ˆ                      ÷¾	 E   E   Ð€  ÿÿÿÿÿÿ     	     	`  D%         
+   ˆ                      ø¾	 E   E   Ð€  ÿÿÿÿÿÿ     	     	@  D%         
 
    ˆ  É                   ·V  2   2   Ð€<      
-     	     	pJ 4mesh 7          ÇV        Ô€       	       W  2   2   Ð€<      	     
+     	     	`J 4mesh 7          ÇV        Ô€       	       W  2   2   Ð€<      	     
      
-�J 4mesh 7          ®W        Ô€       
+pJ 4mesh 7          ®W        Ô€       
        *X  A   A   €€  ÿÿÿÿÿÿ     
      
-à ê'k     è    Œ$0H`l)cè4mesh       EY  R   R   Ð€<      
-     	     	€ J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7         UY        Ô€       	       £Y  2   2   Ð€<      	     
+€ê'k     è    Œ$0H`l)cè4mesh       EY  R   R   Ð€<      
+     	     	p J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7         UY        Ô€       	       £Y  2   2   Ð€<      	     
      
- J 4mesh 7          <Z        Ô€       
+�J 4mesh 7          <Z        Ô€       
        ºZ  2   2   Ð€<      
-     	     	�J 4mesh 7          ÊZ        Ô€       	       .x <   <   €€  ÿÿÿÿÿÿ     	     	ð †Gr     è    Œ$0H`l 4mesh       Px R   R   Ð€<      	     
+     	     	€J 4mesh 7          ÊZ        Ô€       	       .x <   <   €€  ÿÿÿÿÿÿ     	     	�†Gr     è    Œ$0H`l 4mesh       Px R   R   Ð€<      	     
      
-° J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7         y       Ô€       
+  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7         y       Ô€       
        »y P   P   Ð€<      
-     	     	 J    Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬  9 7         Ëy       Ô€       	       ½z R   R   Ð€<      
-     	     	° J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7         Íz       Ô€       	       { P   P   Ð€<      	     
+     	     	 J    Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬  9 7         Ëy       Ô€       	       ½z R   R   Ð€<      
+     	     	° J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7         Íz       Ô€       	       { P   P   Ð€<      	     
      
-ÀJ    Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬ 9 7         Ü{       Ô€       
+°J    Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬ 9 7         Ü{       Ô€       
        J! A   A   €€  ÿÿÿÿÿÿ     
      
-ð 
+À
 ñr     è    Œ$0H`lGrè4mesh           E   E   Ð€  ÿÿÿÿÿÿ     
      
-Ð  D%           
-   ˆ                      7  E   E   Ð€  ÿÿÿÿÿÿ     	     	À  D%         
+Ð  D%           
+   ˆ                      8  E   E   Ð€  ÿÿÿÿÿÿ     	     	Ð  D%         
    ˆ  œ                   *¤  A   A   €€  ÿÿÿÿÿÿ     
      
- *¶z     è    Œ$0H`lGrè4mesh          E   E   Ð€  ÿÿÿÿÿÿ     
+à*¶z     è    Œ$0H`lGrè4mesh          E   E   Ð€  ÿÿÿÿÿÿ     
      
-à  D%   	        
-   ˆ                      7! E   E   Ð€  ÿÿÿÿÿÿ     	     	Ð  D% 	        
+ð  D%   	        
+   ˆ                      8! E   E   Ð€  ÿÿÿÿÿÿ     	     	à  D% 	        
    ˆ  œ                   îu 2   2   Ð€<      	     
      
-ðJ 4mesh 7          ‡v       Ô€       
+ J 4mesh 7          ‡v       Ô€       
        w 2   2   Ð€<      
-     	     	àJ 4mesh 7          w       Ô€       	       6x A   A   €€  ÿÿÿÿÿÿ     	     	Æ‰�     è    Œ$0H`l¶zè4mesh       Xx R   R   Ð€<      	     
+     	     	ðJ 4mesh 7          w       Ô€       	       6x A   A   €€  ÿÿÿÿÿÿ     	     	 Æ‰�     è    Œ$0H`l¶zè4mesh       Xx R   R   Ð€<      	     
      
-  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7         ›y 2   2   Ð€<      
-     	     	ðJ 4mesh 7          «y       Ô€       	       z R   R   Ðˆ<      	     
+ J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7         ›y 2   2   Ð€<      
+     	     	J 4mesh 7          «y       Ô€       	       z R   R   Ðˆ<      	     
      
-  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7         -{ R   R   Ðˆ<      	     
+ J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7         -{ R   R   Ðˆ<      	     
      
-  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7         +| R   R   Ðˆ<      	     
+ J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7         +| R   R   Ðˆ<      	     
      
-  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7         ð|       Ô€       
+ J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7         ð|       Ô€       
        } 2   2   Ð€<      	     
      
-J 4mesh 7          «}       Ô€       
+ J 4mesh 7          «}       Ô€       
        Ju <   <   €€  ÿÿÿÿÿÿ     
      
-J‡‚     è    Œ$0H`l 4mesh       w R   R   Ðˆ<      
-     	     	  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7         �w       Ô€       	       Ýw P   P   Ð€<      	     
+0J‡‚     è    Œ$0H`l 4mesh       w R   R   Ðˆ<      
+     	     	  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7         �w       Ô€       	       Ýw P   P   Ð€<      	     
      
- J    Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬  9 7         žx       Ô€       
+@J    Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬  9 7         žx       Ô€       
        Éx R   R   Ð€<      	     
      
-0 J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7         Žy       Ô€       
+P J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7         Žy       Ô€       
        4z P   P   Ð€<      
-     	     	J    Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬ 9 7         Dz       Ô€       	        € E   E   Ð€  ÿÿÿÿÿÿ     
+     	     	0J    Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬ 9 7         Dz       Ô€       	        € E   E   Ð€  ÿÿÿÿÿÿ     
      
-@  D%   
+`  D%   
         
-   ˆ                      7� E   E   Ð€  ÿÿÿÿÿÿ     	     	   D% 
+   ˆ                      8� E   E   Ð€  ÿÿÿÿÿÿ     	     	@  D% 
         
-   ˆ  l                   V A   A   €€  ÿÿÿÿÿÿ     	     	 æ‰     è    Œ$0H`l‡‚è4mesh    	   *Ô  A   A   €€  ÿÿÿÿÿÿ     
+   ˆ  l                   V A   A   €€  ÿÿÿÿÿÿ     	     	Pæ‰     è    Œ$0H`l‡‚è4mesh    	   *Ô  A   A   €€  ÿÿÿÿÿÿ     
      
- j(Š     è    Œ$0H`l‰è4mesh    	   Ju A   A   €€  ÿÿÿÿÿÿ     
+pj(Š     è    Œ$0H`l‰è4mesh    	   Ju A   A   €€  ÿÿÿÿÿÿ     
      
-0ŠÉ‘     è    Œ$0H`l‰è4mesh    	   À½	 E   E   Ð€  ÿÿÿÿÿÿ     
+€ŠÉ‘     è    Œ$0H`l‰è4mesh    	   À½	 E   E   Ð€  ÿÿÿÿÿÿ     
      
-P  D%           
-   ˆ                   	   ÷¾	 E   E   Ð€  ÿÿÿÿÿÿ     	     	0  D%         
+�  D%           
+   ˆ                   	   ø¾	 E   E   Ð€  ÿÿÿÿÿÿ     	     	p  D%         
    ˆ  l                	   ÿ 2   2   Ð€<      	     
      
-`J 4mesh 7       	   ¯ÿ       Ô€       
+ J 4mesh 7       	   ¯ÿ       Ô€       
     	   Þ  2   2   Ðˆ<      
-     	     	@J 4mesh 7       	   î        Ô€       	    	   ¤ A   A   €€  ÿÿÿÿÿÿ     	     	@&U˜     è    Œ$0H`lÉ‘è4mesh    	   Æ R   R   Ð€<      	     
+     	     	€J 4mesh 7       	   î        Ô€       	    	   ¤ A   A   €€  ÿÿÿÿÿÿ     	     	�&U˜     è    Œ$0H`lÉ‘è4mesh    	   Æ R   R   Ð€<      	     
      
-p J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7      	   ‹       Ô€       
+° J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7      	   ‹       Ô€       
     	   $ 2   2   Ð€<      
-     	     	PJ 4mesh 7       	   4       Ô€       	    	   ‚ 2   2   Ð€<      	     
+     	     	 J 4mesh 7       	   4       Ô€       	    	   ‚ 2   2   Ð€<      	     
      
-€J 4mesh 7       	          Ô€       
+ÀJ 4mesh 7       	          Ô€       
     
\ No newline at end of file
diff -Naur ns-3.19/src/mesh/test/dot11s/hwmp-simplest-regression-test-0-1.pcap ns-3.20/src/mesh/test/dot11s/hwmp-simplest-regression-test-0-1.pcap
--- ns-3.19/src/mesh/test/dot11s/hwmp-simplest-regression-test-0-1.pcap	2014-06-17 10:34:00.460636492 -0700
+++ ns-3.20/src/mesh/test/dot11s/hwmp-simplest-regression-test-0-1.pcap	2014-06-17 10:33:13.818996541 -0700
@@ -1,720 +1,731 @@
-ÔÃ²¡          ÿÿ  i       Óý  <   <   €€  ÿÿÿÿÿÿ            ký      è    Œ$0H`l 4mesh        õý  R   R   Ð€<                   J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          ¹þ        Ô€               _ÿ  P   P   Ð€<                  J     Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬  9 7          oÿ        Ô€               `  R   R   Ð€<                  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          p        Ô€               ¾  P   P   Ð€<                 J     Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          ~       Ô€               JO A   A   €€  ÿÿÿÿÿÿ            JO     è    Œ$0H`l ý è4mesh        ûž A   A   €€  ÿÿÿÿÿÿ           ‹ž     è    Œ$0H`l Oè4mesh        jð A   A   €€  ÿÿÿÿÿÿ           jð     è    Œ$0H`l žè4mesh       Ûý  A   A   €€  ÿÿÿÿÿÿ            «?     è    Œ$0H`l ðè4mesh       JO A   A   €€  ÿÿÿÿÿÿ            Š‘     è    Œ$0H`l @è4mesh       ûž A   A   €€  ÿÿÿÿÿÿ          0 Ëà     è    Œ$0H`l ‘è4mesh       jð A   A   €€  ÿÿÿÿÿÿ          0 ª2     è    Œ$0H`l áè4mesh       Ø  L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ            ªª           
+ÔÃ²¡          ÿÿ  i       Óý  <   <   €€  ÿÿÿÿÿÿ            ký      è    Œ$0H`l 4mesh        õý  R   R   Ð€<                   J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          ¹þ        Ô€               _ÿ  P   P   Ð€<                 J     Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬  9 7          oÿ        Ô€               `  R   R   Ð€<                   J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          p        Ô€               ¾  P   P   Ð€<                 J     Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          ~       Ô€               JO A   A   €€  ÿÿÿÿÿÿ            JO     è    Œ$0H`l ý è4mesh        ûž A   A   €€  ÿÿÿÿÿÿ          0 ‹ž     è    Œ$0H`l Oè4mesh        jð A   A   €€  ÿÿÿÿÿÿ          0 jð     è    Œ$0H`l žè4mesh       Ûý  A   A   €€  ÿÿÿÿÿÿ          @ «?     è    Œ$0H`l ðè4mesh       JO A   A   €€  ÿÿÿÿÿÿ          @ Š‘     è    Œ$0H`l @è4mesh       ûž A   A   €€  ÿÿÿÿÿÿ          P Ëà     è    Œ$0H`l ‘è4mesh       jð A   A   €€  ÿÿÿÿÿÿ          P ª2     è    Œ$0H`l áè4mesh       Ø  L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ`           ªª           
 ÿÿÿÿÿÿ
-         L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ           ªª           
+         L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ`          ªª           
 ÿÿÿÿÿÿ
-       Ò  E   E   Ð€  ÿÿÿÿÿÿ          0   D%              ˆ                      Ô  ?   ?   Ð€<                0   E           ˆ                     ä        Ô€              h  L   L   ƒ<                @            ªª           
+       Ò  E   E   Ð€  ÿÿÿÿÿÿ          p   D%              ˆ                      Ô  ?   ?   Ð€<                p   E           ˆ                     ä        Ô€              h  L   L   ƒ<                €            ªª           
      
-       $        Ô€              S   °   °   ƒ<                @            ªª    E  €    @  
+       $        Ô€              S   °   °   ƒ<                €            ªª    E  €    @  
 
-À 	 l                                                                                                             c         Ô€              {C  L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿP           ªª           
+À 	 l                                                                                                             c         Ô€              {C  L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ�           ªª           
 ÿÿÿÿÿÿ
-       ¦D  L   L   ƒ<                P            ªª           
+       ¦D  L   L   ƒ<                �            ªª           
      
-       ¶D        Ô€              ‚E  °   °   ƒ<                `            ªª    E  €    @  
+       ¶D        Ô€              ‚E  °   °   ƒ<                             ªª    E  €    @  
 
- 	À l                                                                                                             ÂF        Ô€              G  L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ`          ªª           
+ 	À l                                                                                                             ÂF        Ô€              G  L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ           ªª           
 ÿÿÿÿÿÿ
-       TÄ  °   °   ƒ<                p            ªª    E  €   @  
+       TÄ  °   °   ƒ<                °            ªª    E  €   @  
 
-À 	 l                                                                                                             dÄ        Ô€              »Ä  °   °   ƒ<                p            ªª    E  €   @  
+À 	 l                                                                                                             dÄ        Ô€              »Ä  °   °   ƒ<                °            ªª    E  €   @  
 
- 	À l                                                                                                             ûÅ        Ô€              Ûý  A   A   €€  ÿÿÿÿÿÿ          @ ë�     è    Œ$0H`l 3è4mesh       JO A   A   €€  ÿÿÿÿÿÿ          @ ÊÓ     è    Œ$0H`l ‚è4mesh       ¤‡ °   °   ƒ<                €            ªª    E  €   @  
+ 	À l                                                                                                             ûÅ        Ô€              Ûý  A   A   €€  ÿÿÿÿÿÿ          À ë�     è    Œ$0H`l 3è4mesh       JO A   A   €€  ÿÿÿÿÿÿ          À ÊÓ     è    Œ$0H`l ‚è4mesh       ¤‡ °   °   ƒ<                Ð            ªª    E  €   @  
 
-À 	 l                                                                                                             ´‡       Ô€              ˆ °   °   ƒ<                €            ªª    E  €   @  
+À 	 l                                                                                                             ´‡       Ô€              ˆ °   °   ƒ<                Ð            ªª    E  €   @  
 
- 	À l                                                                                                             K‰       Ô€              ôJ °   °   ƒ<                �            ªª    E  €   @  
+ 	À l                                                                                                             K‰       Ô€              ôJ °   °   ƒ<                à            ªª    E  €   @  
 
-À 	 l                                                                                                             K       Ô€              [K °   °   ƒ<                �            ªª    E  €   @  
+À 	 l                                                                                                             K       Ô€              [K °   °   ƒ<                à            ªª    E  €   @  
 
- 	À l                                                                                                             ›L       Ô€              D °   °   ƒ<                             ªª    E  €   @  
+ 	À l                                                                                                             ›L       Ô€              D °   °   ƒ<                ð            ªª    E  €   @  
 
-À 	 l                                                                                                             T       Ô€              « °   °   ƒ<                             ªª    E  €   @  
+À 	 l                                                                                                             T       Ô€              « °   °   ƒ<                ð            ªª    E  €   @  
 
- 	À l                                                                                                             ë       Ô€              ”Ñ °   °   ƒ<                °            ªª    E  €   @  
+ 	À l                                                                                                             ë       Ô€              ”Ñ °   °   ƒ<                            ªª    E  €   @  
 
-À 	 l                                                                                                             ¤Ñ       Ô€              ûÑ °   °   ƒ<                °            ªª    E  €   @  
+À 	 l                                                                                                             ¤Ñ       Ô€              ûÑ °   °   ƒ<                            ªª    E  €   @  
 
- 	À l                                                                                                             ;Ó       Ô€              ”” °   °   ƒ<                À            ªª    E  €   @  
+ 	À l                                                                                                             ;Ó       Ô€              ”” °   °   ƒ<                           ªª    E  €   @  
 
-À 	 l                                                                                                             ¤”       Ô€              û” °   °   ƒ<                À            ªª    E  €   @  
+À 	 l                                                                                                             ¤”       Ô€              û” °   °   ƒ<                           ªª    E  €   @  
 
- 	À l                                                                                                             ;–       Ô€              äW °   °   ƒ<                Ð            ªª    E  €   @  
+ 	À l                                                                                                             ;–       Ô€              äW °   °   ƒ<                            ªª    E  €   @  
 
-À 	 l                                                                                                             ôW       Ô€              KX °   °   ƒ<                Ð            ªª    E  €   @  
+À 	 l                                                                                                             ôW       Ô€              KX °   °   ƒ<                            ªª    E  €   @  
 
- 	À l                                                                                                             ;Y       Ô€              4 °   °   ƒ<                à            ªª    E  €   @  
+ 	À l                                                                                                             ;Y       Ô€              4 °   °   ƒ<                0           ªª    E  €   @  
 
-À 	 l                                                                                                             D       Ô€              › °   °   ƒ<                à            ªª    E  €   @  
+À 	 l                                                                                                             D       Ô€              › °   °   ƒ<                0           ªª    E  €   @  
 
- 	À l                                                                                                             ‹       Ô€              „Þ °   °   ƒ<                ð            ªª    E  € 	  @  
+ 	À l                                                                                                             ‹       Ô€              „Þ °   °   ƒ<                @           ªª    E  € 	  @  
 
-À 	 l                                                                                                             ”Þ       Ô€              ëÞ °   °   ƒ<                ð            ªª    E  € 	  @  
+À 	 l                                                                                                             ”Þ       Ô€              ëÞ °   °   ƒ<                @           ªª    E  € 	  @  
 
- 	À l                                                                                                             Ûß       Ô€              Ô¡ °   °   ƒ<                            ªª    E  € 
+ 	À l                                                                                                             Ûß       Ô€              Ô¡ °   °   ƒ<                P           ªª    E  € 
   @  
 
-À 	 l                                                                                                             ä¡       Ô€              ;¢ °   °   ƒ<                            ªª    E  € 
+À 	 l                                                                                                             ä¡       Ô€              ;¢ °   °   ƒ<                P           ªª    E  € 
   @  
 
- 	À l                                                                                                             +£       Ô€              $e °   °   ƒ<                           ªª    E  €   @  
+ 	À l                                                                                                             +£       Ô€              $e °   °   ƒ<                `           ªª    E  €   @  
 
-À 	 l                                                                                                             4e       Ô€              ‹e °   °   ƒ<                           ªª    E  €   @  
+À 	 l                                                                                                             4e       Ô€              ‹e °   °   ƒ<                `           ªª    E  €   @  
 
- 	À l                                                                                                             {f       Ô€              ûž A   A   €€  ÿÿÿÿÿÿ          P #'     è    Œ$0H`l Ôè4mesh       jð A   A   €€  ÿÿÿÿÿÿ          P êt'     è    Œ$0H`l #'è4mesh       t(	 °   °   ƒ<                            ªª    E  €   @  
+ 	À l                                                                                                             {f       Ô€              ûž A   A   €€  ÿÿÿÿÿÿ          p#'     è    Œ$0H`l Ôè4mesh       jð A   A   €€  ÿÿÿÿÿÿ          pêt'     è    Œ$0H`l #'è4mesh       t(	 °   °   ƒ<                €           ªª    E  €   @  
 
-À 	 l                                                                                                             „(	       Ô€              Û(	 °   °   ƒ<                            ªª    E  €   @  
+À 	 l                                                                                                             „(	       Ô€              Û(	 °   °   ƒ<                €           ªª    E  €   @  
 
- 	À l                                                                                                             Ë)	       Ô€              Äë	 °   °   ƒ<                0           ªª    E  €   @  
+ 	À l                                                                                                             Ë)	       Ô€              Äë	 °   °   ƒ<                �           ªª    E  €   @  
 
-À 	 l                                                                                                             Ôë	       Ô€              +ì	 °   °   ƒ<                0           ªª    E  €   @  
+À 	 l                                                                                                             Ôë	       Ô€              +ì	 °   °   ƒ<                �           ªª    E  €   @  
 
  	À l                                                                                                             í	       Ô€              ¯
- °   °   ƒ<                @           ªª    E  €   @  
+ °   °   ƒ<                            ªª    E  €   @  
 
 À 	 l                                                                                                             $¯
        Ô€              {¯
- °   °   ƒ<                @           ªª    E  €   @  
+ °   °   ƒ<                            ªª    E  €   @  
 
  	À l                                                                                                             k°
-       Ô€              dr °   °   ƒ<                P           ªª    E  €   @  
+       Ô€              dr °   °   ƒ<                °           ªª    E  €   @  
 
-À 	 l                                                                                                             tr       Ô€              Ër °   °   ƒ<                P           ªª    E  €   @  
+À 	 l                                                                                                             tr       Ô€              Ër °   °   ƒ<                °           ªª    E  €   @  
 
- 	À l                                                                                                             »s       Ô€              Œ5 °   °   ƒ<                `           ªª    E  €   @  
+ 	À l                                                                                                             »s       Ô€              Œ5 °   °   ƒ<                À           ªª    E  €   @  
 
-À 	 l                                                                                                             œ5       Ô€              ó5 °   °   ƒ<                `           ªª    E  €   @  
+À 	 l                                                                                                             œ5       Ô€              ó5 °   °   ƒ<                À           ªª    E  €   @  
 
- 	À l                                                                                                             ã6       Ô€              Üø °   °   ƒ<                p           ªª    E  €   @  
+ 	À l                                                                                                             ã6       Ô€              Üø °   °   ƒ<                Ð           ªª    E  €   @  
 
-À 	 l                                                                                                             ìø       Ô€              Cù °   °   ƒ<                p           ªª    E  €   @  
+À 	 l                                                                                                             ìø       Ô€              Cù °   °   ƒ<                Ð           ªª    E  €   @  
 
- 	À l                                                                                                             ú       Ô€              ,¼ °   °   ƒ<                €           ªª    E  €   @  
+ 	À l                                                                                                             ú       Ô€              ,¼ °   °   ƒ<                à           ªª    E  €   @  
 
-À 	 l                                                                                                             <¼       Ô€              “¼ °   °   ƒ<                €           ªª    E  €   @  
+À 	 l                                                                                                             <¼       Ô€              “¼ °   °   ƒ<                à           ªª    E  €   @  
 
- 	À l                                                                                                             [½       Ô€              | °   °   ƒ<                �           ªª    E  €   @  
+ 	À l                                                                                                             [½       Ô€              | °   °   ƒ<                ð           ªª    E  €   @  
 
-À 	 l                                                                                                             Œ       Ô€              ã °   °   ƒ<                �           ªª    E  €   @  
+À 	 l                                                                                                             Œ       Ô€              ã °   °   ƒ<                ð           ªª    E  €   @  
 
- 	À l                                                                                                             «€       Ô€              Œ   °   °   ƒ<                            ªª    E  €   @  
+ 	À l                                                                                                             «€       Ô€              Œ   °   °   ƒ<                            ªª    E  €   @  
 
-À 	 l                                                                                                             œ         Ô€              ó   °   °   ƒ<                            ªª    E  €   @  
+À 	 l                                                                                                             œ         Ô€              ó   °   °   ƒ<                            ªª    E  €   @  
 
- 	À l                                                                                                             »        Ô€              ÜÃ  °   °   ƒ<                °           ªª    E  €   @  
+ 	À l                                                                                                             »        Ô€              ÜÃ  °   °   ƒ<                           ªª    E  €   @  
 
-À 	 l                                                                                                             ìÃ        Ô€              CÄ  °   °   ƒ<                °           ªª    E  €   @  
+À 	 l                                                                                                             ìÃ        Ô€              CÄ  °   °   ƒ<                           ªª    E  €   @  
 
- 	À l                                                                                                             Å        Ô€              Ûý  A   A   €€  ÿÿÿÿÿÿ          ` +Ä.     è    Œ$0H`l u'è4mesh       JO A   A   €€  ÿÿÿÿÿÿ          ` 
-/     è    Œ$0H`l Ä.è4mesh       ,‡ °   °   ƒ<                À           ªª    E  €   @  
+ 	À l                                                                                                             Å        Ô€              Ûý  A   A   €€  ÿÿÿÿÿÿ           +Ä.     è    Œ$0H`l u'è4mesh       JO A   A   €€  ÿÿÿÿÿÿ           
+/     è    Œ$0H`l Ä.è4mesh       ,‡ °   °   ƒ<                0           ªª    E  €   @  
 
-À 	 l                                                                                                             <‡       Ô€              “‡ °   °   ƒ<                À           ªª    E  €   @  
+À 	 l                                                                                                             <‡       Ô€              “‡ °   °   ƒ<                0           ªª    E  €   @  
 
- 	À l                                                                                                             [ˆ       Ô€              |J °   °   ƒ<                Ð           ªª    E  €   @  
+ 	À l                                                                                                             [ˆ       Ô€              |J °   °   ƒ<                @           ªª    E  €   @  
 
-À 	 l                                                                                                             ŒJ       Ô€              ãJ °   °   ƒ<                Ð           ªª    E  €   @  
+À 	 l                                                                                                             ŒJ       Ô€              ãJ °   °   ƒ<                @           ªª    E  €   @  
 
- 	À l                                                                                                             «K       Ô€              Ì °   °   ƒ<                à           ªª    E  €   @  
+ 	À l                                                                                                             «K       Ô€              Ì °   °   ƒ<                P           ªª    E  €   @  
 
-À 	 l                                                                                                             Ü       Ô€              3 °   °   ƒ<                à           ªª    E  €   @  
+À 	 l                                                                                                             Ü       Ô€              3 °   °   ƒ<                P           ªª    E  €   @  
 
- 	À l                                                                                                             û       Ô€              Ñ °   °   ƒ<                ð           ªª    E  €   @  
+ 	À l                                                                                                             û       Ô€              Ñ °   °   ƒ<                `           ªª    E  €   @  
 
-À 	 l                                                                                                             ,Ñ       Ô€              ƒÑ °   °   ƒ<                ð           ªª    E  €   @  
+À 	 l                                                                                                             ,Ñ       Ô€              ƒÑ °   °   ƒ<                `           ªª    E  €   @  
 
- 	À l                                                                                                             KÒ       Ô€              D” °   °   ƒ<                            ªª    E  €   @  
+ 	À l                                                                                                             KÒ       Ô€              D” °   °   ƒ<                p           ªª    E  €   @  
 
-À 	 l                                                                                                             T”       Ô€              «” °   °   ƒ<                            ªª    E  €   @  
+À 	 l                                                                                                             T”       Ô€              «” °   °   ƒ<                p           ªª    E  €   @  
 
- 	À l                                                                                                             s•       Ô€              ”W °   °   ƒ<                           ªª    E  €   @  
+ 	À l                                                                                                             s•       Ô€              ”W °   °   ƒ<                €           ªª    E  €   @  
 
-À 	 l                                                                                                             ¤W       Ô€              ûW °   °   ƒ<                           ªª    E  €   @  
+À 	 l                                                                                                             ¤W       Ô€              ûW °   °   ƒ<                €           ªª    E  €   @  
 
- 	À l                                                                                                             ›X       Ô€              ä °   °   ƒ<                            ªª    E  €   @  
+ 	À l                                                                                                             ›X       Ô€              ä °   °   ƒ<                �           ªª    E  €   @  
 
-À 	 l                                                                                                             ô       Ô€              K °   °   ƒ<                            ªª    E  €   @  
+À 	 l                                                                                                             ô       Ô€              K °   °   ƒ<                �           ªª    E  €   @  
 
- 	À l                                                                                                             ë       Ô€              4Þ °   °   ƒ<                0           ªª    E  €   @  
+ 	À l                                                                                                             ë       Ô€              4Þ °   °   ƒ<                            ªª    E  €   @  
 
-À 	 l                                                                                                             DÞ       Ô€              ›Þ °   °   ƒ<                0           ªª    E  €   @  
+À 	 l                                                                                                             DÞ       Ô€              ›Þ °   °   ƒ<                            ªª    E  €   @  
 
- 	À l                                                                                                             ;ß       Ô€              „¡ °   °   ƒ<                @           ªª    E  €   @  
+ 	À l                                                                                                             ;ß       Ô€              „¡ °   °   ƒ<                °           ªª    E  €   @  
 
-À 	 l                                                                                                             ”¡       Ô€              ë¡ °   °   ƒ<                @           ªª    E  €   @  
+À 	 l                                                                                                             ”¡       Ô€              ë¡ °   °   ƒ<                °           ªª    E  €   @  
 
- 	À l                                                                                                             ‹¢       Ô€              Ôd °   °   ƒ<                P           ªª    E  €   @  
+ 	À l                                                                                                             ‹¢       Ô€              Ôd °   °   ƒ<                À           ªª    E  €   @  
 
-À 	 l                                                                                                             äd       Ô€              ;e °   °   ƒ<                P           ªª    E  €   @  
+À 	 l                                                                                                             äd       Ô€              ;e °   °   ƒ<                À           ªª    E  €   @  
 
- 	À l                                                                                                             Ûe       Ô€              ûž A   A   €€  ÿÿÿÿÿÿ          p Ke6     è    Œ$0H`l /è4mesh       jð A   A   €€  ÿÿÿÿÿÿ          p *·6     è    Œ$0H`l e6è4mesh       $(	 °   °   ƒ<                `           ªª    E  €    @  
+ 	À l                                                                                                             Ûe       Ô€              ûž A   A   €€  ÿÿÿÿÿÿ          ÐKe6     è    Œ$0H`l /è4mesh       jð A   A   €€  ÿÿÿÿÿÿ          Ð*·6     è    Œ$0H`l e6è4mesh       $(	 °   °   ƒ<                à           ªª    E  €    @  
 
-À 	 l                                                                                                             4(	       Ô€              ‹(	 °   °   ƒ<                `           ªª    E  €    @  
+À 	 l                                                                                                             4(	       Ô€              ‹(	 °   °   ƒ<                à           ªª    E  €    @  
 
- 	À l                                                                                                             +)	       Ô€              të	 °   °   ƒ<                p           ªª    E  € !  @  
+ 	À l                                                                                                             +)	       Ô€              të	 °   °   ƒ<                ð           ªª    E  € !  @  
 
-À 	 l                                                                                                             „ë	       Ô€              Ûë	 °   °   ƒ<                p           ªª    E  € !  @  
+À 	 l                                                                                                             „ë	       Ô€              Ûë	 °   °   ƒ<                ð           ªª    E  € !  @  
 
  	À l                                                                                                             {ì	       Ô€              Ä®
- °   °   ƒ<                €           ªª    E  € "  @  
+ °   °   ƒ<                            ªª    E  € "  @  
 
 À 	 l                                                                                                             Ô®
        Ô€              +¯
- °   °   ƒ<                €           ªª    E  € "  @  
+ °   °   ƒ<                            ªª    E  € "  @  
 
  	À l                                                                                                             Ë¯
-       Ô€              r °   °   ƒ<                �           ªª    E  € #  @  
+       Ô€              r °   °   ƒ<                           ªª    E  € #  @  
 
-À 	 l                                                                                                             $r       Ô€              {r °   °   ƒ<                �           ªª    E  € #  @  
+À 	 l                                                                                                             $r       Ô€              {r °   °   ƒ<                           ªª    E  € #  @  
 
- 	À l                                                                                                             s       Ô€              P5 °   °   ƒ<                            ªª    E  € $  @  
+ 	À l                                                                                                             s       Ô€              P5 °   °   ƒ<                            ªª    E  € $  @  
 
-À 	 l                                                                                                             `5       Ô€              ·5 °   °   ƒ<                            ªª    E  € $  @  
+À 	 l                                                                                                             `5       Ô€              ·5 °   °   ƒ<                            ªª    E  € $  @  
 
- 	À l                                                                                                             W6       Ô€               ø °   °   ƒ<                °           ªª    E  € %  @  
+ 	À l                                                                                                             W6       Ô€               ø °   °   ƒ<                0           ªª    E  € %  @  
 
-À 	 l                                                                                                             °ø       Ô€              ù °   °   ƒ<                °           ªª    E  € %  @  
+À 	 l                                                                                                             °ø       Ô€              ù °   °   ƒ<                0           ªª    E  € %  @  
 
- 	À l                                                                                                             “ù       Ô€              ð» °   °   ƒ<                À           ªª    E  € &  @  
+ 	À l                                                                                                             “ù       Ô€              ð» °   °   ƒ<                @           ªª    E  € &  @  
 
-À 	 l                                                                                                              ¼       Ô€              W¼ °   °   ƒ<                À           ªª    E  € &  @  
+À 	 l                                                                                                              ¼       Ô€              W¼ °   °   ƒ<                @           ªª    E  € &  @  
 
- 	À l                                                                                                             ã¼       Ô€              @ °   °   ƒ<                Ð           ªª    E  € '  @  
+ 	À l                                                                                                             ã¼       Ô€              @ °   °   ƒ<                P           ªª    E  € '  @  
 
-À 	 l                                                                                                             P       Ô€              § °   °   ƒ<                Ð           ªª    E  € '  @  
+À 	 l                                                                                                             P       Ô€              § °   °   ƒ<                P           ªª    E  € '  @  
 
- 	À l                                                                                                             3€       Ô€              P   °   °   ƒ<                à           ªª    E  € (  @  
+ 	À l                                                                                                             3€       Ô€              P   °   °   ƒ<                `           ªª    E  € (  @  
 
-À 	 l                                                                                                             `         Ô€              ·   °   °   ƒ<                à           ªª    E  € (  @  
+À 	 l                                                                                                             `         Ô€              ·   °   °   ƒ<                `           ªª    E  € (  @  
 
- 	À l                                                                                                             C        Ô€               Ã  °   °   ƒ<                ð           ªª    E  € )  @  
+ 	À l                                                                                                             C        Ô€               Ã  °   °   ƒ<                p           ªª    E  € )  @  
 
-À 	 l                                                                                                             °Ã        Ô€              Ä  °   °   ƒ<                ð           ªª    E  € )  @  
+À 	 l                                                                                                             °Ã        Ô€              Ä  °   °   ƒ<                p           ªª    E  € )  @  
 
- 	À l                                                                                                             “Ä        Ô€              Ûý  A   A   €€  ÿÿÿÿÿÿ          € k>     è    Œ$0H`l ·6è4mesh       JO A   A   €€  ÿÿÿÿÿÿ          € JX>     è    Œ$0H`l >è4mesh       ð† °   °   ƒ<                            ªª    E  € *  @  
+ 	À l                                                                                                             “Ä        Ô€              Ûý  A   A   €€  ÿÿÿÿÿÿ          €k>     è    Œ$0H`l ·6è4mesh       JO A   A   €€  ÿÿÿÿÿÿ          €JX>     è    Œ$0H`l >è4mesh       ð† °   °   ƒ<                �           ªª    E  € *  @  
 
-À 	 l                                                                                                              ‡       Ô€              W‡ °   °   ƒ<                            ªª    E  € *  @  
+À 	 l                                                                                                              ‡       Ô€              W‡ °   °   ƒ<                �           ªª    E  € *  @  
 
- 	À l                                                                                                             ã‡       Ô€              @J °   °   ƒ<                           ªª    E  € +  @  
+ 	À l                                                                                                             ã‡       Ô€              @J °   °   ƒ<                            ªª    E  € +  @  
 
-À 	 l                                                                                                             PJ       Ô€              §J °   °   ƒ<                           ªª    E  € +  @  
+À 	 l                                                                                                             PJ       Ô€              §J °   °   ƒ<                            ªª    E  € +  @  
 
- 	À l                                                                                                             3K       Ô€              � °   °   ƒ<                            ªª    E  € ,  @  
+ 	À l                                                                                                             3K       Ô€              � °   °   ƒ<                °           ªª    E  € ,  @  
 
-À 	 l                                                                                                                     Ô€              ÷ °   °   ƒ<                            ªª    E  € ,  @  
+À 	 l                                                                                                                     Ô€              ÷ °   °   ƒ<                °           ªª    E  € ,  @  
 
- 	À l                                                                                                             ƒ       Ô€              àÐ °   °   ƒ<                0           ªª    E  € -  @  
+ 	À l                                                                                                             ƒ       Ô€              àÐ °   °   ƒ<                À           ªª    E  € -  @  
 
-À 	 l                                                                                                             ðÐ       Ô€              GÑ °   °   ƒ<                0           ªª    E  € -  @  
+À 	 l                                                                                                             ðÐ       Ô€              GÑ °   °   ƒ<                À           ªª    E  € -  @  
 
- 	À l                                                                                                             ÓÑ       Ô€              ” °   °   ƒ<                @           ªª    E  € .  @  
+ 	À l                                                                                                             ÓÑ       Ô€              ” °   °   ƒ<                Ð           ªª    E  € .  @  
 
-À 	 l                                                                                                             ,”       Ô€              ƒ” °   °   ƒ<                @           ªª    E  € .  @  
+À 	 l                                                                                                             ,”       Ô€              ƒ” °   °   ƒ<                Ð           ªª    E  € .  @  
 
- 	À l                                                                                                             •       Ô€              lW °   °   ƒ<                P           ªª    E  € /  @  
+ 	À l                                                                                                             •       Ô€              lW °   °   ƒ<                à           ªª    E  € /  @  
 
-À 	 l                                                                                                             |W       Ô€              ÓW °   °   ƒ<                P           ªª    E  € /  @  
+À 	 l                                                                                                             |W       Ô€              ÓW °   °   ƒ<                à           ªª    E  € /  @  
 
- 	À l                                                                                                             KX       Ô€              ¼ °   °   ƒ<                `           ªª    E  € 0  @  
+ 	À l                                                                                                             KX       Ô€              ¼ °   °   ƒ<                ð           ªª    E  € 0  @  
 
-À 	 l                                                                                                             Ì       Ô€              # °   °   ƒ<                `           ªª    E  € 0  @  
+À 	 l                                                                                                             Ì       Ô€              # °   °   ƒ<                ð           ªª    E  € 0  @  
 
- 	À l                                                                                                             ›       Ô€              Þ °   °   ƒ<                p           ªª    E  € 1  @  
+ 	À l                                                                                                             ›       Ô€              Þ °   °   ƒ<                            ªª    E  € 1  @  
 
-À 	 l                                                                                                             Þ       Ô€              sÞ °   °   ƒ<                p           ªª    E  € 1  @  
+À 	 l                                                                                                             Þ       Ô€              sÞ °   °   ƒ<                            ªª    E  € 1  @  
 
- 	À l                                                                                                             ëÞ       Ô€              \¡ °   °   ƒ<                €           ªª    E  € 2  @  
+ 	À l                                                                                                             ëÞ       Ô€              \¡ °   °   ƒ<                           ªª    E  € 2  @  
 
-À 	 l                                                                                                             l¡       Ô€              Ã¡ °   °   ƒ<                €           ªª    E  € 2  @  
+À 	 l                                                                                                             l¡       Ô€              Ã¡ °   °   ƒ<                           ªª    E  € 2  @  
 
- 	À l                                                                                                             ;¢       Ô€              ¬d °   °   ƒ<                �           ªª    E  € 3  @  
+ 	À l                                                                                                             ;¢       Ô€              ¬d °   °   ƒ<                            ªª    E  € 3  @  
 
-À 	 l                                                                                                             ¼d       Ô€              e °   °   ƒ<                �           ªª    E  € 3  @  
+À 	 l                                                                                                             ¼d       Ô€              e °   °   ƒ<                            ªª    E  € 3  @  
 
- 	À l                                                                                                             ‹e       Ô€              ûž A   A   €€  ÿÿÿÿÿÿ          � ‹§E     è    Œ$0H`l X>è4mesh       jð A   A   €€  ÿÿÿÿÿÿ          � jùE     è    Œ$0H`l §Eè4mesh       ü'	 °   °   ƒ<                            ªª    E  € 4  @  
+ 	À l                                                                                                             ‹e       Ô€              ûž A   A   €€  ÿÿÿÿÿÿ          0‹§E     è    Œ$0H`l X>è4mesh       jð A   A   €€  ÿÿÿÿÿÿ          0jùE     è    Œ$0H`l §Eè4mesh       ü'	 °   °   ƒ<                @           ªª    E  € 4  @  
 
-À 	 l                                                                                                             (	       Ô€              c(	 °   °   ƒ<                            ªª    E  € 4  @  
+À 	 l                                                                                                             (	       Ô€              c(	 °   °   ƒ<                @           ªª    E  € 4  @  
 
- 	À l                                                                                                             Û(	       Ô€              Lë	 °   °   ƒ<                °           ªª    E  € 5  @  
+ 	À l                                                                                                             Û(	       Ô€              Lë	 °   °   ƒ<                P           ªª    E  € 5  @  
 
-À 	 l                                                                                                             \ë	       Ô€              ³ë	 °   °   ƒ<                °           ªª    E  € 5  @  
+À 	 l                                                                                                             \ë	       Ô€              ³ë	 °   °   ƒ<                P           ªª    E  € 5  @  
 
  	À l                                                                                                             +ì	       Ô€              œ®
- °   °   ƒ<                À           ªª    E  € 6  @  
+ °   °   ƒ<                `           ªª    E  € 6  @  
 
 À 	 l                                                                                                             ¬®
        Ô€              ¯
- °   °   ƒ<                À           ªª    E  € 6  @  
+ °   °   ƒ<                `           ªª    E  € 6  @  
 
  	À l                                                                                                             {¯
-       Ô€              ìq °   °   ƒ<                Ð           ªª    E  € 7  @  
+       Ô€              ìq °   °   ƒ<                p           ªª    E  € 7  @  
 
-À 	 l                                                                                                             üq       Ô€              Sr °   °   ƒ<                Ð           ªª    E  € 7  @  
+À 	 l                                                                                                             üq       Ô€              Sr °   °   ƒ<                p           ªª    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                                                                                                                     Ô€              „Ã  °   °   ƒ<                0           ªª    E  € =  @  
+ 	À l                                                                                                                     Ô€              „Ã  °   °   ƒ<                Ð           ªª    E  € =  @  
 
-À 	 l                                                                                                             ”Ã        Ô€              ëÃ  °   °   ƒ<                0           ªª    E  € =  @  
+À 	 l                                                                                                             ”Ã        Ô€              ëÃ  °   °   ƒ<                Ð           ªª    E  € =  @  
 
- 	À l                                                                                                             [Ä        Ô€              Ûý  A   A   €€  ÿÿÿÿÿÿ            «HM     è    Œ$0H`l ùEè4mesh       JO A   A   €€  ÿÿÿÿÿÿ            ŠšM     è    Œ$0H`l IMè4mesh       Ô† °   °   ƒ<                @           ªª    E  € >  @  
+ 	À l                                                                                                             [Ä        Ô€              Ûý  A   A   €€  ÿÿÿÿÿÿ          à«HM     è    Œ$0H`l ùEè4mesh       JO A   A   €€  ÿÿÿÿÿÿ          àŠšM     è    Œ$0H`l IMè4mesh       Ô† °   °   ƒ<                ð           ªª    E  € >  @  
 
-À 	 l                                                                                                             ä†       Ô€              ;‡ °   °   ƒ<                @           ªª    E  € >  @  
+À 	 l                                                                                                             ä†       Ô€              ;‡ °   °   ƒ<                ð           ªª    E  € >  @  
 
- 	À l                                                                                                             «‡       Ô€              $J °   °   ƒ<                P           ªª    E  € ?  @  
+ 	À l                                                                                                             «‡       Ô€              $J °   °   ƒ<                            ªª    E  € ?  @  
 
-À 	 l                                                                                                             4J       Ô€              ‹J °   °   ƒ<                P           ªª    E  € ?  @  
+À 	 l                                                                                                             4J       Ô€              ‹J °   °   ƒ<                            ªª    E  € ?  @  
 
- 	À l                                                                                                             ûJ       Ô€              t °   °   ƒ<                `           ªª    E  € @  @  
+ 	À l                                                                                                             ûJ       Ô€              t °   °   ƒ<                           ªª    E  € @  @  
 
-À 	 l                                                                                                             „       Ô€              Û °   °   ƒ<                `           ªª    E  € @  @  
+À 	 l                                                                                                             „       Ô€              Û °   °   ƒ<                           ªª    E  € @  @  
 
- 	À l                                                                                                             K       Ô€              ÄÐ °   °   ƒ<                p           ªª    E  € A  @  
+ 	À l                                                                                                             K       Ô€              ÄÐ °   °   ƒ<                            ªª    E  € A  @  
 
-À 	 l                                                                                                             ÔÐ       Ô€              +Ñ °   °   ƒ<                p           ªª    E  € A  @  
+À 	 l                                                                                                             ÔÐ       Ô€              +Ñ °   °   ƒ<                            ªª    E  € A  @  
 
- 	À l                                                                                                             ›Ñ       Ô€              ” °   °   ƒ<                €           ªª    E  € B  @  
+ 	À l                                                                                                             ›Ñ       Ô€              ” °   °   ƒ<                0           ªª    E  € B  @  
 
-À 	 l                                                                                                              ”       Ô€              w” °   °   ƒ<                €           ªª    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       Ô€              ° °   °   ƒ<                            ªª    E  € D  @  
+ 	À l                                                                                                             3X       Ô€              ° °   °   ƒ<                P           ªª    E  € D  @  
 
-À 	 l                                                                                                             À       Ô€               °   °   ƒ<                            ªª    E  € D  @  
+À 	 l                                                                                                             À       Ô€               °   °   ƒ<                P           ªª    E  € D  @  
 
- 	À l                                                                                                             ƒ       Ô€               Þ °   °   ƒ<                °           ªª    E  € E  @  
+ 	À l                                                                                                             ƒ       Ô€               Þ °   °   ƒ<                `           ªª    E  € E  @  
 
-À 	 l                                                                                                             Þ       Ô€              gÞ °   °   ƒ<                °           ªª    E  € E  @  
+À 	 l                                                                                                             Þ       Ô€              gÞ °   °   ƒ<                `           ªª    E  € E  @  
 
- 	À l                                                                                                             ÓÞ       Ô€              P¡ °   °   ƒ<                À           ªª    E  € F  @  
+ 	À l                                                                                                             ÓÞ       Ô€              P¡ °   °   ƒ<                p           ªª    E  € F  @  
 
-À 	 l                                                                                                             `¡       Ô€              ·¡ °   °   ƒ<                À           ªª    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       Ô€              ûž A   A   €€  ÿÿÿÿÿÿ          ° ËéT     è    Œ$0H`l šMè4mesh       jð A   A   €€  ÿÿÿÿÿÿ          ° ª;U     è    Œ$0H`l êTè4mesh       ð'	 °   °   ƒ<                à           ªª    E  € H  @  
+ 	À l                                                                                                             se       Ô€              ûž A   A   €€  ÿÿÿÿÿÿ          �ËéT     è    Œ$0H`l šMè4mesh       jð A   A   €€  ÿÿÿÿÿÿ          �ª;U     è    Œ$0H`l êTè4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       Ô€              €ø °   °   ƒ<                0           ªª    E  € M  @  
+ 	À l                                                                                                             6       Ô€              €ø °   °   ƒ<                ð           ªª    E  € M  @  
 
-À 	 l                                                                                                             �ø       Ô€              çø °   °   ƒ<                0           ªª    E  € M  @  
+À 	 l                                                                                                             �ø       Ô€              çø °   °   ƒ<                ð           ªª    E  € M  @  
 
- 	À l                                                                                                             Sù       Ô€              Ð» °   °   ƒ<                @           ªª    E  € N  @  
+ 	À l                                                                                                             Sù       Ô€              Ð» °   °   ƒ<                            ªª    E  € N  @  
 
-À 	 l                                                                                                             à»       Ô€              7¼ °   °   ƒ<                @           ªª    E  € N  @  
+À 	 l                                                                                                             à»       Ô€              7¼ °   °   ƒ<                            ªª    E  € N  @  
 
- 	À l                                                                                                             £¼       Ô€                °   °   ƒ<                P           ªª    E  € O  @  
+ 	À l                                                                                                             £¼       Ô€                °   °   ƒ<                           ªª    E  € O  @  
 
-À 	 l                                                                                                             0       Ô€              ‡ °   °   ƒ<                P           ªª    E  € O  @  
+À 	 l                                                                                                             0       Ô€              ‡ °   °   ƒ<                           ªª    E  € O  @  
 
- 	À l                                                                                                             ó       Ô€              0   °   °   ƒ<                `           ªª    E  € P  @  
+ 	À l                                                                                                             ó       Ô€              0   °   °   ƒ<                            ªª    E  € P  @  
 
-À 	 l                                                                                                             @         Ô€              —   °   °   ƒ<                `           ªª    E  € P  @  
+À 	 l                                                                                                             @         Ô€              —   °   °   ƒ<                            ªª    E  € P  @  
 
- 	À l                                                                                                                     Ô€              €Ã  °   °   ƒ<                p           ªª    E  € Q  @  
+ 	À l                                                                                                                     Ô€              €Ã  °   °   ƒ<                0           ªª    E  € Q  @  
 
-À 	 l                                                                                                             �Ã        Ô€              çÃ  °   °   ƒ<                p           ªª    E  € Q  @  
+À 	 l                                                                                                             �Ã        Ô€              çÃ  °   °   ƒ<                0           ªª    E  € Q  @  
 
- 	À l                                                                                                             SÄ        Ô€              Ûý  A   A   €€  ÿÿÿÿÿÿ          À ëŠ\     è    Œ$0H`l <Uè4mesh       JO A   A   €€  ÿÿÿÿÿÿ          À ÊÜ\     è    Œ$0H`l ‹\è4mesh       Ð† °   °   ƒ<                €           ªª    E  € R  @  
+ 	À l                                                                                                             SÄ        Ô€              Ûý  A   A   €€  ÿÿÿÿÿÿ          @ëŠ\     è    Œ$0H`l <Uè4mesh       JO A   A   €€  ÿÿÿÿÿÿ          @ÊÜ\     è    Œ$0H`l ‹\è4mesh       Ð† °   °   ƒ<                P           ªª    E  € R  @  
 
-À 	 l                                                                                                             à†       Ô€              7‡ °   °   ƒ<                €           ªª    E  € R  @  
+À 	 l                                                                                                             à†       Ô€              7‡ °   °   ƒ<                P           ªª    E  € R  @  
 
- 	À l                                                                                                             £‡       Ô€               J °   °   ƒ<                �           ªª    E  € S  @  
+ 	À l                                                                                                             £‡       Ô€               J °   °   ƒ<                `           ªª    E  € S  @  
 
-À 	 l                                                                                                             0J       Ô€              ‡J °   °   ƒ<                �           ªª    E  € S  @  
+À 	 l                                                                                                             0J       Ô€              ‡J °   °   ƒ<                `           ªª    E  € S  @  
 
- 	À l                                                                                                             óJ       Ô€              p °   °   ƒ<                            ªª    E  € T  @  
+ 	À l                                                                                                             óJ       Ô€              p °   °   ƒ<                p           ªª    E  € T  @  
 
-À 	 l                                                                                                             €       Ô€              × °   °   ƒ<                            ªª    E  € T  @  
+À 	 l                                                                                                             €       Ô€              × °   °   ƒ<                p           ªª    E  € T  @  
 
- 	À l                                                                                                             C       Ô€              ÀÐ °   °   ƒ<                °           ªª    E  € U  @  
+ 	À l                                                                                                             C       Ô€              ÀÐ °   °   ƒ<                €           ªª    E  € U  @  
 
-À 	 l                                                                                                             ÐÐ       Ô€              'Ñ °   °   ƒ<                °           ªª    E  € U  @  
+À 	 l                                                                                                             ÐÐ       Ô€              'Ñ °   °   ƒ<                €           ªª    E  € U  @  
 
- 	À l                                                                                                             “Ñ       Ô€              ” °   °   ƒ<                À           ªª    E  € V  @  
+ 	À l                                                                                                             “Ñ       Ô€              ” °   °   ƒ<                �           ªª    E  € V  @  
 
-À 	 l                                                                                                              ”       Ô€              w” °   °   ƒ<                À           ªª    E  € V  @  
+À 	 l                                                                                                              ”       Ô€              w” °   °   ƒ<                �           ªª    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       Ô€              ûž A   A   €€  ÿÿÿÿÿÿ          Ð ,d     è    Œ$0H`l Ý\è4mesh       jð A   A   €€  ÿÿÿÿÿÿ          Ð ê}d     è    Œ$0H`l ,dè4mesh       ð'	 °   °   ƒ<                            ªª    E  € \  @  
+ 	À l                                                                                                             se       Ô€              ûž A   A   €€  ÿÿÿÿÿÿ          ð,d     è    Œ$0H`l Ý\è4mesh       jð A   A   €€  ÿÿÿÿÿÿ          ðê}d     è    Œ$0H`l ,dè4mesh       ð'	 °   °   ƒ<                            ªª    E  € \  @  
 
-À 	 l                                                                                                              (	       Ô€              W(	 °   °   ƒ<                            ªª    E  € \  @  
+À 	 l                                                                                                              (	       Ô€              W(	 °   °   ƒ<                            ªª    E  € \  @  
 
- 	À l                                                                                                             Ã(	       Ô€              @ë	 °   °   ƒ<                0           ªª    E  € ]  @  
+ 	À l                                                                                                             Ã(	       Ô€              @ë	 °   °   ƒ<                           ªª    E  € ]  @  
 
-À 	 l                                                                                                             Pë	       Ô€              §ë	 °   °   ƒ<                0           ªª    E  € ]  @  
+À 	 l                                                                                                             Pë	       Ô€              §ë	 °   °   ƒ<                           ªª    E  € ]  @  
 
  	À l                                                                                                             ì	       Ô€              �®
- °   °   ƒ<                @           ªª    E  € ^  @  
+ °   °   ƒ<                            ªª    E  € ^  @  
 
 À 	 l                                                                                                              ®
        Ô€              ÷®
- °   °   ƒ<                @           ªª    E  € ^  @  
+ °   °   ƒ<                            ªª    E  € ^  @  
 
  	À l                                                                                                             c¯
-       Ô€              àq °   °   ƒ<                P           ªª    E  € _  @  
+       Ô€              àq °   °   ƒ<                0           ªª    E  € _  @  
 
-À 	 l                                                                                                             ðq       Ô€              Gr °   °   ƒ<                P           ªª    E  € _  @  
+À 	 l                                                                                                             ðq       Ô€              Gr °   °   ƒ<                0           ªª    E  € _  @  
 
- 	À l                                                                                                             ³r       Ô€              05 °   °   ƒ<                `           ªª    E  € `  @  
+ 	À l                                                                                                             ³r       Ô€              05 °   °   ƒ<                @           ªª    E  € `  @  
 
-À 	 l                                                                                                             @5       Ô€              —5 °   °   ƒ<                `           ªª    E  € `  @  
+À 	 l                                                                                                             @5       Ô€              —5 °   °   ƒ<                @           ªª    E  € `  @  
 
- 	À l                                                                                                             6       Ô€              €ø °   °   ƒ<                p           ªª    E  € a  @  
+ 	À l                                                                                                             6       Ô€              €ø °   °   ƒ<                P           ªª    E  € a  @  
 
-À 	 l                                                                                                             �ø       Ô€              çø °   °   ƒ<                p           ªª    E  € a  @  
+À 	 l                                                                                                             �ø       Ô€              çø °   °   ƒ<                P           ªª    E  € a  @  
 
- 	À l                                                                                                             Sù       Ô€              Ð» °   °   ƒ<                €           ªª    E  € b  @  
+ 	À l                                                                                                             Sù       Ô€              Ð» °   °   ƒ<                `           ªª    E  € b  @  
 
-À 	 l                                                                                                             à»       Ô€              7¼ °   °   ƒ<                €           ªª    E  € b  @  
+À 	 l                                                                                                             à»       Ô€              7¼ °   °   ƒ<                `           ªª    E  € b  @  
 
- 	À l                                                                                                             £¼       Ô€                °   °   ƒ<                �           ªª    E  € c  @  
+ 	À l                                                                                                             £¼       Ô€                °   °   ƒ<                p           ªª    E  € c  @  
 
-À 	 l                                                                                                             0       Ô€              ‡ °   °   ƒ<                �           ªª    E  € c  @  
+À 	 l                                                                                                             0       Ô€              ‡ °   °   ƒ<                p           ªª    E  € c  @  
 
- 	À l                                                                                                             ó       Ô€              0   °   °   ƒ<                            ªª    E  € d  @  
+ 	À l                                                                                                             ó       Ô€              0   °   °   ƒ<                €           ªª    E  € d  @  
 
-À 	 l                                                                                                             @         Ô€              —   °   °   ƒ<                            ªª    E  € d  @  
+À 	 l                                                                                                             @         Ô€              —   °   °   ƒ<                €           ªª    E  € d  @  
 
- 	À l                                                                                                                     Ô€              €Ã  °   °   ƒ<                °           ªª    E  € e  @  
+ 	À l                                                                                                                     Ô€              €Ã  °   °   ƒ<                �           ªª    E  € e  @  
 
-À 	 l                                                                                                             �Ã        Ô€              çÃ  °   °   ƒ<                °           ªª    E  € e  @  
+À 	 l                                                                                                             �Ã        Ô€              çÃ  °   °   ƒ<                �           ªª    E  € e  @  
 
- 	À l                                                                                                             SÄ        Ô€              Ûý  A   A   €€  ÿÿÿÿÿÿ          à +Ík     è    Œ$0H`l ~dè4mesh       JO A   A   €€  ÿÿÿÿÿÿ          à 
-l     è    Œ$0H`l Íkè4mesh       Ð† °   °   ƒ<                À           ªª    E  € f  @  
+ 	À l                                                                                                             SÄ        Ô€              Ûý  A   A   €€  ÿÿÿÿÿÿ           +Ík     è    Œ$0H`l ~dè4mesh       JO A   A   €€  ÿÿÿÿÿÿ           
+l     è    Œ$0H`l Íkè4mesh       Ð† °   °   ƒ<                °           ªª    E  € f  @  
 
-À 	 l                                                                                                             à†       Ô€              7‡ °   °   ƒ<                À           ªª    E  € f  @  
+À 	 l                                                                                                             à†       Ô€              7‡ °   °   ƒ<                °           ªª    E  € f  @  
 
- 	À l                                                                                                             £‡       Ô€              dJ E   E   Ð€  ÿÿÿÿÿÿ          Ð  D%              ˆ                     †J ?   ?   Ð€<                Ð  E           ˆ                     âJ       Ô€              =K °   °   ƒ<                à           ªª    E  € g  @  
+ 	À l                                                                                                             £‡       Ô€              dJ E   E   Ð€  ÿÿÿÿÿÿ          À  D%              ˆ                     †J ?   ?   Ð€<                À  E           ˆ                     â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       Ô€              ° °   °   ƒ<                0           ªª    E  € l  @  
+ 	À l                                                                                                             3X       Ô€              ° °   °   ƒ<                            ªª    E  € l  @  
 
-À 	 l                                                                                                             À       Ô€               °   °   ƒ<                0           ªª    E  € l  @  
+À 	 l                                                                                                             À       Ô€               °   °   ƒ<                            ªª    E  € l  @  
 
- 	À l                                                                                                             ƒ       Ô€               Þ °   °   ƒ<                @           ªª    E  € m  @  
+ 	À l                                                                                                             ƒ       Ô€               Þ °   °   ƒ<                0           ªª    E  € m  @  
 
-À 	 l                                                                                                             Þ       Ô€              gÞ °   °   ƒ<                @           ªª    E  € m  @  
+À 	 l                                                                                                             Þ       Ô€              gÞ °   °   ƒ<                0           ªª    E  € m  @  
 
- 	À l                                                                                                             ÓÞ       Ô€              P¡ °   °   ƒ<                P           ªª    E  € n  @  
+ 	À l                                                                                                             ÓÞ       Ô€              P¡ °   °   ƒ<                @           ªª    E  € n  @  
 
-À 	 l                                                                                                             `¡       Ô€              ·¡ °   °   ƒ<                P           ªª    E  € n  @  
+À 	 l                                                                                                             `¡       Ô€              ·¡ °   °   ƒ<                @           ªª    E  € n  @  
 
- 	À l                                                                                                             #¢       Ô€               d °   °   ƒ<                `           ªª    E  € o  @  
+ 	À l                                                                                                             #¢       Ô€               d °   °   ƒ<                P           ªª    E  € o  @  
 
-À 	 l                                                                                                             °d       Ô€              e °   °   ƒ<                `           ªª    E  € o  @  
+À 	 l                                                                                                             °d       Ô€              e °   °   ƒ<                P           ªª    E  € o  @  
 
- 	À l                                                                                                             se       Ô€              ûž A   A   €€  ÿÿÿÿÿÿ          ð Kns     è    Œ$0H`l lè4mesh       jð A   A   €€  ÿÿÿÿÿÿ          ð *Às     è    Œ$0H`l nsè4mesh       ð'	 °   °   ƒ<                p           ªª    E  € p  @  
+ 	À l                                                                                                             se       Ô€              ûž A   A   €€  ÿÿÿÿÿÿ          `Kns     è    Œ$0H`l lè4mesh       jð A   A   €€  ÿÿÿÿÿÿ          `*Às     è    Œ$0H`l nsè4mesh       ð'	 °   °   ƒ<                p           ªª    E  € p  @  
 
-À 	 l                                                                                                              (	       Ô€              W(	 °   °   ƒ<                p           ªª    E  € p  @  
+À 	 l                                                                                                              (	       Ô€              W(	 °   °   ƒ<                p           ªª    E  € p  @  
 
- 	À l                                                                                                             Ã(	       Ô€              @ë	 °   °   ƒ<                €           ªª    E  € q  @  
+ 	À l                                                                                                             Ã(	       Ô€              @ë	 °   °   ƒ<                €           ªª    E  € q  @  
 
-À 	 l                                                                                                             Pë	       Ô€              §ë	 °   °   ƒ<                €           ªª    E  € q  @  
+À 	 l                                                                                                             Pë	       Ô€              §ë	 °   °   ƒ<                €           ªª    E  € q  @  
 
  	À l                                                                                                             ì	       Ô€              �®
- °   °   ƒ<                �           ªª    E  € r  @  
+ °   °   ƒ<                �           ªª    E  € r  @  
 
 À 	 l                                                                                                              ®
        Ô€              ÷®
- °   °   ƒ<                �           ªª    E  € r  @  
+ °   °   ƒ<                �           ªª    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 °   °   ƒ<                °           ªª    E  € t  @  
 
-À 	 l                                                                                                             @5       Ô€              —5 °   °   ƒ<                °           ªª    E  € t  @  
+À 	 l                                                                                                             @5       Ô€              —5 °   °   ƒ<                °           ªª    E  € t  @  
 
- 	À l                                                                                                             6       Ô€              €ø °   °   ƒ<                À           ªª    E  € u  @  
+ 	À l                                                                                                             6       Ô€              €ø °   °   ƒ<                À           ªª    E  € u  @  
 
-À 	 l                                                                                                             �ø       Ô€              çø °   °   ƒ<                À           ªª    E  € u  @  
+À 	 l                                                                                                             �ø       Ô€              çø °   °   ƒ<                À           ªª    E  € u  @  
 
- 	À l                                                                                                             Sù       Ô€              Ð» °   °   ƒ<                Ð           ªª    E  € v  @  
+ 	À l                                                                                                             Sù       Ô€              Ð» °   °   ƒ<                Ð           ªª    E  € v  @  
 
-À 	 l                                                                                                             à»       Ô€              7¼ °   °   ƒ<                Ð           ªª    E  € v  @  
+À 	 l                                                                                                             à»       Ô€              7¼ °   °   ƒ<                Ð           ªª    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   €€  ÿÿÿÿÿÿ           k{     è    Œ$0H`l Àsè4mesh       JO A   A   €€  ÿÿÿÿÿÿ           Ja{     è    Œ$0H`l {è4mesh       Ð† °   °   ƒ<                           ªª    E  € z  @  
+ 	À l                                                                                                             SÄ        Ô€              Ûý  A   A   €€  ÿÿÿÿÿÿ          	k{     è    Œ$0H`l Àsè4mesh       JO A   A   €€  ÿÿÿÿÿÿ          	Ja{     è    Œ$0H`l {è4mesh       Ð† °   °   ƒ<                 	           ªª    E  € z  @  
 
-À 	 l                                                                                                             à†       Ô€              7‡ °   °   ƒ<                           ªª    E  € z  @  
+À 	 l                                                                                                             à†       Ô€              7‡ °   °   ƒ<                 	           ªª    E  € z  @  
 
- 	À l                                                                                                             £‡       Ô€               J °   °   ƒ<                            ªª    E  € {  @  
+ 	À l                                                                                                             £‡       Ô€               J °   °   ƒ<                0	           ªª    E  € {  @  
 
-À 	 l                                                                                                             0J       Ô€              ‡J °   °   ƒ<                            ªª    E  € {  @  
+À 	 l                                                                                                             0J       Ô€              ‡J °   °   ƒ<                0	           ªª    E  € {  @  
 
- 	À l                                                                                                             óJ       Ô€              p °   °   ƒ<                0           ªª    E  € |  @  
+ 	À l                                                                                                             óJ       Ô€              p °   °   ƒ<                @	           ªª    E  € |  @  
 
-À 	 l                                                                                                             €       Ô€              × °   °   ƒ<                0           ªª    E  € |  @  
+À 	 l                                                                                                             €       Ô€              × °   °   ƒ<                @	           ªª    E  € |  @  
 
- 	À l                                                                                                             C       Ô€              ÀÐ °   °   ƒ<                @           ªª    E  € }  @  
+ 	À l                                                                                                             C       Ô€              ÀÐ °   °   ƒ<                P	           ªª    E  € }  @  
 
-À 	 l                                                                                                             ÐÐ       Ô€              'Ñ °   °   ƒ<                @           ªª    E  € }  @  
+À 	 l                                                                                                             ÐÐ       Ô€              'Ñ °   °   ƒ<                P	           ªª    E  € }  @  
 
- 	À l                                                                                                             “Ñ       Ô€              ” °   °   ƒ<                P           ªª    E  € ~  @  
+ 	À l                                                                                                             “Ñ       Ô€              ” °   °   ƒ<                `	           ªª    E  € ~  @  
 
-À 	 l                                                                                                              ”       Ô€              w” °   °   ƒ<                P           ªª    E  € ~  @  
+À 	 l                                                                                                              ”       Ô€              w” °   °   ƒ<                `	           ªª    E  € ~  @  
 
- 	À l                                                                                                             ã”       Ô€              `W °   °   ƒ<                `           ªª    E  €   @  
+ 	À l                                                                                                             ã”       Ô€              `W °   °   ƒ<                p	           ªª    E  €   @  
 
-À 	 l                                                                                                             pW       Ô€              ÇW °   °   ƒ<                `           ªª    E  €   @  
+À 	 l                                                                                                             pW       Ô€              ÇW °   °   ƒ<                p	           ªª    E  €   @  
 
- 	À l                                                                                                             3X       Ô€              ° °   °   ƒ<                p           ªª    E  € €  @  
+ 	À l                                                                                                             3X       Ô€              ° °   °   ƒ<                €	           ªª    E  € €  @  
 
-À 	 l                                                                                                             À       Ô€               °   °   ƒ<                p           ªª    E  € €  @  
+À 	 l                                                                                                             À       Ô€               °   °   ƒ<                €	           ªª    E  € €  @  
 
- 	À l                                                                                                             ƒ       Ô€               Þ °   °   ƒ<                €           ªª    E  € �  @  
+ 	À l                                                                                                             ƒ       Ô€               Þ °   °   ƒ<                �	           ªª    E  € �  @  
 
-À 	 l                                                                                                             Þ       Ô€              gÞ °   °   ƒ<                €           ªª    E  € �  @  
+À 	 l                                                                                                             Þ       Ô€              gÞ °   °   ƒ<                �	           ªª    E  € �  @  
 
- 	À l                                                                                                             ÓÞ       Ô€              P¡ °   °   ƒ<                �           ªª    E  € ‚  @  
+ 	À l                                                                                                             ÓÞ       Ô€              P¡ °   °   ƒ<                 	           ªª    E  € ‚  @  
 
-À 	 l                                                                                                             `¡       Ô€              ·¡ °   °   ƒ<                �           ªª    E  € ‚  @  
+À 	 l                                                                                                             `¡       Ô€              ·¡ °   °   ƒ<                 	           ªª    E  € ‚  @  
 
- 	À l                                                                                                             #¢       Ô€               d °   °   ƒ<                            ªª    E  € ƒ  @  
+ 	À l                                                                                                             #¢       Ô€               d °   °   ƒ<                °	           ªª    E  € ƒ  @  
 
-À 	 l                                                                                                             °d       Ô€              e °   °   ƒ<                            ªª    E  € ƒ  @  
+À 	 l                                                                                                             °d       Ô€              e °   °   ƒ<                °	           ªª    E  € ƒ  @  
 
- 	À l                                                                                                             se       Ô€              ûž A   A   €€  ÿÿÿÿÿÿ          ‹°‚     è    Œ$0H`l a{è4mesh       jð A   A   €€  ÿÿÿÿÿÿ          jƒ     è    Œ$0H`l °‚è4mesh       ð'	 °   °   ƒ<                °           ªª    E  € „  @  
+ 	À l                                                                                                             se       Ô€              ûž A   A   €€  ÿÿÿÿÿÿ          À	‹°‚     è    Œ$0H`l a{è4mesh       jð A   A   €€  ÿÿÿÿÿÿ          À	jƒ     è    Œ$0H`l °‚è4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 °   °   ƒ<                à           ªª    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ù       Ô€              Ð» °   °   ƒ<                	           ªª    E  € Š  @  
+ 	À l                                                                                                             Sù       Ô€              Ð» °   °   ƒ<                0
+           ªª    E  € Š  @  
 
-À 	 l                                                                                                             à»       Ô€              7¼ °   °   ƒ<                	           ªª    E  € Š  @  
+À 	 l                                                                                                             à»       Ô€              7¼ °   °   ƒ<                0
+           ªª    E  € Š  @  
 
- 	À l                                                                                                             £¼       Ô€                °   °   ƒ<                 	           ªª    E  € ‹  @  
+ 	À l                                                                                                             £¼       Ô€                °   °   ƒ<                @
+           ªª    E  € ‹  @  
 
-À 	 l                                                                                                             0       Ô€              ‡ °   °   ƒ<                 	           ªª    E  € ‹  @  
+À 	 l                                                                                                             0       Ô€              ‡ °   °   ƒ<                @
+           ªª    E  € ‹  @  
 
- 	À l                                                                                                             ó       Ô€           	   0   °   °   ƒ<                0	           ªª    E  € Œ  @  
+ 	À l                                                                                                             ó       Ô€           	   0   °   °   ƒ<                P
+           ªª    E  € Œ  @  
 
-À 	 l                                                                                                          	   @         Ô€           	   —   °   °   ƒ<                0	           ªª    E  € Œ  @  
+À 	 l                                                                                                          	   @         Ô€           	   —   °   °   ƒ<                P
+           ªª    E  € Œ  @  
 
- 	À l                                                                                                          	           Ô€           	   €Ã  °   °   ƒ<                @	           ªª    E  € �  @  
+ 	À l                                                                                                          	           Ô€           	   €Ã  °   °   ƒ<                `
+           ªª    E  € �  @  
 
-À 	 l                                                                                                          	   �Ã        Ô€           	   çÃ  °   °   ƒ<                @	           ªª    E  € �  @  
+À 	 l                                                                                                          	   �Ã        Ô€           	   çÃ  °   °   ƒ<                `
+           ªª    E  € �  @  
 
- 	À l                                                                                                          	   SÄ        Ô€           	   Ûý  A   A   €€  ÿÿÿÿÿÿ           «QŠ     è    Œ$0H`l ƒè4mesh    	   JO A   A   €€  ÿÿÿÿÿÿ           Š£Š     è    Œ$0H`l RŠè4mesh    	   Ð† °   °   ƒ<                P	           ªª    E  € Ž  @  
+ 	À l                                                                                                          	   SÄ        Ô€           	   Ûý  A   A   €€  ÿÿÿÿÿÿ          p
+«QŠ     è    Œ$0H`l ƒè4mesh    	   JO A   A   €€  ÿÿÿÿÿÿ          p
+Š£Š     è    Œ$0H`l RŠè4mesh    	   Ð† °   °   ƒ<                €
+           ªª    E  € Ž  @  
 
-À 	 l                                                                                                          	   à†       Ô€           	   7‡ °   °   ƒ<                P	           ªª    E  € Ž  @  
+À 	 l                                                                                                          	   à†       Ô€           	   7‡ °   °   ƒ<                €
+           ªª    E  € Ž  @  
 
- 	À l                                                                                                          	   £‡       Ô€           	    J °   °   ƒ<                `	           ªª    E  € �  @  
+ 	À l                                                                                                          	   £‡       Ô€           	    J °   °   ƒ<                �
+           ªª    E  € �  @  
 
-À 	 l                                                                                                          	   0J       Ô€           	   ‡J °   °   ƒ<                `	           ªª    E  € �  @  
+À 	 l                                                                                                          	   0J       Ô€           	   ‡J °   °   ƒ<                �
+           ªª    E  € �  @  
 
- 	À l                                                                                                          	   óJ       Ô€           	   p °   °   ƒ<                p	           ªª    E  € �  @  
+ 	À l                                                                                                          	   óJ       Ô€           	   p °   °   ƒ<                 
+           ªª    E  € �  @  
 
-À 	 l                                                                                                          	   €       Ô€           	   × °   °   ƒ<                p	           ªª    E  € �  @  
+À 	 l                                                                                                          	   €       Ô€           	   × °   °   ƒ<                 
+           ªª    E  € �  @  
 
- 	À l                                                                                                          	   C       Ô€           	   ÀÐ °   °   ƒ<                €	           ªª    E  € ‘  @  
+ 	À l                                                                                                          	   C       Ô€           	   ÀÐ °   °   ƒ<                °
+           ªª    E  € ‘  @  
 
-À 	 l                                                                                                          	   ÐÐ       Ô€           	   'Ñ °   °   ƒ<                €	           ªª    E  € ‘  @  
+À 	 l                                                                                                          	   ÐÐ       Ô€           	   'Ñ °   °   ƒ<                °
+           ªª    E  € ‘  @  
 
- 	À l                                                                                                          	   “Ñ       Ô€           	   ” °   °   ƒ<                �	           ªª    E  € ’  @  
+ 	À l                                                                                                          	   “Ñ       Ô€           	   ” °   °   ƒ<                À
+           ªª    E  € ’  @  
 
-À 	 l                                                                                                          	    ”       Ô€           	   w” °   °   ƒ<                �	           ªª    E  € ’  @  
+À 	 l                                                                                                          	    ”       Ô€           	   w” °   °   ƒ<                À
+           ªª    E  € ’  @  
 
- 	À l                                                                                                          	   ã”       Ô€           	   `W °   °   ƒ<                 	           ªª    E  € “  @  
+ 	À l                                                                                                          	   ã”       Ô€           	   `W °   °   ƒ<                Ð
+           ªª    E  € “  @  
 
-À 	 l                                                                                                          	   pW       Ô€           	   ÇW °   °   ƒ<                 	           ªª    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¡ °   °   ƒ<                            ªª    E  € –  @  
 
-À 	 l                                                                                                          	   `¡       Ô€           	   ·¡ °   °   ƒ<                Ð	           ªª    E  € –  @  
+À 	 l                                                                                                          	   `¡       Ô€           	   ·¡ °   °   ƒ<                            ªª    E  € –  @  
 
- 	À l                                                                                                          	   #¢       Ô€           	    d °   °   ƒ<                à	           ªª    E  € —  @  
+ 	À l                                                                                                          	   #¢       Ô€           	    d °   °   ƒ<                           ªª    E  € —  @  
 
-À 	 l                                                                                                          	   °d       Ô€           	   e °   °   ƒ<                à	           ªª    E  € —  @  
+À 	 l                                                                                                          	   °d       Ô€           	   e °   °   ƒ<                           ªª    E  € —  @  
 
- 	À l                                                                                                          	   se       Ô€           	   ûž A   A   €€  ÿÿÿÿÿÿ          0Ëò‘     è    Œ$0H`l £Šè4mesh    	   jð A   A   €€  ÿÿÿÿÿÿ          0ªD’     è    Œ$0H`l ó‘è4mesh    	   ð'	 °   °   ƒ<                ð	           ªª    E  € ˜  @  
+ 	À l                                                                                                          	   se       Ô€           	   ûž A   A   €€  ÿÿÿÿÿÿ           Ëò‘     è    Œ$0H`l £Šè4mesh    	   jð A   A   €€  ÿÿÿÿÿÿ           ªD’     è    Œ$0H`l ó‘è4mesh    	   ð'	 °   °   ƒ<                0           ªª    E  € ˜  @  
 
-À 	 l                                                                                                          	    (	       Ô€           	   W(	 °   °   ƒ<                ð	           ªª    E  € ˜  @  
+À 	 l                                                                                                          	    (	       Ô€           	   W(	 °   °   ƒ<                0           ªª    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 °   °   ƒ<                0
-           ªª    E  € œ  @  
+ 	À l                                                                                                          	   ³r       Ô€           	   05 °   °   ƒ<                p           ªª    E  € œ  @  
 
-À 	 l                                                                                                          	   @5       Ô€           	   —5 °   °   ƒ<                0
-           ªª    E  € œ  @  
+À 	 l                                                                                                          	   @5       Ô€           	   —5 °   °   ƒ<                p           ªª    E  € œ  @  
 
- 	À l                                                                                                          	   6       Ô€           	   €ø °   °   ƒ<                @
-           ªª    E  € �  @  
+ 	À l                                                                                                          	   6       Ô€           	   €ø °   °   ƒ<                €           ªª    E  € �  @  
 
-À 	 l                                                                                                          	   �ø       Ô€           	   çø °   °   ƒ<                @
-           ªª    E  € �  @  
+À 	 l                                                                                                          	   �ø       Ô€           	   çø °   °   ƒ<                €           ªª    E  € �  @  
 
- 	À l                                                                                                          	   Sù       Ô€           	   Ð» °   °   ƒ<                P
-           ªª    E  € ž  @  
+ 	À l                                                                                                          	   Sù       Ô€           	   Ð» °   °   ƒ<                �           ªª    E  € ž  @  
 
-À 	 l                                                                                                          	   à»       Ô€           	   7¼ °   °   ƒ<                P
-           ªª    E  € ž  @  
+À 	 l                                                                                                          	   à»       Ô€           	   7¼ °   °   ƒ<                �           ªª    E  € ž  @  
 
- 	À l                                                                                                          	   £¼       Ô€           	     °   °   ƒ<                `
-           ªª    E  € Ÿ  @  
+ 	À l                                                                                                          	   £¼       Ô€           	     °   °   ƒ<                            ªª    E  € Ÿ  @  
 
-À 	 l                                                                                                          	   0       Ô€           	   ‡ °   °   ƒ<                `
-           ªª    E  € Ÿ  @  
+À 	 l                                                                                                          	   0       Ô€           	   ‡ °   °   ƒ<                            ªª    E  € Ÿ  @  
 
  	À l                                                                                                          	   ó       Ô€           
-   JO A   A   €€  ÿÿÿÿÿÿ          @Êå™     è    Œ$0H`l ó‘è4mesh    
-   »œ 2   2   Ð€<                p
-J 4mesh 7       
-   ƒ� 2   2   Ðˆ<                p
-J 4mesh 7       
-   Kž 2   2   Ðˆ<                p
-J 4mesh 7       
-   Øž 2   2   Ðˆ<                p
-J 4mesh 7       
-   ›Ÿ 2   2   Ðˆ<                p
-J 4mesh 7       
-   :  2   2   Ðˆ<                p
-J 4mesh 7       
-   Ç  2   2   Ðˆ<                p
-J 4mesh 7       
-   jð A   A   €€  ÿÿÿÿÿÿ          Pê†¡     è    Œ$0H`l ó‘è4mesh       J/ <   <   €€  ÿÿÿÿÿÿ          `
-©     è    Œ$0H`l 4mesh       jø <   <   €€  ÿÿÿÿÿÿ          p*Ñ°     è    Œ$0H`l 4mesh       J7 <   <   €€  ÿÿÿÿÿÿ          €JR¸     è    Œ$0H`l 4mesh       jÄ <   <   €€  ÿÿÿÿÿÿ          �jß¿     è    Œ$0H`l 4mesh       Jë  <   <   €€  ÿÿÿÿÿÿ           ŠHÇ     è    Œ$0H`l 4mesh       j� <   <   €€  ÿÿÿÿÿÿ          °ªíÎ     è    Œ$0H`l 4mesh       Jó  <   <   €€  ÿÿÿÿÿÿ          ÀÊ’Ö     è    Œ$0H`l 4mesh       j¬ <   <   €€  ÿÿÿÿÿÿ          ÐêKÞ     è    Œ$0H`l 4mesh    
\ No newline at end of file
+   JO A   A   €€  ÿÿÿÿÿÿ          °Êå™     è    Œ$0H`l ó‘è4mesh    
+   »œ 2   2   Ð€<                ÀJ 4mesh 7       
+   ƒ� 2   2   Ðˆ<                ÀJ 4mesh 7       
+   Kž 2   2   Ðˆ<                ÀJ 4mesh 7       
+   Øž 2   2   Ðˆ<                ÀJ 4mesh 7       
+   ›Ÿ 2   2   Ðˆ<                ÀJ 4mesh 7       
+   :  2   2   Ðˆ<                ÀJ 4mesh 7       
+   Ç  2   2   Ðˆ<                ÀJ 4mesh 7       
+   jð A   A   €€  ÿÿÿÿÿÿ          Ðê†¡     è    Œ$0H`l ó‘è4mesh       J/ <   <   €€  ÿÿÿÿÿÿ          à
+©     è    Œ$0H`l 4mesh       jø <   <   €€  ÿÿÿÿÿÿ          ð*Ñ°     è    Œ$0H`l 4mesh       J7 <   <   €€  ÿÿÿÿÿÿ           JR¸     è    Œ$0H`l 4mesh       jÄ <   <   €€  ÿÿÿÿÿÿ          jß¿     è    Œ$0H`l 4mesh       Jë  <   <   €€  ÿÿÿÿÿÿ           ŠHÇ     è    Œ$0H`l 4mesh       j� <   <   €€  ÿÿÿÿÿÿ          0ªíÎ     è    Œ$0H`l 4mesh       Jó  <   <   €€  ÿÿÿÿÿÿ          @Ê’Ö     è    Œ$0H`l 4mesh       j¬ <   <   €€  ÿÿÿÿÿÿ          PêKÞ     è    Œ$0H`l 4mesh    
\ No newline at end of file
diff -Naur ns-3.19/src/mesh/test/dot11s/hwmp-simplest-regression-test-1-1.pcap ns-3.20/src/mesh/test/dot11s/hwmp-simplest-regression-test-1-1.pcap
--- ns-3.19/src/mesh/test/dot11s/hwmp-simplest-regression-test-1-1.pcap	2014-06-17 10:34:00.461636484 -0700
+++ ns-3.20/src/mesh/test/dot11s/hwmp-simplest-regression-test-1-1.pcap	2014-06-17 10:33:13.819996533 -0700
@@ -1,785 +1,776 @@
-ÔÃ²¡          ÿÿ  i       ký  <   <   €€  ÿÿÿÿÿÿ            ký      è    Œ$0H`l 4mesh        }þ  R   R   Ð€<                   J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          �þ        Ô€               Ûþ  P   P   Ð€<                  J     Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬  9 7          ›ÿ        Ô€               Øÿ  R   R   Ð€<                  J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          œ        Ô€               B P   P   Ð€<                 J     Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          R       Ô€               ºO A   A   €€  ÿÿÿÿÿÿ            JO     è    Œ$0H`l ý è4mesh        ‹ž A   A   €€  ÿÿÿÿÿÿ           ‹ž     è    Œ$0H`l Oè4mesh        Úð A   A   €€  ÿÿÿÿÿÿ           jð     è    Œ$0H`l žè4mesh       ký  A   A   €€  ÿÿÿÿÿÿ            «?     è    Œ$0H`l ðè4mesh       ºO A   A   €€  ÿÿÿÿÿÿ            Š‘     è    Œ$0H`l @è4mesh       ‹ž A   A   €€  ÿÿÿÿÿÿ          0 Ëà     è    Œ$0H`l ‘è4mesh       Úð A   A   €€  ÿÿÿÿÿÿ          0 ª2     è    Œ$0H`l áè4mesh       X  L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ            ªª           
+ÔÃ²¡          ÿÿ  i       ký  <   <   €€  ÿÿÿÿÿÿ            ký      è    Œ$0H`l 4mesh        }þ  R   R   Ð€<                   J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          �þ        Ô€               Ûþ  P   P   Ð€<                 J     Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬  9 7          ›ÿ        Ô€               Øÿ  R   R   Ð€<                   J   Œ$0H`l4mesh3 ¬  ¬ ÿ¬  ¬  ¬  9 7          œ        Ô€               B P   P   Ð€<                 J     Œ$0H`l3 ¬  ¬ ÿ¬  ¬  ¬ 9 7          R       Ô€               ºO A   A   €€  ÿÿÿÿÿÿ            JO     è    Œ$0H`l ý è4mesh        ‹ž A   A   €€  ÿÿÿÿÿÿ          0 ‹ž     è    Œ$0H`l Oè4mesh        Úð A   A   €€  ÿÿÿÿÿÿ          0 jð     è    Œ$0H`l žè4mesh       ký  A   A   €€  ÿÿÿÿÿÿ          @ «?     è    Œ$0H`l ðè4mesh       ºO A   A   €€  ÿÿÿÿÿÿ          @ Š‘     è    Œ$0H`l @è4mesh       ‹ž A   A   €€  ÿÿÿÿÿÿ          P Ëà     è    Œ$0H`l ‘è4mesh       Úð A   A   €€  ÿÿÿÿÿÿ          P ª2     è    Œ$0H`l áè4mesh       X  L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ`           ªª           
 ÿÿÿÿÿÿ
-       ƒ  L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ           ªª           
+       ƒ  L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ`          ªª           
 ÿÿÿÿÿÿ
-       F  E   E   Ð€  ÿÿÿÿÿÿ          0   D%              ˆ                      h  ?   ?   Ð€<                0   E           ˆ                             Ô€              è  L   L   ƒ<                @            ªª           
+       F  E   E   Ð€  ÿÿÿÿÿÿ          p   D%              ˆ                      h  ?   ?   Ð€<                p   E           ˆ                             Ô€              è  L   L   ƒ<                €            ªª           
      
-       ø        Ô€              O  °   °   ƒ<                @            ªª    E  €    @  
+       ø        Ô€              O  °   °   ƒ<                €            ªª    E  €    @  
 
-À 	 l                                                                                                             �         Ô€              ûC  L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿP           ªª           
+À 	 l                                                                                                             �         Ô€              ûC  L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ�           ªª           
 ÿÿÿÿÿÿ
-       &D  L   L   ƒ<                P            ªª           
+       &D  L   L   ƒ<                �            ªª           
      
-       âD        Ô€              †F  °   °   ƒ<                `            ªª    E  €    @  
+       âD        Ô€              †F  °   °   ƒ<                             ªª    E  €    @  
 
- 	À l                                                                                                             –F        Ô€              ÿF  L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ`          ªª           
+ 	À l                                                                                                             –F        Ô€              ÿF  L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ           ªª           
 ÿÿÿÿÿÿ
-       PÃ  °   °   ƒ<                p            ªª    E  €   @  
+       PÃ  °   °   ƒ<                °            ªª    E  €   @  
 
-À 	 l                                                                                                             �Ä        Ô€              ¿Å  °   °   ƒ<                p            ªª    E  €   @  
+À 	 l                                                                                                             �Ä        Ô€              ¿Å  °   °   ƒ<                °            ªª    E  €   @  
 
- 	À l                                                                                                             ÏÅ        Ô€              ký  A   A   €€  ÿÿÿÿÿÿ          @ ë�     è    Œ$0H`l 3è4mesh       ºO A   A   €€  ÿÿÿÿÿÿ          @ ÊÓ     è    Œ$0H`l ‚è4mesh        † °   °   ƒ<                €            ªª    E  €   @  
+ 	À l                                                                                                             ÏÅ        Ô€              ký  A   A   €€  ÿÿÿÿÿÿ          À ë�     è    Œ$0H`l 3è4mesh       ºO A   A   €€  ÿÿÿÿÿÿ          À ÊÓ     è    Œ$0H`l ‚è4mesh        † °   °   ƒ<                Ð            ªª    E  €   @  
 
-À 	 l                                                                                                             à‡       Ô€              ‰ °   °   ƒ<                €            ªª    E  €   @  
+À 	 l                                                                                                             à‡       Ô€              ‰ °   °   ƒ<                Ð            ªª    E  €   @  
 
- 	À l                                                                                                             ‰       Ô€              ðI °   °   ƒ<                �            ªª    E  €   @  
+ 	À l                                                                                                             ‰       Ô€              ðI °   °   ƒ<                à            ªª    E  €   @  
 
-À 	 l                                                                                                             0K       Ô€              _L °   °   ƒ<                �            ªª    E  €   @  
+À 	 l                                                                                                             0K       Ô€              _L °   °   ƒ<                à            ªª    E  €   @  
 
- 	À l                                                                                                             oL       Ô€              @ °   °   ƒ<                             ªª    E  €   @  
+ 	À l                                                                                                             oL       Ô€              @ °   °   ƒ<                ð            ªª    E  €   @  
 
-À 	 l                                                                                                             €       Ô€              ¯ °   °   ƒ<                             ªª    E  €   @  
+À 	 l                                                                                                             €       Ô€              ¯ °   °   ƒ<                ð            ªª    E  €   @  
 
- 	À l                                                                                                             ¿       Ô€              �Ð °   °   ƒ<                °            ªª    E  €   @  
+ 	À l                                                                                                             ¿       Ô€              �Ð °   °   ƒ<                            ªª    E  €   @  
 
-À 	 l                                                                                                             ÐÑ       Ô€              ÿÒ °   °   ƒ<                °            ªª    E  €   @  
+À 	 l                                                                                                             ÐÑ       Ô€              ÿÒ °   °   ƒ<                            ªª    E  €   @  
 
- 	À l                                                                                                             Ó       Ô€              à“ °   °   ƒ<                À            ªª    E  €   @  
+ 	À l                                                                                                             Ó       Ô€              à“ °   °   ƒ<                           ªª    E  €   @  
 
-À 	 l                                                                                                             Ð”       Ô€              ÿ• °   °   ƒ<                À            ªª    E  €   @  
+À 	 l                                                                                                             Ð”       Ô€              ÿ• °   °   ƒ<                           ªª    E  €   @  
 
- 	À l                                                                                                             –       Ô€              0W °   °   ƒ<                Ð            ªª    E  €   @  
+ 	À l                                                                                                             –       Ô€              0W °   °   ƒ<                            ªª    E  €   @  
 
-À 	 l                                                                                                              X       Ô€              ÿX °   °   ƒ<                Ð            ªª    E  €   @  
+À 	 l                                                                                                              X       Ô€              ÿX °   °   ƒ<                            ªª    E  €   @  
 
- 	À l                                                                                                             Y       Ô€              € °   °   ƒ<                à            ªª    E  €   @  
+ 	À l                                                                                                             Y       Ô€              € °   °   ƒ<                0           ªª    E  €   @  
 
-À 	 l                                                                                                             p       Ô€              O °   °   ƒ<                à            ªª    E  €   @  
+À 	 l                                                                                                             p       Ô€              O °   °   ƒ<                0           ªª    E  €   @  
 
- 	À l                                                                                                             _       Ô€              ÐÝ °   °   ƒ<                ð            ªª    E  € 	  @  
+ 	À l                                                                                                             _       Ô€              ÐÝ °   °   ƒ<                @           ªª    E  € 	  @  
 
-À 	 l                                                                                                             ÀÞ       Ô€              Ÿß °   °   ƒ<                ð            ªª    E  € 	  @  
+À 	 l                                                                                                             ÀÞ       Ô€              Ÿß °   °   ƒ<                @           ªª    E  € 	  @  
 
- 	À l                                                                                                             ¯ß       Ô€               ¡ °   °   ƒ<                            ªª    E  € 
+ 	À l                                                                                                             ¯ß       Ô€               ¡ °   °   ƒ<                P           ªª    E  € 
   @  
 
-À 	 l                                                                                                             ¢       Ô€              ï¢ °   °   ƒ<                            ªª    E  € 
+À 	 l                                                                                                             ¢       Ô€              ï¢ °   °   ƒ<                P           ªª    E  € 
   @  
 
- 	À l                                                                                                             ÿ¢       Ô€              pd °   °   ƒ<                           ªª    E  €   @  
+ 	À l                                                                                                             ÿ¢       Ô€              pd °   °   ƒ<                `           ªª    E  €   @  
 
-À 	 l                                                                                                             `e       Ô€              ?f °   °   ƒ<                           ªª    E  €   @  
+À 	 l                                                                                                             `e       Ô€              ?f °   °   ƒ<                `           ªª    E  €   @  
 
- 	À l                                                                                                             Of       Ô€              ‹ž A   A   €€  ÿÿÿÿÿÿ          P #'     è    Œ$0H`l Ôè4mesh       Úð A   A   €€  ÿÿÿÿÿÿ          P êt'     è    Œ$0H`l #'è4mesh       À'	 °   °   ƒ<                            ªª    E  €   @  
+ 	À l                                                                                                             Of       Ô€              ‹ž A   A   €€  ÿÿÿÿÿÿ          p#'     è    Œ$0H`l Ôè4mesh       Úð A   A   €€  ÿÿÿÿÿÿ          pêt'     è    Œ$0H`l #'è4mesh       À'	 °   °   ƒ<                €           ªª    E  €   @  
 
-À 	 l                                                                                                             °(	       Ô€              �)	 °   °   ƒ<                            ªª    E  €   @  
+À 	 l                                                                                                             °(	       Ô€              �)	 °   °   ƒ<                €           ªª    E  €   @  
 
- 	À l                                                                                                             Ÿ)	       Ô€              ë	 °   °   ƒ<                0           ªª    E  €   @  
+ 	À l                                                                                                             Ÿ)	       Ô€              ë	 °   °   ƒ<                �           ªª    E  €   @  
 
-À 	 l                                                                                                              ì	       Ô€              ßì	 °   °   ƒ<                0           ªª    E  €   @  
+À 	 l                                                                                                              ì	       Ô€              ßì	 °   °   ƒ<                �           ªª    E  €   @  
 
  	À l                                                                                                             ïì	       Ô€              `®
- °   °   ƒ<                @           ªª    E  €   @  
+ °   °   ƒ<                            ªª    E  €   @  
 
 À 	 l                                                                                                             P¯
        Ô€              /°
- °   °   ƒ<                @           ªª    E  €   @  
+ °   °   ƒ<                            ªª    E  €   @  
 
  	À l                                                                                                             ?°
-       Ô€              °q °   °   ƒ<                P           ªª    E  €   @  
+       Ô€              °q °   °   ƒ<                °           ªª    E  €   @  
 
-À 	 l                                                                                                              r       Ô€              s °   °   ƒ<                P           ªª    E  €   @  
+À 	 l                                                                                                              r       Ô€              s °   °   ƒ<                °           ªª    E  €   @  
 
- 	À l                                                                                                             �s       Ô€               5 °   °   ƒ<                `           ªª    E  €   @  
+ 	À l                                                                                                             �s       Ô€               5 °   °   ƒ<                À           ªª    E  €   @  
 
-À 	 l                                                                                                             È5       Ô€              §6 °   °   ƒ<                `           ªª    E  €   @  
+À 	 l                                                                                                             È5       Ô€              §6 °   °   ƒ<                À           ªª    E  €   @  
 
- 	À l                                                                                                             ·6       Ô€              Pø °   °   ƒ<                p           ªª    E  €   @  
+ 	À l                                                                                                             ·6       Ô€              Pø °   °   ƒ<                Ð           ªª    E  €   @  
 
-À 	 l                                                                                                             ù       Ô€              Ïù °   °   ƒ<                p           ªª    E  €   @  
+À 	 l                                                                                                             ù       Ô€              Ïù °   °   ƒ<                Ð           ªª    E  €   @  
 
- 	À l                                                                                                             ßù       Ô€               » °   °   ƒ<                €           ªª    E  €   @  
+ 	À l                                                                                                             ßù       Ô€               » °   °   ƒ<                à           ªª    E  €   @  
 
-À 	 l                                                                                                             h¼       Ô€              ½ °   °   ƒ<                €           ªª    E  €   @  
+À 	 l                                                                                                             h¼       Ô€              ½ °   °   ƒ<                à           ªª    E  €   @  
 
- 	À l                                                                                                             /½       Ô€              ð~ °   °   ƒ<                �           ªª    E  €   @  
+ 	À l                                                                                                             /½       Ô€              ð~ °   °   ƒ<                ð           ªª    E  €   @  
 
-À 	 l                                                                                                             ¸       Ô€              o€ °   °   ƒ<                �           ªª    E  €   @  
+À 	 l                                                                                                             ¸       Ô€              o€ °   °   ƒ<                ð           ªª    E  €   @  
 
- 	À l                                                                                                             €       Ô€                  °   °   ƒ<                            ªª    E  €   @  
+ 	À l                                                                                                             €       Ô€                  °   °   ƒ<                            ªª    E  €   @  
 
-À 	 l                                                                                                             È         Ô€                °   °   ƒ<                            ªª    E  €   @  
+À 	 l                                                                                                             È         Ô€                °   °   ƒ<                            ªª    E  €   @  
 
- 	À l                                                                                                             �        Ô€              PÃ  °   °   ƒ<                °           ªª    E  €   @  
+ 	À l                                                                                                             �        Ô€              PÃ  °   °   ƒ<                           ªª    E  €   @  
 
-À 	 l                                                                                                             Ä        Ô€              ÏÄ  °   °   ƒ<                °           ªª    E  €   @  
+À 	 l                                                                                                             Ä        Ô€              ÏÄ  °   °   ƒ<                           ªª    E  €   @  
 
- 	À l                                                                                                             ßÄ        Ô€              ký  A   A   €€  ÿÿÿÿÿÿ          ` +Ä.     è    Œ$0H`l u'è4mesh       ºO A   A   €€  ÿÿÿÿÿÿ          ` 
-/     è    Œ$0H`l Ä.è4mesh        † °   °   ƒ<                À           ªª    E  €   @  
+ 	À l                                                                                                             ßÄ        Ô€              ký  A   A   €€  ÿÿÿÿÿÿ           +Ä.     è    Œ$0H`l u'è4mesh       ºO A   A   €€  ÿÿÿÿÿÿ           
+/     è    Œ$0H`l Ä.è4mesh        † °   °   ƒ<                0           ªª    E  €   @  
 
-À 	 l                                                                                                             h‡       Ô€              ˆ °   °   ƒ<                À           ªª    E  €   @  
+À 	 l                                                                                                             h‡       Ô€              ˆ °   °   ƒ<                0           ªª    E  €   @  
 
- 	À l                                                                                                             /ˆ       Ô€              ðI °   °   ƒ<                Ð           ªª    E  €   @  
+ 	À l                                                                                                             /ˆ       Ô€              ðI °   °   ƒ<                @           ªª    E  €   @  
 
-À 	 l                                                                                                             ¸J       Ô€              oK °   °   ƒ<                Ð           ªª    E  €   @  
+À 	 l                                                                                                             ¸J       Ô€              oK °   °   ƒ<                @           ªª    E  €   @  
 
- 	À l                                                                                                             K       Ô€              @ °   °   ƒ<                à           ªª    E  €   @  
+ 	À l                                                                                                             K       Ô€              @ °   °   ƒ<                P           ªª    E  €   @  
 
-À 	 l                                                                                                                    Ô€              ¿ °   °   ƒ<                à           ªª    E  €   @  
+À 	 l                                                                                                                    Ô€              ¿ °   °   ƒ<                P           ªª    E  €   @  
 
- 	À l                                                                                                             Ï       Ô€              �Ð °   °   ƒ<                ð           ªª    E  €   @  
+ 	À l                                                                                                             Ï       Ô€              �Ð °   °   ƒ<                `           ªª    E  €   @  
 
-À 	 l                                                                                                             XÑ       Ô€              Ò °   °   ƒ<                ð           ªª    E  €   @  
+À 	 l                                                                                                             XÑ       Ô€              Ò °   °   ƒ<                `           ªª    E  €   @  
 
- 	À l                                                                                                             Ò       Ô€              à“ °   °   ƒ<                            ªª    E  €   @  
+ 	À l                                                                                                             Ò       Ô€              à“ °   °   ƒ<                p           ªª    E  €   @  
 
-À 	 l                                                                                                             €”       Ô€              7• °   °   ƒ<                            ªª    E  €   @  
+À 	 l                                                                                                             €”       Ô€              7• °   °   ƒ<                p           ªª    E  €   @  
 
- 	À l                                                                                                             G•       Ô€              0W °   °   ƒ<                           ªª    E  €   @  
+ 	À l                                                                                                             G•       Ô€              0W °   °   ƒ<                €           ªª    E  €   @  
 
-À 	 l                                                                                                             ÐW       Ô€              _X °   °   ƒ<                           ªª    E  €   @  
+À 	 l                                                                                                             ÐW       Ô€              _X °   °   ƒ<                €           ªª    E  €   @  
 
- 	À l                                                                                                             oX       Ô€              € °   °   ƒ<                            ªª    E  €   @  
+ 	À l                                                                                                             oX       Ô€              € °   °   ƒ<                �           ªª    E  €   @  
 
-À 	 l                                                                                                                     Ô€              ¯ °   °   ƒ<                            ªª    E  €   @  
+À 	 l                                                                                                                     Ô€              ¯ °   °   ƒ<                �           ªª    E  €   @  
 
- 	À l                                                                                                             ¿       Ô€              ÐÝ °   °   ƒ<                0           ªª    E  €   @  
+ 	À l                                                                                                             ¿       Ô€              ÐÝ °   °   ƒ<                            ªª    E  €   @  
 
-À 	 l                                                                                                             pÞ       Ô€              ÿÞ °   °   ƒ<                0           ªª    E  €   @  
+À 	 l                                                                                                             pÞ       Ô€              ÿÞ °   °   ƒ<                            ªª    E  €   @  
 
- 	À l                                                                                                             ß       Ô€               ¡ °   °   ƒ<                @           ªª    E  €   @  
+ 	À l                                                                                                             ß       Ô€               ¡ °   °   ƒ<                °           ªª    E  €   @  
 
-À 	 l                                                                                                             À¡       Ô€              O¢ °   °   ƒ<                @           ªª    E  €   @  
+À 	 l                                                                                                             À¡       Ô€              O¢ °   °   ƒ<                °           ªª    E  €   @  
 
- 	À l                                                                                                             _¢       Ô€              pd °   °   ƒ<                P           ªª    E  €   @  
+ 	À l                                                                                                             _¢       Ô€              pd °   °   ƒ<                À           ªª    E  €   @  
 
-À 	 l                                                                                                             e       Ô€              Ÿe °   °   ƒ<                P           ªª    E  €   @  
+À 	 l                                                                                                             e       Ô€              Ÿe °   °   ƒ<                À           ªª    E  €   @  
 
- 	À l                                                                                                             ¯e       Ô€              ‹ž A   A   €€  ÿÿÿÿÿÿ          p Ke6     è    Œ$0H`l /è4mesh       Úð A   A   €€  ÿÿÿÿÿÿ          p *·6     è    Œ$0H`l e6è4mesh       À'	 °   °   ƒ<                `           ªª    E  €    @  
+ 	À l                                                                                                             ¯e       Ô€              ‹ž A   A   €€  ÿÿÿÿÿÿ          ÐKe6     è    Œ$0H`l /è4mesh       Úð A   A   €€  ÿÿÿÿÿÿ          Ð*·6     è    Œ$0H`l e6è4mesh       À'	 °   °   ƒ<                à           ªª    E  €    @  
 
-À 	 l                                                                                                             `(	       Ô€              ï(	 °   °   ƒ<                `           ªª    E  €    @  
+À 	 l                                                                                                             `(	       Ô€              ï(	 °   °   ƒ<                à           ªª    E  €    @  
 
- 	À l                                                                                                             ÿ(	       Ô€              ë	 °   °   ƒ<                p           ªª    E  € !  @  
+ 	À l                                                                                                             ÿ(	       Ô€              ë	 °   °   ƒ<                ð           ªª    E  € !  @  
 
-À 	 l                                                                                                             °ë	       Ô€              ?ì	 °   °   ƒ<                p           ªª    E  € !  @  
+À 	 l                                                                                                             °ë	       Ô€              ?ì	 °   °   ƒ<                ð           ªª    E  € !  @  
 
  	À l                                                                                                             Oì	       Ô€              `®
- °   °   ƒ<                €           ªª    E  € "  @  
+ °   °   ƒ<                            ªª    E  € "  @  
 
 À 	 l                                                                                                              ¯
        Ô€              �¯
- °   °   ƒ<                €           ªª    E  € "  @  
+ °   °   ƒ<                            ªª    E  € "  @  
 
  	À l                                                                                                             Ÿ¯
-       Ô€              °q °   °   ƒ<                �           ªª    E  € #  @  
+       Ô€              °q °   °   ƒ<                           ªª    E  € #  @  
 
-À 	 l                                                                                                             Pr       Ô€              ßr °   °   ƒ<                �           ªª    E  € #  @  
+À 	 l                                                                                                             Pr       Ô€              ßr °   °   ƒ<                           ªª    E  € #  @  
 
- 	À l                                                                                                             ïr       Ô€               5 °   °   ƒ<                            ªª    E  € $  @  
+ 	À l                                                                                                             ïr       Ô€               5 °   °   ƒ<                            ªª    E  € $  @  
 
-À 	 l                                                                                                             Œ5       Ô€              6 °   °   ƒ<                            ªª    E  € $  @  
+À 	 l                                                                                                             Œ5       Ô€              6 °   °   ƒ<                            ªª    E  € $  @  
 
- 	À l                                                                                                             +6       Ô€              Pø °   °   ƒ<                °           ªª    E  € %  @  
+ 	À l                                                                                                   